汇编语言8之转移指令的原理

转移行为类型:

  • 无条件转换指令(如:jmp)
  • 条件转移指令
  • 循环指令(如:loop)
  • 过程
  • 中断

操作符offset

标号有段地址和偏移地址seg去段地址,offset去偏移地址

如果直接在寄存器中使用标号,获得的是ds和offset组合得到的数据值

功能:获取标号的偏移地址

将s处的内容复制到s0处

]

根据位移进行转移的jmp指令

短转移:jmp short 标号(转移到标号处执行指令)

这种格式的jmp指令实现的是段内短转移,对ip修改范围为-128-127

在一般的汇编指令中。汇编的idata(立即数)会出现在翻译后的指令中,但是对于jmp指令,机器码中没有转移的目的的地址,在汇编的时候会将绝对的标号地址替换成相对于当前ip指针的偏移地址

所以这条指令的功能就是:修改ip使得:(ip) = (ip)+8位的偏移(-128到127)

近转移:jmp near ptr 标号

和段转移一样,只不过相对ip的偏移编程了16位位移

远转移:jmp far ptr 段寄存器:偏移地址

转移地址在内存中的jmp指令

jmp word ptr ds:[]段内转移,位数只够改变ip的值

jmp dword ptr ds:[] 段间转移,高地址放的是目的的段地址,低地址放的是ip的地址

jcxz指令

有条件转移指令,所有的有条件转移指令都是短转移

如果cx==0,就会实现跳转

loop指令

(cx)=(cx)-1如果cx!=0跳转

分析下列程序

assume cs:codesg
codesg segment
		mov ax,4c00h
		int 21h
start: 
		mov ax,0
s:		nop
		nop
		
		mov di,offset s
		mov si,offset s2
		mov ax,cs:[si]
		mov cs:[di],ax
		
s0:		
		jmp short s

s1:		mov ax,0
		int 21h
		mov ax,0
		
s2:		jmp short s1
		nop
codesg ends
end start

这个程序最终会运行到mov ax,4c00h int 21h然后正常退出。

原因是jmp跳转的时候实际的机器码是相对当前pc+或者-多少字节,在运行到s处的jmp short s1的时候这条语句时,实际上机器码负数向上偏移-7个字节的形式进行的计算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值