1.8086CPU的转移指令分为
无条件转移指令(如jmp)
条件转移指令
循环指令
过程过程
中断
2.操作符--offset
offset是汇编语言中由编译器处理的符号,它的功能是取得标号的偏移地址
assume cs:code
code segment
start: mov ax,offset start
s: mov ax,offset s
code ends
end
在上述汇编指令中:start是代码段中的标号他所代表的是代码段中的第一条指令,偏移地址是0;长度为3字节(具体原因待查)。
mov ax,offset start相当mov ax,0;
s是代码段中的标号,他所代表的是代码段中的第二条指令,第一条指令长度为3,偏移地址是3;
mov ax,offset s 相当于 mov ax,3
3.jmp--无条件转移指令
可以只修改IP,也可以同时修改cs和IP;
jmp:只需要给出两种信息:转移的目的地址和转移的距离(段间位移,段内短转移,段内近转移)
3.1-依据位移进行转移
格式:jmp short 标号
代码:
assume cs:code
code segment
start : mov ax,0
jmp short s
add ax,1
s: inc ax
code ends
end
结果:
将汇编语言翻译成ji'q机器码jmp short s等同于jmp 0008((IP)=(IP)+8);
jmp near ptr等同(IP)=(IP)+16,段内近转移,都是相对于当前的IP进行转移
3.2转移的目的地址在指令中的jmp指令--段间转移(远转移)
转移:jmp far ptr
汇编指令:
assume cs:code
code segment
start : mov ax,0
mov bx,0
jmp far ptr s
db 256 dup(0)
s: add ax,1
inc ax
code ends
end
看一下机器码:
如图: jmp far ptr sdui'对应的机器码:EA 0B 01 BD 0B;高地址(转移的段地址)BD 0B;地址0B 01是偏移地址
3.3转移地址在寄存器中的jmp指令
指令格式:jmp 16位reg
功能:(IP)=(16位reg)
3.5转移地址在内存中的jmp指令
两种格式:jmp word ptr 内存单元地址(段内转移)
程序代码:
assume cs:code
code segment
start : mov ax,0123H
mov ds:[0],ax
jmp word ptr ds:[0]
code ends
end
结果:
执行后IP位0123H;
jmp dword ptr (段间转移)
程序:
assume cs:code
code segment
start : mov ax,0123H
mov ds:[0],ax
jmp word ptr ds:[2],0
jmp dword ptr ds:[0]
code ends
end
结果:
实际的结果:
是(cs)=0,IP=(0123)H,最后的结果代进一步。