汇编学习10 CALL与RET指令
2019-04-28 本文已影响0人
官总哦
一、RET和RETF
这两个指令都是转移指令,转移指令都是通过修改CS或者IP实现的跳转, 这两者也不例外。
- RET:利用栈中数据,修改IP实现跳转
汇编描述等同于:pop IP- RETF:利用栈中数据,同时修改CS和IP实现跳转
汇编描述等同于:pop IP ;pop CS(栈顶字存IP,第二个字存CS)
二、CALL指令
RET指令的逆指令,将当前位置的IP或者CS push入栈,再跳转
CALL的用法跟JMP用法相似,注意对比记忆
- CALL 标号:将当前指令下一条指令的IP,PUSH进入栈中,再跳转到标号位置
汇编描述等同于:push IP;jmp near ptr 标号(近转移)- CALL far ptr 标号: 相当于将当前位置的CS和IP压入栈中,在跳到标号位置
汇编描述等同于: push CS;push IP;jmp far ptr 标号- CALL 16位reg:将IP压栈后,跳转到reg中的地址
汇编描述等同于:push IP;jmp reg- CALL word ptr 内存单元地址
- CALL dword ptr 内存单元地址
第一个相当于将IP压栈,第二个相当于将CS和IP相继入栈
CALL指令和RET指令配合使用,实现程序中的灵活跳转
三、MUL指令
1.乘法指令MUL的两个相乘的数:要么都是8位,要么都是16位(类型匹配)
- 两个相乘的数是8位的时候,一个放在AL中,一个放在另一个寄存器(8位)或者内存字节单元中
- 如果是16位的两位数,一个放在AX中,一个放在另一个寄存器中或者内存字节单元中
- 指令的结果:如果是8位乘法则结果默认放在AX中;如果是16位乘法,则结果高位放在DX中,低位放在AX中。