汇编语言-王爽-学习笔记-2

1、jmp指令
      jmp指令后面的操作目标可以有:标号、寄存器、内存地址,具体的格式如下:
            jmp short 标号
            jmp near ptr 标号
            jmp far ptr 标号
            jmp 16位reg
            jmp word ptr 内存单元地址
            jmp dword ptr 内存单元地址

      jmp short和near,都是段内转移。其最终汇编成的机器码中,并不会带有标号的绝对地址,而是相对位移(标号处地址 - jmp指令后第一个字节的地址),不同的是,short时,相对位移在机器指令中用8位数表示,near时是16位。
      jmp far ptr 标号,是段间转移,又称远转移。执行后,(cs) = 标号所在段的段地址;(ip) = 标号所在段中的偏移地址。其汇编后的机器码形如"EA 0B 01 BD 0B",执行后,cs=0BBDh,ip=010Bh,所以,这个转移,就是转移的目的地址在指令中。
      jmp 16位reg,是段内转移。执行后,(ip) = 寄存器的值。"jmp ax",在含义上好似:"mov ip, ax",当然,后一条指令是不合法的。
      jmp word ptr 内存单元,是段内转移。执行后,(ip) = (内存单元地址)。
      jmp dword ptr 内存单元,是段间转移。执行后,(cs) = (内存单元地址+2),(ip) = (内存单元地址)。

      另外,"jmp cs:[bx]"是合法的,其相当于"jmp word ptr cs:[bx]";而"jmp cs:[100]"是不合法的,"jmp word ptr cs:[100]是合法的。所以最好还是用"jmp word ptr cs:[bx]"这种写法比较好。

2、jcxz指令
      jcxz指令,为有条件转移指令,是short转移,在对应的机器码中包含8位的转移位移,而不是目的地址。
      指令格式:jcxz 标号。
      操作:当(cx) == 0时,(ip) = (ip) + 8位位移;当(cx) != 0时,什么也不做,程序向下执行。
      "jcxz 标号"的功能,相当于:
               if(cx == 0)      jmp short 标号

3、loop指令
      loop指令,为循环指令,是short转移,在对应的机器码中包含8位的转移位移,而不是目的地址。
      指令格式:loop 标号。
      操作:(1)、 (cx) = (cx) - 1
               (2)、 当(cx) != 0时,(ip) = (ip) + 8位位移;当(cx) == 0时,什么也不做,程序向下执行。
      "loop 标号"的功能,相当于:
               cx--;
               if (cx != 0)      jmp short 标号

4、。。。。

你可能感兴趣的:(汇编语言-王爽-学习笔记-2)