汇编学习10 CALL与RET指令

一、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中,一个放在另一个寄存器中或者内存字节单元中
  1. 指令的结果:如果是8位乘法则结果默认放在AX中;如果是16位乘法,则结果高位放在DX中,低位放在AX中。

你可能感兴趣的:(汇编学习10 CALL与RET指令)