zoukankan      html  css  js  c++  java
  • 汇编笔记(1) 寄存器

    Debug

    r:查看当前所有寄存器的值;也可以通过r <寄存器名称>来修改寄存器的内容。

    d:查看内存内容,例如 -d 1000:0 8 查看段地址为1000,偏移地址为0,8个字节长度的内存内容。

    e:直接修改内存内容:16进制

    u:也是查看内存内容,但是会翻译成汇编指令显示出来,而不是16进制内容

    a:直接修改内存内容:汇编指令

    t:单步执行指令

    p:跳出循环,比如loop和系统终端,也可以通过g指定一个偏移地址来直接执行到某个指令。

    寄存器

    CS:代码段地址,通过与IP(偏移地址)的配合形成20位的实际代码物理地址。CS:IP指向CPU当前执行的指令。

    DS:数据段地址,通过手动指定偏移地址共同确定数据的物理地址;DS不能直接设置,需要通过其他寄存器来进行赋值。

    SS:SP确定栈顶位置;push和pop指令执行时会根据SS:SP去确定栈顶位置。CPU不知道栈满和栈空,需要程序员自己管理。

    CX:存放循环次数,与loop指令配合使用。

    编程注意

    MASM中的数值默认是十进制,如果要写16进制的必须用0开头或者h结尾,十六进制的2000要写成2000h。

    debug中都是十六进制的,所以可以直接写十六进制数值就行了,例如2000,

    [bx]

    在debug中可以通过

    mov ax,[0]

    来读取内存中的内容到寄存器。但是在MASM只能通过下面这样才可以:

    mov bx,0
    mov ax,[bx]

     或者下面这样也行:

    mov ax,ds:[0]
    mov bx,ds:[1]
    mov cx,ds:[2]
    mov dx,ds:[3]

    代码示例

    ;计算0ffff:0 ~ 0ffff:b十二个字节单元的内存值的和,存放到dx中
    assume cs:code code segment ;代码段,code是代码端的名称。一个程序可以有很多代码段 start:mov ax,0ffffh mov ds,ax ;往ds中写数据需要借助其他寄存器,ds:数据段地址 mov dx,0 mov cx,12 ;cx存放的是loop循环的次数 s:mov bx,0 ;s为标号 loop可跳转到标号 mov al,[bx] mov ah,0 add dx,ax inc bx loop s ;每次循环完之后会自己递减cx,直到cx为0 mov ax,4c00h ;这两句是标准的程序退出语句 int 21 code ends ;代码段结束 end start ;end为程序结束,start为程序入口

    安全空间

    0:200 ~ 0:2ff

  • 相关阅读:
    安装 Java 开发工具包JDK(Windows版本)
    在sublime text 3中让.vue文件的内容变成彩色
    iOS之禁止所有输入法的表情
    iOS之UIButton扩大按钮的响应区域
    iOS之利用腾讯Bugly程序调试,测试代码bug、卡顿等情况
    iOS之在本地搭建IPv6环境测试你的app
    iOS之让UISearchBar搜索图标和placeholder靠左显示
    iOS之限制TextField的输入长度
    iOS之oc与html之间的交互(oc中调用js的方法)
    iOS之面试题:腾讯三次面试以及参考思路
  • 原文地址:https://www.cnblogs.com/at0x7c00/p/8857708.html
Copyright © 2011-2022 走看看