码迷,mamicode.com
首页 > 其他好文 > 详细

实验九

时间:2018-12-14 19:51:24      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:模块化   主程序   另一个   idt   数据   使用   实验   依据   程序   

一、ret和retf

①ret:用栈中的数据修改IP的值,从而实现近转移。

ret指令的两步操作:

(IP)=((SS)*16+(SP));(SP)=(SP)+2。

②retf:用栈中的数据修改CS和IP的值,从而实现远转移。

retf指令的四步操作:

(IP)=((SS)*16+(SP));(SP)=(SP)+2;(CS)=((SS)*16+(SP));(SP)=(SP)+2。

二、call指令

两步操作:

①将当前的IP或CS和IP压入栈中。

②转移。

call指令不能实现短转移。

三、依据位移进行转移的call指令

call  标号(将当前的IP压栈后,转移到标号处执行指令)(段内近转移)

两步操作:(SP)=(SP)-2   ((SS)*16+(SP))=(IP);(IP)=(IP)+16位位移。

call  标号=push IP 

                 jump  near ptr  标号

四、转移的目的地址在指令中的call指令

call far ptr 标号(将当前的CS和IP压栈后,转移到标号处执行指令)(段间转移)

四步操作:(SP)=(SP)-2   ;((SS)*16+(SP))=(CS);(SP)=(SP)-2   ;((SS)*16+(SP))=(IP)

call far ptr 标号=push CS

                          push IP

                          jmp far ptr  标号

 五、转移地址在寄存器中的call指令

call 16 位reg(16位寄存器)

两步操作:(SP)=(SP)-2;((SS)*16+(SP))=(IP)=(16位reg)

call  16位reg=push IP

                       jmp  16位reg

六、转移地址在内存中的call指令

①call word ptr 内存单元地址

call word ptr 内存单元地址=push IP

                                             jmp word ptr 内存单元地址

②call dword ptr 内存单元地址

call dword ptr 内存单元地址=push CS

                                              push IP

                                              jmp dword ptr 内存单元地址

总结call格式:

技术分享图片

技术分享图片

七、call和ret的配合使用(例题)

 技术分享图片

技术分享图片

技术分享图片

技术分享图片

八、mul指令

①两个数相乘:两个相乘的数必须都是8位或者都是16位。都是8位时:一个默认放在AL中,另一个放在8位reg或者内存字节单元;都是16位时:一个放在AX中,另一个放在16位reg或内存子单元中。

②结果:都是8位时:默认放在AX中;都是16位时:高位默认放在DX中存放,低位放在AX中。

技术分享图片

九、模块化程序设计(略)

十、参数和结果传递的问题(例题)

 技术分享图片

技术分享图片

技术分享图片

技术分享图片

十一、批量数据的传送(例题)

 技术分享图片

技术分享图片

技术分享图片

十二、寄存器冲突的问题

寄存器用作参数传递时,由于寄存器个数有限,且有些寄存器在指令中有特殊用途,如cx在loop和jcxz指令中的"专用",al, ah, ax, dx在mul指令和div指令中的"专用"等。因此,在子程序和主程序中可能会出现寄存器使用冲突的问题,造成程序执行有误。

实验九

标签:模块化   主程序   另一个   idt   数据   使用   实验   依据   程序   

原文地址:https://www.cnblogs.com/1359027962qqcom/p/10120662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!