ImageVerifierCode 换一换
格式:PPT , 页数:25 ,大小:456KB ,
资源ID:2721657      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2721657.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(合肥工业大学——汇编语言程序设计_4_2.ppt)为本站会员(dreamzhangning)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

合肥工业大学——汇编语言程序设计_4_2.ppt

1、汇编语言程序设计 Assembly Language Programming,第四章 汇编语言程序设计,顺序程序设计。分支程序设计。(地址表、转移表)循环程序设计。(逻辑尺),5. 过程,过程(子程序)定义伪操作procedure_name PROC NEAR ( FAR ) procedure_name ENDP(1)NEAR属性:调用程序和子程序在同一代码段中(段内调用)(2)FAR属性:调用程序和子程序不在同一代码段中(段间调用),code segment assume Start:call subr1Mov ah,4ch int 21hsubr1 proc nearret subr1

2、endpcode ends,code segmentmain proc farcall subr1ret main endpsubr1 proc nearret subr1 endpcode ends,调用程序和子程序在同一代码段中,调用程序和子程序不在同一代码段中subseg segmentsubt proc farretsubt endpsubseg endsmainseg segmentcall subtmainseg ends,调用方式,Direct CALL SUB;段内和段间 Indirect LEA AX,SUB ;段内 CALL AX 或CALL WORD PTR 内存 ;段内

3、 或CALL DWORD PTR 内存 ;段间,子程序调用(中断调用):隐含使用堆栈保存返回地址call near ptr subp (1) 保存返回地址 PUSH IP(2) 转子程序(IP) subp的偏移地址call far ptr subp (1) 保存返回地址 PUSH CS;PUSH IP(2) 转子程序(CS) subp的段地址(IP) subp的偏移地址,子程序的调用和返回,注意事项,在过程定义体内,必须有一条RET指令能被执行到。 调用时,最好不要强制改变调用类型。 子程序保护现场。 堆栈操作指令必须配对。 定义允许嵌套和递归。,保存与恢复现场 subt proc farpu

4、sh axpush bxpush cxpush dxpop dxpop cxpop bxpop axretsubt endp,CALL 与RET指令的模拟,CALL模拟 PUSH CS;段间需要 MOV AX,OFFSET RETADD; PUSH AX JMP 过程名 RET模拟 POP AX; 弹出IP JMP AX;段内 段间怎么办?,程序与子程序之间的参数传递,区分 传入参数和传出参数 传值和传地址 方式 无参数传递 用寄存器来传递参数 用内存单元传递参数 用堆栈来传递参数,无参数传递,实现回车换行,LF_CR PROCMOV DL,0DHMOV AH,2INT 21HMOV DL,0

5、AHMOV AH,2INT 21HRET LF_CR ENDP CSEG ENDS END START,CSEG SEGMENT ASSUME CS:CSEG START: CALL LF_CR MOV AH,4CHINT 21H,;恢复现场,; 保存现场,用内存数传递参数,适用于传递全局变量的情况,PRINTSTR PROCLEA DX,STRMOV AH,9INT 21HRET PRINTSTR ENDPCSEG ENDS END START,DSEG SEGMENTSTR DB GOOD$ DSEG ENDSCSEG SEGMENT ASSUME START:CALL PRINTSTRM

6、OV AH,4CHINT 21H,用寄存器来传递参数(1),传输单个变量 适用于参数较少的情况 例子:编写一个子程序,完成求平方的功能,输入参数通过DL传递,输出通过DX传递,SQUARE PROC NEARPUSH AXMOV AL,DLMUL ALMOV DX,AX POP AXRET SQUARE ENDP,用寄存器来传递参数(2),传输指针 传递一个缓冲区 例子:编写子程序累加长度为100的无符号字节缓冲区buffer,首地址通过BX传递,结果通过DX传回,SUM PROC NEARPUSH CXMOV CX, 100MOV DX,0 AGAIN:ADD DL,BXADC DH,0AD

7、C BXLOOP AGAIN POP CXRET SUM ENDP,用堆栈来传递参数,适用性极大,高级语言均采用此方式 注意: 段内调用时只有IP入栈 段间调用时有CS,IP入栈,主程序通过堆栈传参数到子程序。设参数为X (WORD),子程序为FAR,主程序动作 PUSH X PUSH CS PUSH IP,X,CS 断点,IP 断点,堆栈,子程序提取数据X PUSH BP MOV BP,SP WORD PTR BP+6如果是Near调用 WORD PTR BP+4,X,CS 断点,IP 断点,原BP,主程序通过堆栈传参数到子程序。设参数为X (WORD),子程序为FAR,主程序通过堆栈传入和

8、传出参数。设传入参数为X ,传出参数为Y (X,Y为WORD) ,子程序为NEAR,主程序动作 SUB SP,2 PUSH X PUSH IP,分配Y,X,IP 断点,堆栈,子程序提取数据X PUSH BP MOV BP,SP WORD PTR BP+4 传出数据 WORD PTR BP+6,分配Y,X,IP 断点,原BP,主程序通过堆栈传入和传出参数。设传入参数为X ,传出参数为Y (XY为WORD) ,子程序为NEAR,主程序通过堆栈传入和传出参数。设传入参数为X ,传出参数为Y (X,Y为WORD) ,子程序为NEAR,RET 局部变量的销毁 主程序完成 ADD SP,2 子程序完成 R

9、ET 2 取出传回的值 POP AX,分配Y,X,IP 断点,堆栈,用堆栈来传递参数,编写子程序完成a-b=c,DATA SEGMENTA DW 2B DW 1SUM DW 0 DATA ENDSSUBSEG SEGMENT ASSUME CS:SUBSEG,DS:DATA HTON_F PROC FARPUSH BPMOV BP,SPPUSH AXPUSH BXMOV BX,BP+8MOV AX,BP+6SUB AX,BXMOV BP+10,AXPOP BXPOP AXPOP BP RET 4 HTON_F ENDP SUBSEG ENDS,CSEG SEGMENT ASSUME CS:CS

10、EG, DS:DATA START:MOV AX,DATAMOV DS,AXSUB SP, 2PUSH BPUSH ACALL HTON_FPOP SUM MOV AH, 4CHINT 21HCSEG ENDS END START,预留给C,b,a,CS:IP,原BP,BP,P168.递归求解:Sum(n)=1+2+n, PUSH AX PUSH nCALL SUM POP Result,SUM PROC FAR PUSH BPMOV BP,SPPUSH AXMOV AX,BP+6CMP AX,0JNZ SUM1MOV AX,0JMP EXIT SUM1: SUB SP,2DEC AXPUSH

11、 AXCALL SUMPOP AXADD AX, BP+6 EXIT:MOV BP+8,AXPOP AXPOP BP RET 2,若n=0,Sum(n)=0; 否则= Sum(n-1)+ n,预留给结果,n(=2),CS:IP,原BP, n DW 100 Result DW ?,原AX,n=1的结果,IP:POPAX,AX,BP2,n=0的结果,IP:POPAX,AX,BP1,n=(0),n=(1),C语言传入、传出参数约定,返回值:通过寄存器返回 AL char AX short EAX int (EDX,EAX) _int64 EAX指针 传入参数:通过堆栈 由右向左,实验II,1. BL中的只有一位为1。编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。(*)2.实验指导书之实验五:采用冒泡排序方式对数组进行由大到小排序;然后将结果在屏幕上打印出来。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报