本系列文章参考汇编语言第四版和汇编语言程序设计 贺利坚主讲整理而成
jmp指令的功能 : 无条件转移,可以只修改IP,也可以同时修改CS和IP
jmp指令要给出两种信息:
转移的目的地址
转移的距离
段间转移(远转移): jmp 2000:1000
段内短转移: jmp short 标号 ; IP的修改范围为 -128~127,8位的位移
段内近转移: jmp near ptr 标号 ; IP的修改范围为 -32768~32767,16位的位移
076A:0003 EB03 JMP 0008
076A:0005 050100 ADD AX,0001
076A:0008 40 INC AX
JMP short s : 对应的机器指令中,包含的是当前指令下一条指令开始位置处,到段内目标地址的位移
远转移(跨段转移)中,转移机器指令中包含的是目标地址,而不是相对位移
将当前IP或CS和IP压栈,是为了子程序调用结束后,程序能够回到原来的位置,继续往下面执行
设计用来回到子程序调用结束后,源程序继续运行的地址处
注意观察在调用call指令和ret指令时,sp栈顶寄存器值的变化
call需要使用栈,但是这里程序没有分配栈空间,是默认给出的栈空间,因此这是非常危险的,鬼知道默认的空间,是不是在别的啥子地方被占用了
保存BP寄存器旧值的原因,在于子程序中需要使用到BP寄存器,而BP寄存器可能在主程序或者其他程序中被使用中,因此当前子程序用完BP寄存器后,需要恢复其旧值才可以。
ret 4是先恢复IP寄存器原先值,然后再讲SP栈顶地址寄存器的偏移值+4,这里是跳过a和b两个数据,因为这两个值没用了,不需要继续占据着栈空间
问题:根据提供的N,计算N的3次方。
考虑
方案:
之前我们每次循环时,都是提前将要循环的次数保存在了cx寄存器中,但是有没有办法不提前写好循环次数,而在合适的时机结束循环呢?
cx寄存器使用的冲突,会导致程序运行的奔溃,这是个大问题,怎么解决呢?
对于最后一种因为减法产生借位而导致CF=1的情况,显然不是我们期望的样子,因此是存在问题的,但是这种问题的解决需要程序员自己去控制
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://cjdhy.blog.csdn.net/article/details/125359481
内容来源于网络,如有侵权,请联系作者删除!