




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机接口技术
(汇编与接口)第四章汇编语言程序设计4主要内容:汇编语言源程序的结构汇编语言语句格式伪指令功能调用汇编语言程序设计第4章:4.6子程序设计把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率主程序(调用程序)需要利用CALL指令调用子程序(被调用程序)子程序需要利用RET指令返回主程序第4章:4.6.1过程定义和子程序编写汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:
过程名
PROC[NEAR|FAR]
……
;过程体
过程名
ENDP可选的参数指定过程的调用属性。没有指定过程属性,则采用默认属性NEAR属性(段内近调用)的过程只能被相同代码段的其他程序调用FAR属性(段间远调用)的过程可以被相同或不同代码段的程序调用第4章:子程序编写注意事项⑴子程序要利用过程定义伪指令声明⑵子程序最后利用RET指令返回主程序,主程序执行CALL指令调用子程序⑶子程序中对堆栈的压入和弹出操作要成对使用,保持堆栈的平衡⑷子程序开始应该保护使用到的寄存器内容,子程序返回前相应进行恢复⑸子程序应安排在代码段的主程序之外,最好放在主程序执行终止后的位置(返回DOS后、汇编结束END伪指令前),也可以放在主程序开始执行之前的位置第4章:例4.15用dos功能调用输出一个字符的子程序
;主程序
movdl,‘?’
;主程序提供显示字符
calldpchar
;调用子程序
;子程序:显示AL中的字符dpchar proc
;过程定义,过程名为dpchar
pushax
;顺序入栈,保护寄存器
pushbx movah,02h ;输出一个字符功能
int21h
popbx
;逆序出栈,恢复寄存器
popax
ret
;子程序返回dpchar endp
;过程结束第4章:例4.15源程序SsesegmentstackDb30dup(?)SseendsCodesegmentAssumecs:code,ss:ssestart:movax,23h
movdl,‘?’;主程序提供显示字符
calldpchar
;调用子程序
movax,4c00h int21h主程序部分本程序不需要数据段第4章:例4.15源程序(续)dpchar proc
;过程定义,过程名为dpchar pushax ;顺序入栈,保护寄存器
movah,02h ;输出一个字符功能
int21h
popax;逆序出栈,恢复寄存器
ret
;子程序返回dpchar endp
;过程结束
endstart子程序安排在主程序执行终止后的位置入口参数:寄存器DL,传数值出口参数:无第4章:子程序编写注意事项(续)⑹子程序允许嵌套和递归⑺子程序可以与主程序共用一个数据段,也可以使用不同的数据段(注意修改DS),还可以在子程序最后设置数据区(利用CS寻址)⑻子程序的编写可以很灵活,例如具有多个出口(多个RET指令)和入口,但一定要保证堆栈操作的正确性⑼处理好子程序与主程序间的参数传递问题⑽提供必要的子程序说明信息(子程序名,入口参数,出口参数,功能,程序)第4章:例4.16显示以“0”结尾字符串的嵌套子程序
;数据段msg db'Well,Imadeit!',0
;代码段(主程序)
movsi,offsetmsg
;主程序提供显示字符串
calldpstri
;调用子程序第4章:例4.16子程序;子程序dpstri:显示DS:SI指向的字符串(以0结尾)
dpstri proc pushaxdps1: movdl,[si] ;取显示字符
incsi cmpdl,0 ;是结尾,则显示结束
jzdps2
calldpchar
;调用字符显示子程序
jmpdps1dps2: popax
retdpstri endp;子程序dpchar:入口参数:寄存器DS:SI,传地址出口参数:无第4章:含数据区的子程序;子程序HTOASC:十六进制数转换为ASCII码HTOASC proc pushbx movbx,offsetASCII andal,0fh xlatCS:ASCII;换码:AL←CS:[BX+AL] popbx
ret;数据区ASCII db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db41h,42h,43h,44h,45h,46hHTOASC endp入口参数:寄存器AL,传数值出口参数:寄存器AL,传数值第4章:多出口子程序;子程序HTOASC:十六进制数转换为ASCII码HTOASC proc andal,0fh cmpal,9 jbehtoasc1 addal,37h ;是A~F,加37H ret ;子程序返回htoasc1: addal,30h ;是0~9,加30H
ret ;子程序返回HTOASC endp第4章:参数传递主程序与子程序间一个主要问题是参数传递入口参数(输入参数):主程序调用子程序时,提供给子程序的参数出口参数(输出参数):子程序执行结束返回给主程序的参数参数的具体内容传数值:传送数据本身传地址:传送数据的主存地址常用的参数传递方法寄存器共享变量(存储单元)堆栈第4章:4.6.2用寄存器传递参数最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致dpchardpstriHTOASC第4章:4.6.3用共享变量传递参数子程序和主程序使用同一个变量名存取数据就是利用共享变量进行参数传递如果主程序还要利用原来的变量值,则需要保护和恢复利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间传递数据第4章:4.6.4用堆栈传递参数参数传递还可以通过堆栈这个临时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法第4章:4.7宏(Macro)汇编宏是具有宏名的一段汇编语句序列宏需要先定义,然后在程序中进行宏调用由于形式上类似其他指令,所以常称其为宏指令宏指令实际上是一段代码序列的缩写;在汇编时,汇编程序用对应的代码序列替代宏指令因为是在汇编过程中实现的宏展开,所以常称为宏汇编第4章:1.宏定义宏定义由一对宏汇编伪指令MACRO和ENDM来完成,格式如下:
宏名
MACRO[形参表]
……
;宏定义体
ENDM其中宏名是符合语法的标识符,同一源程序中该名字定义唯一。宏定义体中不仅可以是硬指令序列,还可以是伪指令语句序列可选的形参表给出了宏定义中用到的形式参数,每个形式参数之间用逗号分隔第4章:2.宏调用宏定义之后就可以使用它,即宏调用:
宏名
[实参表]宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是宏展开宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代第4章:宏的实例1dispchar macrochar ;;宏定义
movah,2 ;;宏定义体
movdl,char int21h
endm
… dispchar‘?’ ;宏调用(宏指令)
…
1
movah,2 ;宏展开
1
movdl,’?’1 int21h第4章:宏的实例2dispmsg macromessage ;;宏定义
movah,9 ;;宏定义体
leadx,message int21h
endm
… dispmsgstring ;宏调用(宏指令)
…
1
movah,9 ;宏展开
1
leadx,string1 int21h第4章:宏与子程序的比较比较仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变通过形参、实参结合实现参数传递,简捷直观、灵活多变还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢需要利用寄存器、存储单元或堆栈等传递参数宏子程序第4章:宏与子程序的比较结论宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序比较
结论宏子程序第4章:教学要求掌握常量表达、变量定义及应用、变量和标号的属性及操作符掌握汇编语言源程序的编辑、汇编、连接和调试的开发方法掌握基本伪指令和操作符:EQU/=;+-*/;DB/DW/DD、?/DUP;ORG/$、OFFSET/SEG/PTR;END;PROC/ENDP第4章:教学要求(续)掌握基本的顺序、分支、循环和子程序设计方法熟悉常见程序设计问题:多精度运算,查表(查代码、特定值等)、ASCII和BCD代码转换;数据范围判断(0~9、A~Z、a~z)、字母大小写转换;字符串传送、比较等操作、求最小最大值、数据求和、统计字符个数XLAT指令的功能大小写字母的比较和转换‘A’=41H=01000001B‘B’=42H…
‘Z’=5AH=0101100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 婚介公司合同(2025年度)-婚恋品牌推广与营销协议
- 2025股东股权协议:智慧城市建设与运营
- 二零二五年度蔬菜大棚租赁权及经营权整体转让合同
- 二零二五医疗事故赔偿协议书范本编写指南
- 二零二五年度餐饮行业员工绩效考核聘用合同
- 2025年度桶装水电商平台用户数据分析与精准营销合同
- 二零二五年度车库租赁与智能停车系统合作协议
- 2025年度珠宝店员工劳动合同终止及后续服务合同
- 二零二五年度建筑工程安全生产监督检查合同
- 动产拍卖委托代理协议书(2025年度艺术品拍卖合作)
- 2025山东青岛市属事业单位公开招聘笔试和高频重点提升(共500题)附带答案详解
- 2024年07月山东省泰山财产保险股份有限公司2024年夏季校园招考29名工作人员笔试历年参考题库附带答案详解
- 临床护理死亡病例讨论
- 2025年广东韶关城投集团招聘笔试参考题库含答案解析
- 医疗器械生产企业并购合同
- 2025版新能源汽车充电站建设合同含政府补贴及税收优惠条款
- 2025年北京国资公司招聘笔试参考题库含答案解析
- 建设工程总承包EPC建设工程项目管理方案1
- iso28000-2022供应链安全管理手册程序文件表单一整套
- 养老院敬老院福利医养机构消防知识培训科普讲座教学课件
- 子痫诊断及治疗
评论
0/150
提交评论