一步步学汇编(九)call & ret

一步步学汇编(九) call & ret

call和ret指令都是转移指令,都修改IP,或同时修改CS和IP。经常被用来
实现子程序的设计。

ret指令用栈中的数据,修改IP的内容,实现近转移
retf指令用栈中的数据,修改CS和IP的内容,实现远转移

CPU执行ret指令时的操作:
(1)(IP)=((SS)*16+(SP))
(2)(SP)=(SP)+2

CPU执行retf指令是的操作:
(1)(IP)=((SS)*16+(SP))
(2)(SP)=(SP)+2
(3)(CS)=((SS)*16+(SP))
(4)(SP)=(SP)+2

CPU执行call指令是进行的操作:
(1) 将当前的IP或CS和IP压入栈中
(2) 转移

依据位移惊醒转移的call指令操作:
(1) (sp)=(sp)-2
    ((ss)*16+(sp))=(ip)
(2) (ip)=(ip)+16位位移

"call far ptr 标号"实现的是段间转移,其操作如下:
(1)(sp)=(sp)-2
   ((ss)*16+(sp))=(cs)
   (sp)=(sp)-2
   ((ss)*16+(sp))=(ip)
(2)(cs)=标号所在段的段地址
   (ip)=标号在段中的偏移地址

"call 16位寄存器",操作如下:
(sp)=(sp)-2
((ss)*16+(sp))=(ip)
(ip)=(16位寄存器)

call word ptr 内存单元地址,操作:
push ip
jmp word ptr 内存单元地址

call dword ptr 内存单元地址,操作:
push CS
push IP
jmp dword ptr 内存单元地址

mul指令:乘法指令
两个相乘的数,要么都是8位要么都是16位,如果是8位,一个默认放在Ah
中,另一个放在内存字节单元中或8位寄存器中,如果是16位,一个默认
放在AX中,另一个放在内存字单元中或16位寄存器中

相乘的结果:如果是8位,结果默认放在AX中;如果是16位乘法,结果高位默认
放在DX中,低位默认放在AX中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值