汇编语言05.ppt

上传人:hyn****60 文档编号:70971197 上传时间:2023-01-31 格式:PPT 页数:99 大小:861.50KB
返回 下载 相关 举报
汇编语言05.ppt_第1页
第1页 / 共99页
汇编语言05.ppt_第2页
第2页 / 共99页
点击查看更多>>
资源描述

《汇编语言05.ppt》由会员分享,可在线阅读,更多相关《汇编语言05.ppt(99页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第 5 5 章章教学重点在在掌掌握握基基本本的的汇汇编编语语言言程程序序设设计计方方法法之之后后,进进一一步步学学习习如如何何提提高高编编程程效效率率的的各各种种实实用方法:用方法:高级语言特性高级语言特性宏结构宏结构模块化模块化第 5 章5.1 高级语言特性MASM 6.0引引入入高高级级语语言言的的程程序序设设计计特性特性n条件控制伪指令条件控制伪指令.IF .ELSE .ENDIFn循环控制伪指令循环控制伪指令.WHILE .ENDW .REPEAT .UNTILn过程声明和过程调用伪指令过程声明和过程调用伪指令.PROTO .INVOKE第 5 章5.1.1 条件控制伪指令 类类似似

2、高高级级语语言言中中IF、THEN、ELSE和和ENDIF的相应功能的相应功能在在汇汇编编时时要要展展开开,自自动动生生成成相相应应的的比比较较和和条条件转移指令序列,实现程序分支件转移指令序列,实现程序分支.IF 条件表达式条件表达式;条件为真(值为非条件为真(值为非0)分支体分支体;执行分支体执行分支体.ELSE;前面前面IF条件为假条件为假 分支体分支体;执行分支体执行分支体 .ENDIF;分支结束分支结束条件;单分支结构单分支结构.IF AX=ax;比较二者大小比较二者大小 mov tag,1;第一分支体:条件满足,第一分支体:条件满足,tag1.else mov tag,0;第二分支

3、体:条件不满足,第二分支体:条件不满足,tag0.endif.exit 0例5.12/2第 5 章5.1.2 循环控制伪指令 WHILE结构结构的循环控制伪指令的循环控制伪指令.WHILE 条件表达式条件表达式;条件为真条件为真 循环体循环体;执行循环体执行循环体.ENDW;循环体结束循环体结束UNTIL结构结构的循环控制伪指令的循环控制伪指令.REPEAT;重复执行循环体重复执行循环体 循环体循环体.UNTIL 条件表达式条件表达式;直到条件为直到条件为真真;WHILE结构结构xor ax,axmov cx,100.while cx!=0 add ax,cx dec cx.endwmov s

4、um,ax求1100之和;UNTIL结构结构xor ax,axmov cx,100.repeat add ax,cx dec cx.until cx=0mov sum,axmov cx,100 xor ax,axlea bx,array.repeat .if sword ptr bx=0 add ax,bx .else .break .endif inc bx inc bx.untilcxzmov result,ax例5.2第 5 章要要调调用用带带参参数数过过程程定定义义的的过过程程,不不应应采采用用CALL指令,因为比较烦琐指令,因为比较烦琐应该采用过程调用伪指令应该采用过程调用伪指令IN

5、VOKE使使 用用 INVOKE伪伪 指指 令令 的的 前前 提提 是是 需需 要要 用用PROTO伪指令对过程进行声明伪指令对过程进行声明5.1.3 过程声明和过程调用伪指令过程名过程名 PROC调用距离调用距离 语言类型语言类型 作用范围作用范围 USES 寄存器列表寄存器列表,参数参数:类型类型LOCAL 参数表参数表;汇编语言语句汇编语言语句过程名过程名 ENDP过程声明伪指令:过程声明伪指令:用于事先声明过程的结构用于事先声明过程的结构过程名过程名PROTO 调用距离调用距离 语言类型语言类型,参数参数:类型类型过程调用伪指令过程调用伪指令INVOKE 过程名过程名,参数参数,.如何

6、调如何调用用;汇编语言程序:汇编语言程序:lt503.asm.model smallchecksumd PROTO c,:word,:word;声明过程声明过程.stack.dataarraydb 12h,25h,0f0h,0a3h,3db 68h,71h,0cah,0ffh,90hcountequ$-array;数数 组组 的的 元元 素素 个个 数数resultdb?;校验和校验和.code.startupINVOKE checksumd,count,offset array;调用过程调用过程mov result,al;保存校验和保存校验和.exit 0例5.31/2列表文件checksu

7、md PROC c USES bx cx,countp:word,arrayp:wordmov bx,arrayp;BX数组的偏移地址数组的偏移地址mov cx,countp;CX数组的元素个数数组的元素个数xor al,alsumd:add al,bx;求和:求和:ALAL+DS:BXinc bxloop sumdretchecksumd endpend例5.32/2列表文件第 5 章5.2 宏结构程序设计宏汇编宏汇编重复汇编重复汇编条件汇编条件汇编统称宏结构统称宏结构宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法第 5 章宏宏具有宏名的一段汇编语句

8、序列具有宏名的一段汇编语句序列宏定义宏定义时书写时书写宏指令宏指令这段汇编语句序列的缩写这段汇编语句序列的缩写宏调用宏调用时书写时书写宏宏展展开开宏宏指指令令处处用用这这段段宏宏代代替替的的过过程程宏汇编宏汇编时实现时实现宏的参数宏的参数功能强大,颇具特色功能强大,颇具特色配合宏,还有配合宏,还有宏操作符宏操作符和有关伪指令和有关伪指令5.2.1 宏汇编宏定义宏定义宏名宏名 macromacro 形参表形参表 宏定义体宏定义体endmendmmainbeginmainbeginMACROMACRO ;定义名为定义名为mainbeginmainbegin的宏,无参数的宏,无参数movmov ax

9、,data ax,data;宏定义体宏定义体movmov ds,axds,axENDMENDM;宏定义结束宏定义结束mainendmainendMACRO MACRO retnumretnum;带有形参带有形参retnumretnummovmov al,retnumal,retnum;宏定义中使用参数宏定义中使用参数movmov ah,4ch ah,4chintint 21h 21hENDMENDM宏注释符宏注释符宏调用宏调用宏名宏名 实参表实参表 start:start:mainbeginmainbegin;宏调用,建立宏调用,建立DSDS内容内容dispmsgdispmsg string

10、string;宏调用,显示字符串宏调用,显示字符串mainendmainend 0 0;宏调用,返回宏调用,返回DOSDOSend startend start 宏调用的实质是在汇编过程中进行宏展开宏调用的实质是在汇编过程中进行宏展开 宏宏展展开开的的具具体体过过程程是是:当当汇汇编编程程序序扫扫描描源源程程序序遇遇到到已已有有定定义义的的宏宏调调用用时时,即即用用相相应应的的宏宏定定义义体体取取代代源源程程序序的的宏宏指指令令,同同时时用用位位置置匹匹配配的的实实参参对对形形参参进进行取代行取代宏展开宏展开宏宏展展开开在在汇汇编编时时,用用宏宏定定义义体的代码序列替代宏指令的过程。体的代码序

11、列替代宏指令的过程。start:start:mainbeginmainbegin;宏指令宏指令 1 1movmov ax,data ax,data;宏展开宏展开 1 1movmov ds,axds,axmainendmainend 0 0;宏指令宏指令 1 1movmov al,0 al,0;宏展开宏展开 1 1movmov ah,4ch ah,4ch 1 1intint 21h 21h宏的参数宏的参数宏的参数使用非常灵活宏的参数使用非常灵活宏定义时,宏定义时,可以可以无参数无参数,例如,例如5.4a的的mainbegin可以带有可以带有一个参数一个参数,例如,例如5.4a的的mainend也

12、可以具有也可以具有多个参数多个参数;例如;例如5.5a的的shlext参参数数可可以以是是常常数数、变变量量、存存储储单单元元、指指令令(操操作作码码)或或它它们们的的一一部部分分,也也可可以以是是表表达达式式;例例如如5.5b的的shift和和shrot宏宏定定义义体体可可以以是是任任何何合合法法的的汇汇编编语语句句,既既可可以以是是硬硬指指令令序序列列,又又可可以以是是伪伪指指令令序序列列;例例如如5.6的的dstring;宏定义;宏定义shlextshlextmacro macro shloprandshloprand,shlnumshlnumpush push cxcxmovmov c

13、l,cl,shlnumshlnumshlshl shloprandshloprand,cl,clpop pop cxcxendmendm;宏指令宏指令shlextshlext axax,6 6;宏展开宏展开 1 1push push cxcx 1 1movmov cl,cl,0606 1 1shlshl axax,cl,cl 1 1pop pop cxcx例5.5a;统一;统一4 4条移位指令的宏指令条移位指令的宏指令shiftshiftmacro macro soprand,snum,soprand,snum,sopcodesopcodepush push cxcxmovmov cl,snu

14、mcl,snums s&sopcodesopcode&soprand,clsoprand,clpop pop cxcxendmendm;统一移位和循环移位统一移位和循环移位8 8条指令的宏指令条指令的宏指令shrotshrotmacro macro sroprand,srnum,sroprand,srnum,sropcodesropcodepush push cxcxmovmov cl,srnumcl,srnumsropcodesropcode sroprand,clsroprand,clpop pop cxcxendmendm例5.5b替换操作符替换操作符;宏定义;宏定义dstringdst

15、ring macro stringmacro stringdb db&stringstring&,0dh,0ah,0dh,0ah,$endmendm;宏调用宏调用dstringdstring dstringdstring 0 0!Number Number!;宏展开宏展开 1 1db db This This is is a a example.example.,0dh,0ah,0dh,0ah,$1 1db db 0 Number 100 Number 10,0dh,0ah,0dh,0ah,$例5.6转义注释符转义注释符传递注释符传递注释符第 5 章与宏有关的伪指令局部标号伪指令局部标号伪指令

16、LOCAL 标号列表标号列表宏定义体采用了标号,应使用宏定义体采用了标号,应使用LOCAL加以说明加以说明它必须是宏定义它必须是宏定义MACRO语句之后的第一条语句语句之后的第一条语句宏定义删除伪指令宏定义删除伪指令PURGE PURGE 宏名表宏名表不需要某个宏定义时,可以把它删除不需要某个宏定义时,可以把它删除宏定义退出伪指令宏定义退出伪指令EXITMEXITM伪指令伪指令EXITMEXITM表示结束当前宏调用的展开表示结束当前宏调用的展开;宏定义;宏定义absolabsol macro macro oprdoprdlocal nextlocal nextcmpcmp oprd,0 opr

17、d,0jgejge next nextnegneg oprdoprdnext:next:endmendm例5.7;宏调用;宏调用absolabsol word word ptrptr bxbx absolabsol bxbx;宏展开宏展开 1 1cmpcmp word word ptrptr bx,0 bx,0 1 1jgejge?0000?0000 1 1negneg word word ptrptr bxbx 1 1?0000:?0000:1 1cmpcmp bx,0 bx,0 1 1jgejge?0001?0001 1 1negneg bxbx 1 1?0001:?0001:单独占一行单

18、独占一行比较仅仅是是源源程程序序级级的的简简化化:宏宏调调用用在在汇汇编编时时进进行行程程序序语语句句的的展展开开,不不需需要要返返回回;不不减减小小目目标标程程序序,执执行行速速度度没没有改变有改变通通过过形形参参、实实参参结结合合实实现现参参数数传传递递,简简捷捷直直观、灵活多变观、灵活多变还还是是目目标标程程序序级级的的简简化化:子子程程序序调调用用在在执执行行时时由由CALLCALL指指令令转转向向、RETRET指指令令返返回回;形形成成的的目目标标代代码码较较短短,执执行行速速度减慢度减慢需需要要利利用用寄寄存存器器、存存储储单单元元或或堆堆栈栈等等传传递递参参数数宏宏子程序子程序宏

19、宏与与子子程程序序具具有有各各自自的的特特点点,程程序序员员应应该该根据具体问题选择使用那种方法根据具体问题选择使用那种方法通通常常,当当程程序序段段较较短短或或要要求求较较快快执执行行时时,应应选选用用宏宏;当当程程序序段段较较长长或或为为减减小小目目标标代代码码时,要选用子程序时,要选用子程序比较结论宏宏子程序子程序第 5 章5.2.2 重复汇编重重复复汇汇编编指指在在汇汇编编过过程程中中,重重复复展展开开一一段(基本)相同的语句段(基本)相同的语句重复汇编没有名字,不能被调用重复汇编没有名字,不能被调用重重复复汇汇编编常常用用在在宏宏定定义义体体中中,也也可可以以在在一般汇编语句中使用一

20、般汇编语句中使用重复汇编伪指令有三个:重复汇编伪指令有三个:REPEAT按参数值重复按参数值重复FOR按参数个数重复按参数个数重复FORC按参数的字符个数重复按参数的字符个数重复最后,用最后,用ENDM结束结束按参数值重复按参数值重复REPEATREPEAT 重复次数重复次数 重复体重复体ENDMENDMchar=Achar=AREPEAT 26REPEAT 26 db char db char char=char+1 char=char+1ENDMENDM 1 1db chardb char;等效于等效于db Adb A 1 1char=char+1char=char+1 1 1db cha

21、rdb char;等效于等效于db Bdb B 1 1char=char+1char=char+1.1 1db chardb char;等效于等效于db Zdb Z 1 1char=char+1char=char+1按参数个数重复按参数个数重复FORFOR 形参形参,实参表实参表 重复体重复体ENDMENDMFOR FOR regadregad,push push regadregadENDMENDM 1 1push axpush ax 1 1push push bxbx 1 1push push cxcx 1 1push push dxdx按参数字符个数重复按参数字符个数重复FORCFORC

22、 形参形参,字符串字符串 重复体重复体ENDMENDMFORC FORC regad,dcbaregad,dcba pop&pop®ad&xregad&xENDMENDM 1 1pop pop dxdx 1 1pop pop cxcx 1 1pop pop bxbx 1 1pop axpop ax第 5 章5.2.3 条件汇编条条件件汇汇编编伪伪指指令令在在汇汇编编过过程程中中,根根据条件决定汇编的语句据条件决定汇编的语句IFxx 表达式表达式;满足,汇编分支语句体满足,汇编分支语句体1分支语句体分支语句体1 ELSE;不满足,汇编分支语句体不满足,汇编分支语句体2分支语句体分支语句体2

23、 ENDIF;条件汇编结束条件汇编结束pdatapdatamacro nummacro num IFIF num num ltlt 100 100;如果如果num 100num 100,则汇编如下语句则汇编如下语句db num dup(?)db num dup(?)ELSEELSE;否则,汇编如下语句否则,汇编如下语句db 100 dup(?)db 100 dup(?)ENDIFENDIFendmendmpdatapdata 12 12 ;宏调用宏调用db 12 dup(?)db 12 dup(?);宏汇编结果宏汇编结果pdatapdata 102 102 ;宏调用宏调用db 100 dup(

24、?)db 100 dup(?);宏汇编结果宏汇编结果例5.10宏结构的作用宏汇编、重复汇编和条件汇编宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,为源程序的编写提供了很多方便,灵活运用它们可以编写出非常灵活运用它们可以编写出非常良好的源程序来良好的源程序来汇编系统中有些以圆点起始的汇编系统中有些以圆点起始的 伪指令(如伪指令(如.startup、.exit等)等)实际上是一种宏结构实际上是一种宏结构dstringdstringMACRO stringMACRO string;定义字符串定义字符串db&string&,0dh,0ah,$db&string&,0dh,0ah,$ENDME

25、NDMmainbeginmainbeginMACRO MACRO dssegdsseg;设置数据段地址设置数据段地址movmov ax,dssegax,dssegmovmov ds,axds,axENDMENDMdispmsgdispmsgMACRO messageMACRO messagemovmov dx,offsetdx,offset message messagemovmov ah,09h ah,09hintint 21h 21hENDMENDM例题5.41/3mainendmainend MACRO MACRO retnumretnum;返回返回DOSDOS,可不带参数,可不带参数i

26、fbifb movmov ah,4ch ah,4ch;没有参数没有参数elseelse movmov ax,4c00h+(retnum AND 0ffh)ax,4c00h+(retnum AND 0ffh);有参数有参数endifendifintint 21h 21hENDMENDM例题5.42/3.model small.model small.stack 256.stack 256.data.datamsg1msg1equequ this byte this bytedstringdstring !msg2msg2equequ this byte this bytedstringdstri

27、ng You made it.code.codestart:start:mainbeginmainbegin data data;建立建立DSDS内容内容dispmsgdispmsg msg1 msg1;显示显示msg1msg1字符串字符串dispmsgdispmsg msg2 msg2;显示显示msg2msg2字符串字符串mainendmainend;返回返回DOSDOSend startend start例题5.43/3将将程程序序分分段段、采采用用子子程程序序或或宏宏结结构构都都是进行模块化程序设计是进行模块化程序设计介绍开发大型程序时采用的方法:介绍开发大型程序时采用的方法:源程序文件

28、的包含目标模块连接子程序库5.3 模块化程序设计例题例题 5.125.12将键盘输入的数据按升序输出将键盘输入的数据按升序输出把把源源程程序序分分放放在在几几个个文文本本文文件件中中,在在汇汇编编时时通过包含伪指令通过包含伪指令INCLUDE结合成一体结合成一体INCLUDE 文件名文件名可将常用的子程序形成可将常用的子程序形成.ASM.ASM汇编语言源文件汇编语言源文件可将常用的宏定义存放在可将常用的宏定义存放在.MAC.MAC宏库文件中宏库文件中可将常量定义、声明语句组织在可将常量定义、声明语句组织在.INC.INC包含文件中包含文件中例例5.12a5.12a 宏库文件宏库文件 lt512

29、a.mac 主程序文件主程序文件 lt512a.asm 子程序文件子程序文件 sub512a.asm5.3.1 源程序文件的包含1dispchardispcharmacro charmacro char;显示显示charchar字符字符movmov dl,char dl,charmovmov ah,2 ah,2intint 21h 21hendmendmdispmsgdispmsgmacro messagemacro message;显示显示messagemessage字符串字符串movmov dx,offsetdx,offset message messagemovmov ah,9 ah,9

30、intint 21h 21hendmendmLt512a.macinclude lt512a.macinclude lt512a.mac.dispmsgdispmsg msg1 msg1;提示输入数据提示输入数据movmov bx,offsetbx,offset bufbufcall inputcall input;数据输入数据输入cmpcmp cx,0 cx,0jeje start4 start4;没有输入数据则退出没有输入数据则退出movmov count,cxcount,cx.;显示输入的数据显示输入的数据.;数据排序数据排序.;显示经排序后的数据显示经排序后的数据start4:star

31、t4:.exit 0.exit 0include sub512a.asminclude sub512a.asmendendLt512a.asm子程序源文件有子程序源文件有3 3个子程序个子程序ALdispALdisp;显示显示2 2位位1616进制数子程序(例进制数子程序(例4.104.10)sortingsorting;排序子程序(例排序子程序(例4.84.8)inputinput;键盘输入子程序键盘输入子程序还包含一个宏还包含一个宏convertconvert;将将DXDX两位两位ASCIIASCII码转换为两位码转换为两位1616进制数进制数sub512a.asm让我们重点分析键盘输入子

32、程序让我们重点分析键盘输入子程序 inputinput;键盘输入子程序键盘输入子程序;入口参数:入口参数:ds:bxds:bx=存放数据的缓冲区存放数据的缓冲区;出口参数:出口参数:cxcx=数据个数数据个数inputinputprocprocpush axpush axpush push dxdxxorxor cx,cxcx,cx;数据个数清数据个数清0 0input01:input01:xorxor dx,dxdx,dx;输入字符清输入字符清0 0input02:input02:movmov ah,1 ah,1;键盘输入一个字符键盘输入一个字符intint 21h 21hinput之一继续

33、:继续:inputinput之二之二input10:input10:cmpcmp al,0dh al,0dhjeje input30 input30;是是回车回车,结束整个数据的输入,结束整个数据的输入cmpcmp al,al,jeje input20 input20;是是空格和逗号空格和逗号,确认输入了一个数据,确认输入了一个数据cmpcmp al,al,jeje input20 input20cmpcmp al,08h al,08hjeje input17 input17;是是退格退格,丢弃本次输入的数据,出错,丢弃本次输入的数据,出错input之二继续:继续:inputinput之三之三

34、cmpcmp al,al,0 0;有效数字判断有效数字判断(图(图5.2b5.2b)jbjb input17 input17;小小于于0 0,不不是是有有效效数数字字,出出错错cmpcmp al,al,f fjaja input17 input17;大于大于f f,不是有效数字不是有效数字cmpcmp al,al,a ajbjb input11 input11sub al,20hsub al,20h;a af f转转换换成成大大写写A AF Fjmpjmp input12 input12input11:input11:cmpcmp al,al,F Fjaja input17 input17;字

35、字符符小小于于a a、大大于于F F,出出错错cmpcmp al,al,A Ajaejae input12 input12;是是A AF F,有效字符有效字符cmpcmp al,al,9 9jaja input17 input17;是是0 09 9,有效字符,有效字符input之三继续:继续:inputinput之四之四input12:input12:cmpcmp dl,0 dl,0;有效字符的处理有效字符的处理jnejne input13 input13movmov dl,al dl,al;dl=0;dl=0,输入了一个数据的低位,则输入了一个数据的低位,则dlaldlaljmpjmp in

36、put02 input02;转到字符输入转到字符输入input13:input13:cmpcmp dh,0 dh,0jnejne input17 input17;dl0;dl0,dh0dh0输入输入3 3位数据,出错位数据,出错movmov dh,dldh,dl;dl0;dl0,dhdh0 0输入了一个数据的高位输入了一个数据的高位movmov dl,al dl,al;dhdldhdl,dlaldlaljmpjmp input02 input02;转到字符输入转到字符输入input之四继续:继续:inputinput之五之五input17:input17:movmov dl,7 dl,7;输入

37、错误处理输入错误处理movmov ah,2 ah,2intint 21h 21hmovmov dl,?dl,?movmov ah,2 ah,2intint 21h 21hjmpjmp input01 input01;转到输入一个数据转到输入一个数据input之五继续:继续:inputinput之六之六;转换正确的输入数据转换正确的输入数据(图(图5.2c5.2c)input20:input20:convertconvertjmpjmp input01 input01;转到输入一个数据转到输入一个数据input30:input30:convertconvertpop pop dxdxpop ax

38、pop axretret;返回,出口参数已设定返回,出口参数已设定inputinputendpendpinputinput之六之六继续:继续:convertconvert之一之一;将将DXDX两位两位ASCIIASCII码转换为两位码转换为两位1616进制数(图进制数(图5.2c5.2c)convertconvert macromacrolocal input21,input22local input21,input22local input24,input25local input24,input25cmpcmp dl,0 dl,0;dl=0;dl=0,没有要转换的数据,退出没有要转换的数据

39、,退出jeje input25 input25convert之一继续:继续:convertconvert之二之二cmpcmp dl,9 dl,9jbejbe input21 input21sub dl,7sub dl,7;字符字符A AF F,则减,则减7 7input21:input21:and dl,0fhand dl,0fh;转换低位转换低位cmpcmp dh,0 dh,0;dh=0;dh=0,没有高位数据没有高位数据jeje input24 input24cmpcmp dh,9 dh,9jbejbe input22 input22sub dh,7sub dh,7input22:inpu

40、t22:shlshl dh,1 dh,1shlshl dh,1 dh,1shlshl dh,1 dh,1shlshl dh,1 dh,1;转换高位转换高位or or dl,dhdl,dh;合并高、低位合并高、低位convert之二继续:继续:convertconvert之三之三源文件包含的操作步骤:源文件包含的操作步骤:分别编辑生成各个文件分别编辑生成各个文件 汇编、连接主程序文件汇编、连接主程序文件input24:input24:movmov bx,dlbx,dl;存入缓冲区存入缓冲区inc inc bxbxinc inc cxcx;数据加数据加1 1input25:input25:endm

41、endmconvert之三把把常常用用子子程程序序写写成成独独立立的的源源程程序序文文件件,单单独独汇编,形成子程序的目标文件汇编,形成子程序的目标文件.OBJ主程序也经过独立汇编之后形成目标文件主程序也经过独立汇编之后形成目标文件连连接接程程序序将将所所有有目目标标文文件件连连接接起起来来,最最终终产产生可执行文件生可执行文件需要遵循的原则:需要遵循的原则:声明共用的变量、过程等声明共用的变量、过程等 实现正确的段组合实现正确的段组合 处理好参数传递问题处理好参数传递问题5.3.2 目标代码文件的连接2第 5 章声明共用的变量、过程各个模块间共用的变量、过程等要说明各个模块间共用的变量、过程

42、等要说明PUBLIC 标识符标识符,标识符标识符.;定义标识符的模块使用定义标识符的模块使用EXTERN 标识符标识符:类型类型,标识符标识符:类型类型.;调用标识符的模块使用调用标识符的模块使用标识符是变量名、过程名等标识符是变量名、过程名等类类型型是是byte/word/dword(变变量量)或或near/far(过程)过程)在一个源程序中,在一个源程序中,public/extern语句可以有多条语句可以有多条各各模模块块间间的的public/extern伪伪指指令令要要互互相相配配对对,并并且指明的类型互相一致且指明的类型互相一致第 5 章实现正确的段组合子子程程序序文文件件必必须须定定

43、义义在在代代码码段段中中,也也可可以以具具有有局局部部的数据变量的数据变量采采用用简简化化段段定定义义格格式式,只只要要采采用用相相同同的的存存储储模模式式,容易实现正确的近或远调用容易实现正确的近或远调用完完整整段段定定义义格格式式中中,为为了了实实现现模模块块间间的的段段内内近近调调用用(near类类型型),各各自自定定义义的的段段名名、类类别别必必须须相相同同,组组合合类类型型都都是是public。实实际际的的程程序序开开发发中中,各各个个模模块块往往往往由由不不同同的的程程序序员员完完成成,不不易易实实现现段段同同名名或或类类别相同,所以索性定义成远调用(别相同,所以索性定义成远调用(

44、far类型)类型)定定义义数数据据段段时时,同同样样也也要要注注意意这这个个问问题题。当当各各个个模模块块的的数数据据段段不不同同时时,要要正正确确设设置置数数据据段段DS寄寄存存器器的段基地址的段基地址第 5 章处理好参数传递问题少少量量参参数数可可用用寄寄存存器器或或堆堆栈栈直直接接传传送送数数据据本身本身大大量量数数据据可可以以安安排排在在缓缓冲冲区区,用用寄寄存存器器或或堆栈传送数据的存储地址堆栈传送数据的存储地址还还可可利利用用变变量量传传递递参参数数,但但是是要要采采用用public/extern声明为公共(全局)变量声明为公共(全局)变量这些也是子程序间的参数传递方法这些也是子程

45、序间的参数传递方法另另外外,第第7章章混混合合编编程程介介绍绍了了更更好好的的堆堆栈栈传递参数方法,可以采用传递参数方法,可以采用例5.12b主程序主程序lt512b.asm并入宏定义并入宏定义子子程程序序文文件件sub512b.asm,要要加加上上段段定定义义语语句句、声声明明语语句句等等,但不需要起始点和结束点但不需要起始点和结束点模块连接的操作步骤:模块连接的操作步骤:分别编辑生成各个文件分别编辑生成各个文件 分别汇编各个文件分别汇编各个文件 连接各个目标文件,形成连接各个目标文件,形成可执行文件可执行文件把把常常用用子子程程序序写写成成独独立立的的源源文文件件,单单独独汇编形成汇编形成

46、OBJ文件后,存入文件后,存入子程序库子程序库主程序也单独汇编形成主程序也单独汇编形成OBJ文件文件主主程程序序连连接接时时,调调入入子子程程序序库库中中的的子子程程序模块,产生最终的可执行文件序模块,产生最终的可执行文件例例5.12c5.12c 主程序文件主程序文件 lt512c.asm 子程序文件子程序文件 sub512c1.asm 子程序文件子程序文件 sub512c2.asm 子程序文件子程序文件 sub512c3.asm5.3.3 子程序库的调入3.;宏定义宏定义.code.codeextern extern ALdisp:near,sorting:near,input:nearAL

47、disp:near,sorting:near,input:near;声明其他模块中的子程序声明其他模块中的子程序.startup.startup.exit 0.exit 0endendLt512c.asm.model small.model small.code.codepublic public aldispaldispAldispAldispprocproc.AldispAldispendpendpendendsub512c1.asm.model small.model small.code.codepublic sortingpublic sortingsortingsortingpro

48、cproc.sortingsortingendpendpendendsub512c2.asm.model small.model small.code.codepublic inputpublic inputinputinputprocproc.inputinputendpendpendendsub512c3.asm库文件调入的操作步骤:库文件调入的操作步骤:分别编辑生成各个文件分别编辑生成各个文件 分别汇编各个文件分别汇编各个文件 用库管理文件,将子程序模块添加用库管理文件,将子程序模块添加到库文件(到库文件(.LIB.LIB)中中 连接主程序,提供库文件,连接主程序,提供库文件,形成可执行

49、文件形成可执行文件第 5 章补充例题将将子子程程序序应应用用的的例例题题4.134.15的的子子程程序序编编写成模块,供主程序调用写成模块,供主程序调用实实现现功功能能:从从键键盘盘输输入入有有符符号号十十进进制制数数,求求它们的平均值,然后输出它们的平均值,然后输出源程序文件进行简单修改源程序文件进行简单修改n主程序文件主程序文件n子程序文件子程序文件利用目标代码文件的连接形成可执行文件利用目标代码文件的连接形成可执行文件第 5 章5.4 输入输出程序设计输入指令输入指令IN从外设读取数据从外设读取数据输出输出OUT指令向外设提供数据指令向外设提供数据处理器通过处理器通过I/O接口控制外设接

50、口控制外设参考参考I/O指令指令第第2.1.5节节建议结合硬件相关课程学习建议结合硬件相关课程学习第 5 章5.4.1 程序直接控制输入输出程序执行程序执行IN或或OUT指令实现数据传送指令实现数据传送.model tiny.model tiny;形成形成comcom格式的程序格式的程序.code.code.startup.startupcall speaker_oncall speaker_on;打开打开扬扬声器声音声器声音mov ah,1mov ah,1;等待按等待按键键int 21hint 21hcall speaker_offcall speaker_off;关关闭扬闭扬声器声音声器声

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com