汇编语言-转移指令的原理

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,最后的结果代进一步。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值