Ret和retf指令
Ret 用栈中的数据修改IP(近转移)
Retf 用栈中数据修改cs:ip(远转移)
Ret 执行过程
1(ip)=((ss)*16+(sp))
2(sp)=(sp)+2
Retf 执行过程
1(ip)=((ss)*16+(sp))
2(sp)=(sp)+2
3(cs)=((ss)*16+(sp))
4(sp)=(sp)+2
CALL指令 (不能实现短转移)
Call执行过程
1将当前ip或cs和ip压入栈中
2转移
Call 标号(将当前ip压栈后,转到标号处运行)
执行过程
1 (sp)=(sp)-2
((ss)*16+(sp))=(ip)
2(ip)=(ip)+16位位移
Call far prt 标号(段间转移)
执行过程
1 (sp)=(sp)-2
((ss)*16+(sp))=(cs)
(sp)=(sp)-2
((ss)*16+(sp))=(ip)
2(cs)=标号所在段的段地址
(ip)=标号在段中的偏移地址
Call 16位reg
1(sp)=(sp)-2
((ss)*16+(sp))=(ip)
(ip)=16位reg
Call word ptr 内存单元地址 /push ip jmp word ptr 内存单元地址
Call dword ptr 内存单元地址 /push cs push ip jmp dword ptr 内存单元地址
Mul指令(乘法计算)
Mul reg
Mul 内存单元
两个相乘数 要么都是8位,要么都是16位
8位其中一个默认放在al当中,另一个放在8位reg或者内存单元中
16位 默认存放在AX当中,另一个放在16位reg或者内存单元中
结果
8位乘法,结果默认保存在AX当中
16位乘法,结果高位默认在dx中存放,低位在ax中存放
本文详细解析了汇编语言中的Ret、Retf和Call指令的工作原理,包括它们在栈操作和转移控制中的作用。同时,深入探讨了Mul指令在8位和16位乘法计算中的应用,及其结果存储方式。
1736

被折叠的 条评论
为什么被折叠?



