最新汇编语言5_第1页
最新汇编语言5_第2页
最新汇编语言5_第3页
最新汇编语言5_第4页
最新汇编语言5_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、编语言5要调用带参数过程定义的过程,不应采用要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐指令,因为比较烦琐应该采用过程调用伪指令应该采用过程调用伪指令INVOKE使用使用INVOKE伪指令的前提是需要用伪指令的前提是需要用PROTO伪指令对过程进行声明伪指令对过程进行声明5.1.3 过程声明和过程调用伪指令过程名过程名 PROC调用距离调用距离 语言类型语言类型 作用范围作用范围 USES 寄存器列表寄存器列表, 参数参数:类型类型LOCAL 参数表参数表;汇编语言语句汇编语言语句过程名过程名 ENDP第5章过程声明伪指令:过程声明伪指令:用于事先声明过程的结构用于事先声明过

3、程的结构过程名过程名PROTO 调用距离调用距离 语言类型语言类型, 参数参数:类型类型过程调用伪指令过程调用伪指令INVOKE 过程名过程名,参数参数,.如何调如何调用用最新汇编语言5;汇编语言程序:汇编语言程序:lt503.asm.model smallchecksumd PROTO c,:word,:word;声明过程声明过程.stack.dataarraydb 12h,25h,0f0h,0a3h,3db 68h,71h,0cah,0ffh,90hcountequ $-array;数组的元素个数数组的元素个数resultdb ?;校验和校验和.code.startupINVOKE che

4、cksumd,count,offset array;调用过程调用过程mov result,al;保存校验和保存校验和.exit 0例例5.35.31/21/2列表文件列表文件最新汇编语言5checksumd 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.35.32/22/2列表文件列

5、表文件最新汇编语言5;lt503.asm的列表文件(的列表文件(lt503.lst).INVOKE checksumd,count,offset array *mov ax,word ptr OFFSET array *push ax *mov ax,+000Ah *push ax *call checksumd *add sp,04hmov result,al.例例5.35.31/21/2指示该语句由汇编程序自动生成指示该语句由汇编程序自动生成最新汇编语言5checksumd PROC c USES bx cx,countp:word,arrayp:word *push bp;起始代码起始代

6、码 *mov bp,sp *push bx;保护保护bx和和cx *push cxmov bx,arrayp;arrayp=BP+6mov cx,countp;cuontp=BP+4.ret *pop cx;结尾代码结尾代码 *pop bx *pop bp *ret 0000hchecksumc endp例例5.35.32/22/2进入调试程序观察进入调试程序观察第5章最新汇编语言55.2 宏结构程序设计宏汇编宏汇编重复汇编重复汇编条件汇编条件汇编统称宏结构统称宏结构宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法最新汇编语言5宏宏具有宏名的一段汇编语句

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

8、ax,datamov ax,data;宏定义体宏定义体mov ds,axmov ds,axENDMENDM;宏定义结束宏定义结束mainendmainendMACRO retnumMACRO retnum;带有形参带有形参retnumretnummov al,retnummov al,retnum;宏定义中使用参数宏定义中使用参数mov ah,4chmov ah,4chint 21hint 21hENDMENDM宏注释符宏注释符最新汇编语言5宏名宏名 实参表实参表 start:start: mainbeginmainbegin; ;宏调用,建立宏调用,建立DSDS内容内容dispmsg str

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

10、体的代码序列替代宏指令的过程。体的代码序列替代宏指令的过程。start:start: mainbeginmainbegin; ;宏指令宏指令 1 1mov ax,datamov ax,data ; ;宏展开宏展开 1 1mov ds,axmov ds,axmainend 0mainend 0; ;宏指令宏指令 1 1mov al,0mov al,0; ;宏展开宏展开 1 1mov ah,4chmov ah,4ch 1 1int 21hint 21h最新汇编语言5宏的参数使用非常灵活宏的参数使用非常灵活宏定义时,宏定义时,可以可以无参数无参数,例如,例如5.4a的的mainbegin可以带有可以

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

12、andshloprand, ,shlnumshlnumpush cxpush cxmov cl,mov cl,shlnumshlnumshl shl shloprandshloprand,cl,clpop cxpop cxendmendm;宏指令;宏指令shlext shlext axax, ,6 6;宏展开;宏展开 1 1push cxpush cx 1 1mov cl,mov cl,0606 1 1shl shl axax,cl,cl 1 1pop cxpop cx例5.5a最新汇编语言5;统一;统一4 4条移位指令的宏指令条移位指令的宏指令shiftshiftmacro soprand,

13、snum,macro soprand,snum,sopcodesopcodepush cxpush cxmov cl,snummov cl,snums s& &sopcodesopcode& & soprand,cl soprand,clpop cxpop cxendmendm;统一移位和循环移位;统一移位和循环移位8 8条指令的宏指令条指令的宏指令shrotshrotmacro sroprand,srnum,macro sroprand,srnum,sropcodesropcodepush cxpush cxmov cl,srnummov cl,srnumsr

14、opcodesropcode sroprand,cl sroprand,clpop cxpop cxendmendm例5.5b替换操作符替换操作符最新汇编语言5;宏定义;宏定义dstringdstring macro stringmacro stringdb db & &stringstring& &,0dh,0ah,$,0dh,0ah,$endmendm;宏调用;宏调用dstringdstring dstringdstring 0 0 ! ! Number Number ! !;宏展开;宏展开 1 1db This is a example., 0dh,0ah

15、,$db This is a example., 0dh,0ah,$ 1 1db 0 Number 10, 0dh,0ah, $db 0 Number 10, 0dh,0ah, $例5.6转义注释符转义注释符传递注释符传递注释符最新汇编语言5宏操作符;宏注释符,用于表示在宏宏注释符,用于表示在宏定义中的注释。采用这个符号的定义中的注释。采用这个符号的注释,在宏展开时不出现注释,在宏展开时不出现&替换操作符,用于将参数替换操作符,用于将参数与其他字符分开。如果参数紧接与其他字符分开。如果参数紧接在其他字符之前或之后,或者参在其他字符之前或之后,或者参数出现在带引号的字符串中,就数出现在带

16、引号的字符串中,就必须使用该伪操作符必须使用该伪操作符第5章最新汇编语言5宏操作符字符串传递操作符,用于括起字符串传递操作符,用于括起字符串。在宏调用中,如果传递的字字符串。在宏调用中,如果传递的字符串实参数含有逗号、空格等间隔符符串实参数含有逗号、空格等间隔符号,则必须用这对操作符,以保证字号,则必须用这对操作符,以保证字符串的完整符串的完整!转义操作符,用于指示其后的一转义操作符,用于指示其后的一个字符作为一般字符,不含特殊意义个字符作为一般字符,不含特殊意义%表达式操作符,用在宏调用中,表达式操作符,用在宏调用中,表示将后跟的一个表达式的值作为实表示将后跟的一个表达式的值作为实参,而不是

17、将表达式本身作为参数参,而不是将表达式本身作为参数第5章最新汇编语言5与宏有关的伪指令局部标号伪指令局部标号伪指令LOCAL 标号列表标号列表宏定义体采用了标号,应使用宏定义体采用了标号,应使用LOCAL加以说明加以说明它必须是宏定义它必须是宏定义MACRO语句之后的第一条语句语句之后的第一条语句宏定义删除伪指令宏定义删除伪指令PURGE PURGE 宏名表宏名表不需要某个宏定义时,可以把它删除不需要某个宏定义时,可以把它删除宏定义退出伪指令宏定义退出伪指令EXITMEXITM伪指令伪指令EXITMEXITM表示结束当前宏调用的展开表示结束当前宏调用的展开第5章最新汇编语言5;宏定义;宏定义a

18、bsolabsol macro oprdmacro oprdlocal nextlocal nextcmp oprd,0cmp oprd,0jge nextjge nextneg oprdneg oprdnext:next:endmendm例5.7;宏调用;宏调用absol word ptr bxabsol word ptr bxabsol bxabsol bx;宏展开;宏展开 1 1cmp word ptr bx,0cmp word ptr bx,0 1 1jge ?0000jge ?0000 1 1neg word ptr bxneg word ptr bx 1 1?0000:?0000:

19、 1 1cmp bx,0cmp bx,0 1 1jge ?0001jge ?0001 1 1neg bxneg bx 1 1?0001:?0001:单独占一行单独占一行最新汇编语言5比较仅是仅是源程序级源程序级的的简化简化:宏调用宏调用在汇编时在汇编时进行进行程序语句的展开,不程序语句的展开,不需要返回;不减小目需要返回;不减小目标程序,执行速度没标程序,执行速度没有改变有改变通过形参、实参结合通过形参、实参结合实现参数传递,简捷实现参数传递,简捷直观、灵活多变直观、灵活多变还是还是目标程序级目标程序级的的简简化化:子程序调用:子程序调用在执在执行时行时由由CALLCALL指令转向、指令转向、

20、RETRET指令返回;形成的指令返回;形成的目标代码较短,执行目标代码较短,执行速度减慢速度减慢需要利用寄存器、存需要利用寄存器、存储单元或堆栈等传递储单元或堆栈等传递参数参数宏宏子程序子程序最新汇编语言5宏与子程序具有各自的特点,程序员应该宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法根据具体问题选择使用那种方法通常,当程序段较短或要求较快执行时,通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码应选用宏;当程序段较长或为减小目标代码时,要选用子程序时,要选用子程序比较结论宏宏子程序子程序最新汇编语言55.2.2 重复汇编重复汇编重复汇编指在汇编过程

21、中,重复展开指在汇编过程中,重复展开一段(基本)相同的语句一段(基本)相同的语句重复汇编没有名字,不能被调用重复汇编没有名字,不能被调用重复汇编常用在宏定义体中,也可以重复汇编常用在宏定义体中,也可以在一般汇编语句中使用在一般汇编语句中使用重复汇编伪指令有三个:重复汇编伪指令有三个:REPEAT按参数值重复按参数值重复FOR按参数个数重复按参数个数重复FORC按参数的字符个数重复按参数的字符个数重复最后,用最后,用ENDM结束结束第5章最新汇编语言5REPEATREPEAT 重复次数重复次数 重复体重复体ENDMENDMchar = Achar = AREPEAT 26REPEAT 26 db

22、 char db char char = char +1 char = char +1ENDMENDM 1 1db chardb char; ;等效于等效于db Adb A 1 1char = char +1char = char +1 1 1db chardb char; ;等效于等效于db Bdb B 1 1char = char +1char = char +1. 1 1db chardb char; ;等效于等效于db Zdb Z 1 1char = char +1char = char +1最新汇编语言5FORFOR 形参形参, ,实参表实参表 重复体重复体ENDMENDMFOR r

23、egad, FOR regad, push regad push regadENDMENDM 1 1push axpush ax 1 1push bxpush bx 1 1push cxpush cx 1 1push dxpush dx最新汇编语言5FORC FORC 形参形参, , 字符串字符串 重复体重复体ENDMENDMFORC regad,dcbaFORC regad,dcba pop &regad&x pop &regad&xENDMENDM 1 1pop dxpop dx 1 1pop cxpop cx 1 1pop bxpop bx 1 1pop

24、axpop ax最新汇编语言55.2.3 条件汇编条件汇编伪指令在汇编过程中,根据条件汇编伪指令在汇编过程中,根据条件决定汇编的语句条件决定汇编的语句IFxx 表达式表达式;满足,汇编分支语句体满足,汇编分支语句体1分支语句体分支语句体1 ELSE;不满足,汇编分支语句体不满足,汇编分支语句体2分支语句体分支语句体2 ENDIF;条件汇编结束条件汇编结束第5章最新汇编语言5pdatapdatamacro nummacro num IFIF num lt 100 num lt 100;如果如果num 100num 100,则汇编如下语句,则汇编如下语句db num dup (?)db num d

25、up (?) ELSEELSE;否则,汇编如下语句否则,汇编如下语句db 100 dup (?)db 100 dup (?) ENDIFENDIFendmendmpdata 12pdata 12 ; ;宏调用宏调用db 12 dup(?)db 12 dup(?) ; ;宏汇编结果宏汇编结果pdata 102pdata 102 ; ;宏调用宏调用db 100 dup(?)db 100 dup(?) ; ;宏汇编结果宏汇编结果例5.10最新汇编语言5宏结构的作用宏汇编、重复汇编和条件汇编宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,为源程序的编写提供了很多方便,灵活运用它们可以编写出非常

26、灵活运用它们可以编写出非常良好的源程序来良好的源程序来汇编系统中有些以圆点起始的汇编系统中有些以圆点起始的 伪指令(如伪指令(如.startup、.exit等)等)实际上是一种宏结构实际上是一种宏结构最新汇编语言5dstringdstringMACRO stringMACRO string;定义字符串定义字符串db &string&,0dh,0ah,$db &string&,0dh,0ah,$ENDMENDMmainbeginmainbeginMACRO dssegMACRO dsseg;设置数据段地址设置数据段地址mov ax,dssegmov ax,dsse

27、gmov ds,axmov ds,axENDMENDMdispmsgdispmsgMACRO messageMACRO messagemov dx,offset messagemov dx,offset messagemov ah,09hmov ah,09hint 21hint 21hENDMENDM最新汇编语言5mainendmainend MACRO retnumMACRO retnum;返回返回DOSDOS,可不带参数,可不带参数ifb ifb mov ah,4ch mov ah,4ch;没有参数没有参数elseelse mov ax,4c00h+(retnum AND 0ffh) mo

28、v ax,4c00h+(retnum AND 0ffh); ; 有参数有参数endifendifint 21hint 21hENDMENDM最新汇编语言5.model small.model small.stack 256.stack 256.data.datamsg1msg1equ this byteequ this bytedstringdstring msg2msg2equ this byteequ this bytedstringdstring .code.codestart:start:mainbeginmainbegin data data; ;建立建立DSDS内容内容dispms

29、gdispmsg msg1 msg1; ;显示显示msg1msg1字符串字符串dispmsgdispmsg msg2 msg2; ;显示显示msg2msg2字符串字符串mainendmainend; ;返回返回DOSDOSend startend start最新汇编语言5将程序分段、采用子程序或宏结构都是进将程序分段、采用子程序或宏结构都是进行模块化程序设计行模块化程序设计本节介绍开发大型程序时采用的方法:本节介绍开发大型程序时采用的方法:5.3 模块化程序设计例题例题 5.125.12将键盘输入的数据按升序输出将键盘输入的数据按升序输出最新汇编语言5把源程序分放在几个文本文件中,在汇编时把源

30、程序分放在几个文本文件中,在汇编时通过包含伪指令通过包含伪指令INCLUDE结合成一体结合成一体INCLUDE 文件名文件名可将常用的子程序形成可将常用的子程序形成.ASM.ASM汇编语言源文件汇编语言源文件可将常用的宏定义存放在可将常用的宏定义存放在.MAC.MAC宏库文件中宏库文件中可将常量定义、声明语句组织在可将常量定义、声明语句组织在.INC.INC包含文件中包含文件中例例5.12a5.12a 宏库文件宏库文件 lt512a.mac 主程序文件主程序文件 lt512a.asm 子程序文件子程序文件 sub512a.asm5.3.1 源程序文件的包含1最新汇编语言5dispchardis

31、pcharmacro charmacro char; ;显示显示charchar字符字符mov dl,charmov dl,charmov ah,2mov ah,2int 21hint 21hendmendmdispmsgdispmsgmacro messagemacro message; ;显示显示messagemessage字符串字符串mov dx,offset messagemov dx,offset messagemov ah,9mov ah,9int 21hint 21hendmendmLt512a.macLt512a.mac最新汇编语言5include lt512a.macincl

32、ude lt512a.mac.dispmsg msg1dispmsg msg1; ;提示输入数据提示输入数据mov bx,offset bufmov bx,offset bufcall inputcall input; ;数据输入数据输入cmp cx,0cmp cx,0je start4je start4; ;没有输入数据则退出没有输入数据则退出mov count,cxmov count,cx.; ;显示输入的数据显示输入的数据.; ;数据排序数据排序.; ;显示经排序后的数据显示经排序后的数据start4:start4: .exit 0.exit 0include sub512a.asmin

33、clude sub512a.asmendendLt512a.asmLt512a.asm最新汇编语言5子程序源文件有子程序源文件有3 3个子程序个子程序ALdispALdisp; ;显示显示2 2位位1616进制数子程序(例进制数子程序(例4.104.10)sortingsorting ; ;排序子程序(例排序子程序(例4.84.8)inputinput; ;键盘输入子程序键盘输入子程序还包含一个宏还包含一个宏convertconvert ;将将DXDX两位两位ASCIIASCII码转换为两位码转换为两位1616进制数进制数sub512a.asmsub512a.asm让我们重点分析键盘输入子程序

34、让我们重点分析键盘输入子程序 inputinput最新汇编语言5; ;键盘输入子程序键盘输入子程序; ;入口参数:入口参数:ds:bx=ds:bx=存放数据的缓冲区存放数据的缓冲区; ;出口参数:出口参数:cx=cx=数据个数数据个数inputinputprocprocpush axpush axpush dxpush dxxor cx,cxxor cx,cx; ;数据个数清数据个数清0 0input01:input01: xor dx,dxxor dx,dx; ;输入字符清输入字符清0 0input02:input02: mov ah,1mov ah,1; ;键盘输入一个字符键盘输入一个字符

35、int 21hint 21hinputinput之一之一继续:继续:inputinput之二之二最新汇编语言5input10:input10: cmp al,0dhcmp al,0dhje input30je input30; ;是是回车回车,结束整个数据的输入,结束整个数据的输入cmp al, cmp al, je input20je input20; ;是是空格和逗号空格和逗号,确认输入了一个数据,确认输入了一个数据cmp al,cmp al,je input20je input20cmp al,08hcmp al,08hje input17je input17; ;是是退格退格,丢弃本次

36、输入的数据,出错,丢弃本次输入的数据,出错inputinput之二之二继续:继续:inputinput之三之三最新汇编语言5cmp al,cmp al,00; ;有效数字判断有效数字判断(图(图5.2b5.2b)jb input17jb input17; ;小于小于00,不是有效数字,出,不是有效数字,出错错cmp al,cmp al,ffja input17ja input17; ;大于大于ff,不是有效数字,不是有效数字cmp al,cmp al,aajb input11jb input11sub al,20hsub al,20h;a;aff转换成大转换成大写写AAFFjmp input1

37、2jmp input12input11:input11: cmp al,cmp al,FFja input17ja input17; ;字符小于字符小于aa、大于、大于FF,出,出错错cmp al,cmp al,AAjae input12jae input12; ;是是AAFF,有效字符,有效字符cmp al,cmp al,99ja input17ja input17; ;是是0099,有效字符,有效字符inputinput之三之三继续:继续:inputinput之四之四最新汇编语言5input12:input12: cmp dl,0cmp dl,0; ;有效字符的处理有效字符的处理jne i

38、nput13jne input13mov dl,almov dl,al;dl=0;dl=0,输入了一个数据的低位,则,输入了一个数据的低位,则dlaldlaljmp input02jmp input02; ;转到字符输入转到字符输入input13:input13: cmp dh,0cmp dh,0jne input17jne input17;dl0;dl0,dh0dh0输入输入3 3位数据,出错位数据,出错mov dh,dlmov dh,dl;dl0;dl0,dhdh0 0输入了一个数据的高位输入了一个数据的高位mov dl,almov dl,al;dhdl;dhdl,dlaldlaljmp

39、input02jmp input02; ;转到字符输入转到字符输入inputinput之四之四继续:继续:inputinput之五之五最新汇编语言5input17:input17:mov dl,7mov dl,7; ;输入错误处理输入错误处理mov ah,2mov ah,2int 21hint 21hmov dl,?mov dl,?mov ah,2mov ah,2int 21hint 21hjmp input01jmp input01; ;转到输入一个数据转到输入一个数据inputinput之五之五继续:继续:inputinput之六之六最新汇编语言5; ;转换正确的输入数据转换正确的输入数据

40、(图(图5.2c5.2c)input20:input20: convertconvertjmp input01jmp input01 ; ;转到输入一个数据转到输入一个数据input30:input30: convertconvertpop dxpop dxpop axpop axretret; ;返回,出口参数已设定返回,出口参数已设定inputinputendpendpinputinput之六之六继续:继续:convertconvert之一之一最新汇编语言5;将将DXDX两位两位ASCIIASCII码转换为两位码转换为两位1616进制数(图进制数(图5.2c5.2c)convertconv

41、ert macromacrolocal input21,input22local input21,input22local input24,input25local input24,input25cmp dl,0cmp dl,0;dl=0;dl=0,没有要转换的数据,退出,没有要转换的数据,退出je input25je input25convertconvert之一之一继续:继续:convertconvert之二之二最新汇编语言5cmp dl,9cmp dl,9jbe input21jbe input21sub dl,7sub dl,7;字符字符A AF F,则减,则减7 7input21:i

42、nput21: and dl,0fhand dl,0fh;转换低位转换低位cmp dh,0cmp dh,0;dh=0;dh=0,没有高位数据,没有高位数据je input24je input24cmp dh,9cmp dh,9jbe input22jbe input22sub dh,7sub dh,7input22:input22: shl dh,1shl dh,1shl dh,1shl dh,1shl dh,1shl dh,1shl dh,1shl dh,1;转换高位转换高位or dl,dhor dl,dh;合并高、低位合并高、低位convertconvert之二之二继续:继续:conver

43、tconvert之三之三最新汇编语言5源文件包含的操作步骤:源文件包含的操作步骤: 分别编辑生成各个文件分别编辑生成各个文件 汇编、连接主程序文件汇编、连接主程序文件input24:input24: mov bx,dlmov bx,dl;存入缓冲区存入缓冲区inc bxinc bxinc cxinc cx;数据加数据加1 1input25:input25:endmendmconvertconvert之三之三最新汇编语言5把常用子程序写成独立的源程序文件,单独把常用子程序写成独立的源程序文件,单独汇编,形成子程序的目标文件汇编,形成子程序的目标文件.OBJ主程序也经过独立汇编之后形成目标文件主程

44、序也经过独立汇编之后形成目标文件连接程序将所有目标文件连接起来,最终产连接程序将所有目标文件连接起来,最终产生可执行文件生可执行文件需要遵循的原则:需要遵循的原则: 声明共用的变量、过程等声明共用的变量、过程等 实现正确的段组合实现正确的段组合 处理好参数传递问题处理好参数传递问题5.3.2 目标代码文件的连接2最新汇编语言5声明共用的变量、过程各个模块间共用的变量、过程等要说明各个模块间共用的变量、过程等要说明PUBLIC 标识符标识符 ,标识符标识符.;定义标识符的模块使用定义标识符的模块使用EXTERN 标识符标识符:类型类型 ,标识符标识符:类型类型.;调用标识符的模块使用调用标识符的

45、模块使用标识符是变量名、过程名等标识符是变量名、过程名等类型是类型是byte / word / dword(变量)或(变量)或near / far(过程)(过程)在一个源程序中,在一个源程序中,public/extern语句可以有多条语句可以有多条各模块间的各模块间的public/extern伪指令要互相配对,并伪指令要互相配对,并且指明的类型互相一致且指明的类型互相一致第5章最新汇编语言5实现正确的段组合子程序文件必须定义在代码段中,也可以具有局部子程序文件必须定义在代码段中,也可以具有局部的数据变量的数据变量采用简化段定义格式,只要采用相同的存储模式,采用简化段定义格式,只要采用相同的存储

46、模式,容易实现正确的近或远调用容易实现正确的近或远调用完整段定义格式中,为了实现模块间的段内近调用完整段定义格式中,为了实现模块间的段内近调用(near类型),各自定义的段名、类别必须相同,类型),各自定义的段名、类别必须相同,组合类型都是组合类型都是public。实际的程序开发中,各个模。实际的程序开发中,各个模块往往由不同的程序员完成,不易实现段同名或类块往往由不同的程序员完成,不易实现段同名或类别相同,所以索性定义成远调用(别相同,所以索性定义成远调用(far类型)类型)定义数据段时,同样也要注意这个问题。当各个模定义数据段时,同样也要注意这个问题。当各个模块的数据段不同时,要正确设置数

47、据段块的数据段不同时,要正确设置数据段DS寄存器寄存器的段基地址的段基地址第5章最新汇编语言5处理好参数传递问题少量参数可用寄存器或堆栈直接传送数据少量参数可用寄存器或堆栈直接传送数据本身本身大量数据可以安排在缓冲区,用寄存器或大量数据可以安排在缓冲区,用寄存器或堆栈传送数据的存储地址堆栈传送数据的存储地址还可利用变量传递参数,但是要采用还可利用变量传递参数,但是要采用public/extern声明为公共(全局)变量声明为公共(全局)变量这些也是子程序间的参数传递方法这些也是子程序间的参数传递方法另外,第另外,第7章混合编程介绍了更好的堆栈章混合编程介绍了更好的堆栈传递参数方法,可以采用传递参

48、数方法,可以采用第5章最新汇编语言5例5.12b主程序主程序lt512b.asm并入宏定义并入宏定义子程序文件子程序文件sub512b.asm,要,要加上段定义语句、声明语句等,加上段定义语句、声明语句等,但不需要起始点和结束点但不需要起始点和结束点模块连接的操作步骤:模块连接的操作步骤: 分别编辑生成各个文件分别编辑生成各个文件 分别汇编各个文件分别汇编各个文件 连接各个目标文件,形成连接各个目标文件,形成可执行文件可执行文件最新汇编语言5.; ;宏定义宏定义.code.codepublic countpublic count; ;定义定义countcount共用共用extern ALdis

49、p:near,sorting:near,input:farextern ALdisp:near,sorting:near,input:far; ;声明其他模块中的子程序声明其他模块中的子程序.startup.startup.exit 0.exit 0; ;去掉(去掉(lt512a.asmlt512a.asm中的)包含语句中的)包含语句endendLt512b.asmLt512b.asm最新汇编语言5.model small.model small ; ;定义同样的存储模式定义同样的存储模式extern count:wordextern count:word; ;在其他模块定义了字变量在其他模块

50、定义了字变量countcount.code.code; ;子程序在代码段中子程序在代码段中public aldisp,sorting,inputpublic aldisp,sorting,input;3;3个子程序是共用的个子程序是共用的AldispAldispprocproc; ;仍然作为近调用仍然作为近调用sortingsorting procproc; ;仍然作为近调用仍然作为近调用inputinputproc farproc far; ;修改为远调用修改为远调用.mov count,cxmov count,cx ; ;提供出口参数提供出口参数.inputinputendpendpend

51、end; ;结束汇编结束汇编sub512b.asmsub512b.asm最新汇编语言5把常用子程序写成独立的源文件,单把常用子程序写成独立的源文件,单独汇编形成独汇编形成OBJ文件后,存入子程序库文件后,存入子程序库主程序也单独汇编形成主程序也单独汇编形成OBJ文件文件主程序连接时,调入子程序库中的子主程序连接时,调入子程序库中的子程序模块,产生最终的可执行文件程序模块,产生最终的可执行文件例例5.12c5.12c 主程序文件主程序文件 lt512c.asm 子程序文件子程序文件 sub512c1.asm 子程序文件子程序文件 sub512c2.asm 子程序文件子程序文件 sub512c3.

52、asm5.3.3 子程序库的调入3最新汇编语言5子程序库子程序库文件(子程序库文件(.LIB)是子程序模块的集合,其中)是子程序模块的集合,其中存放着各子程序的名称、目标代码及有关定位信存放着各子程序的名称、目标代码及有关定位信息息存入库的子程序的编写与目标文件连接方法中的存入库的子程序的编写与目标文件连接方法中的要求一样,只是为方便调用,更加严格要求一样,只是为方便调用,更加严格子程序文件编写完成后,汇编形成目标文件;然子程序文件编写完成后,汇编形成目标文件;然后利用库管理工具程序后利用库管理工具程序LIB.EXE,把子程序目标模,把子程序目标模块逐一加入到库中块逐一加入到库中LIB 库文件名库文件名 + 子程序目标文件名子程序目标文件名库管理程序库管理程序LIB帮助创建、组织和维护子程序模块帮助创建、组织和维护子程序模块库,例如增加、删除、替换、合并库文件等库,例如增加、删除、替换、合并库文件等第5章最新汇编语言5.; ;宏定义宏定义.code.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论