第四章、汇编语言程序设计_第1页
第四章、汇编语言程序设计_第2页
第四章、汇编语言程序设计_第3页
第四章、汇编语言程序设计_第4页
第四章、汇编语言程序设计_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章、汇编语言程序设计举例徐承彬汇编语言程序的上机过程汇编语言程序的上机过程为运行汇编语言程序需要在磁盘上建立如下文件为运行汇编语言程序需要在磁盘上建立如下文件1、编辑程序,如、编辑程序,如edit.exe2、汇编程序,如、汇编程序,如masm.exe3、连接程序,如、连接程序,如link.exe4、调试程序,如、调试程序,如debug.exe一、利用编辑程序建立一、利用编辑程序建立 asm 文件文件 1、进入、进入dos环境环境 一、一、 用用edit程序编辑程序编辑asm文件文件 二、用二、用masm程序产生程序产生obj 文件文件 汇编程序的版本号汇编程序的版本号是是list文件,称为

2、列表文件。该文文件,称为列表文件。该文件给出源程序和机器语言程序清单,件给出源程序和机器语言程序清单,并给出符号表,该文件可有可无。并给出符号表,该文件可有可无。是是crf文件,该文件用来产生交叉文件,该文件用来产生交叉引用表引用表ref。对一般的程序不需要。对一般的程序不需要建立此文件。建立此文件。 三、用三、用link程序产生程序产生exe 文件文件 是连接程序的列表文件,又称为连是连接程序的列表文件,又称为连接映像,给出每个段在存储器的分接映像,给出每个段在存储器的分配情况。配情况。 是程序中需要的库文件,如无特是程序中需要的库文件,如无特殊需要,则应对殊需要,则应对Lis:回答:回答

3、四、程序的执行四、程序的执行 汇编语言程序设计举例汇编语言程序设计举例 1、直线型程序设计、直线型程序设计 四、程序设计举例n1、直线运行程序n例如:求两个数的平均值。两个数分别放在X和Y单元中,结果放在Z单元中。设两个数n分别为32和64n编程如下:DATE segment X DB 20H Y DB 40H X20Y40Z DB ? DATE ENDS CODE segment ASSUME CS:CODE, DS:DATE START:MOV AX,DATE MOV DS,AX MOV AL,X MOV AL,X ADD AL,Y MOV AH,00H ADC AH,00H MOV BL

4、,02H DIV BL MOV Z,AL CODE ENDS END START n例2、内存中自TABLE开始的七个单元中,连续存放着自然数06的平方值。任意一个数X(0X6)在FIRST单元中,要求查表找出X的平方值,把结果送入SECOND单元。TABLE00010409101924FIRSTXSECOND-nDATA SEGMENTnTABLE DB 0,1,4,9,16,25,36nFRST DB 4nSECOND DB ?nDATA ENDSnCODE SEGMENTnASSUME CS:CODE,DS:DATAn MOV AX,DATAn MOV DS,AXn MOV BX,OFF

5、SET TABLE n MOV AL,FIRST nXLATnMOV SECOND,ALnCODE ENDSnEND 常用系统功能调用常用系统功能调用01H号读取键盘字符并回显(单字符)调用方式MOV AH,01HINT 21H 说明等待按键 若是CTRL-BREAK则退出 其他键,将其ASCLL码送AL寄存器,同时送显示器显示 02H号显示字符 调用方式MOV AH,02HINT 21H DL 要显示字符的ASCLL码说明将置入DL寄存器的字符送显示器显示 08H号键盘输入单字符不显示 调用方式MOV AH,08HINT 21H 说明将输入的字符送AL寄存器 09H号字符串输出显示 调用方式

6、DX 要显示字符串的首地址MOV AH,08HINT 21H 说明要显示的字符串一般定义在数据段 该字符串必须以定界符“$”为结束标志 “$” 字符不显示 STRING DB How are you,$ 例如:例如: MOV DX,OFFSET STRING MOV AH,09H INT 21H 0AH号字符串输入 调用方式DX 接收字符串缓冲区的首地址MOV AH,0AHINT 21H 说明从键盘接收字符串到内存指定的缓冲区,直到回车为止 缓冲区的第一个字节为指定缓冲区的字符个数 缓冲区的第二个字节保留,填写实际输入字符的个数 缓冲区的第三个字节开始存入输入的字符 例如:例如: DATA S

7、EGMENT BUF DB 80 DB ? DB 80DUP(?) DATA ENDS 4CH号结束程序返回操作系统 调用方式MOV AH,4CHINT 21H 2、分支程序设计、分支程序设计分支程序:根据某种判断结果,从两个以上的程序中选择一个执行。条件分支段1分支段2或条件分支段2n例3、比较两个无符号数的大小,把大数存入MAX单元。DATE segment SHUJU DB X1,X2 MAX DB ? MAX DB ? DATE ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA MOV AX,DATA MOV DS,AX MOV AL,SHUJU C

8、MP AL,SHUJU+1 JA BRANCH BRANCH:MOV MAX, ALMOV AL, SHUJU+1 CODE ENDS END MOV AH, 4CH INT 21H 从键盘输入从键盘输入0-7中的一个数,然后将数字转换成对应中的一个数,然后将数字转换成对应位为位为1的的8位二进制数存入位二进制数存入AL中,根据中,根据AL中哪一位为中哪一位为1转入相应的分支程序处,实现散转,设转入相应的分支程序处,实现散转,设8个分支程序个分支程序分别显示分别显示A-H中的一个中的一个 。 分析:分析: 输入输入0 AL0000 0001 显示显示A 输入输入1AL0000 0010 显示显

9、示B 输入输入2AL0000 0100 显示显示C 输入输入3AL0000 1000 显示显示D 输入输入7AL1000 0000 显示显示H实际:实际: 输入输入0AL0011 00000000 0001 输入输入10011 00010000 0010AL 输入输入30011 00110000 1000AL 输入输入70011 01111000 0000AL设置初值寄存器设置初值寄存器DL0000 0001移动次数由移动次数由AL低低4位得到位得到送送CL寄存器寄存器移动移动 DL后送显示后送显示 Code segmentAssume cs:code Start:Mov dl,01h shu

10、ru:mov ah,1Int 21hCmp al,qJz exitAnd al,0fhCmp al,0Jz shuchuMov cl,alShl dl,clShuchu:cmp dl,01hJz chu1Cmp dl,02h Shuchu:cmp dl,01hJz chu1Cmp dl,02hJz chu2 cmp dl,04hJz chu3 cmp dl,08hCmp dl,10hJz chu4Cmp dl,20hJz chu5Cmp dl,40hJz chu6Cmp dl,80hJz chu7chu1:mov dl,aJmp xianshiChu2:mov dl,bJmp xianshiC

11、hu3:mov dl,cJmp xianshiXianshi:mov ah,2Int 21hLoop shuruExit:mov ah,4chInt 21hCode endsEnd start 3、循环程序设计、循环程序设计循环程序一般由四部分组成循环初值循环次数,循环正常工作的初始状态循环体循环工作的主体部分,为完成特定功能而设计的程序段 修改部分保证每次循环时,相关信息发生有规律的变化,为下一次循环作准备 循环控制部分控制循环的运行和结束 n例4、从XX单元开始10个连续单元中存放有10个无符号数,从中找出最大者送YY单元。XXYY分析ALData segment Xx db 15,22,

12、16,9,3,44,26,88,39,52 Yy db ? Data ends Code segment Assume cs: code,ds:data Assume cs: code,ds:data Mov ax,data Mov ds,ax Mov al,xx Mov al,xx lea bx,xx inc bx Cmp al,bx Mov cx,9 Jae next Xchg al,bx Loop next:loop1:loop1Mov yy,al Mov ah,4ch Int 21h Code ends End 设数据段有设数据段有8个有符号数:个有符号数: MUN DB -19,28

13、,33,-45,55,61-67,255。 设计要求:设计要求: 1、统计并显示负数的个数。、统计并显示负数的个数。 2、找出最大的数,并以、找出最大的数,并以16进制的形式显示在屏幕上进制的形式显示在屏幕上 。格式为:格式为:MAX= XXH。 例例5: 把把BX寄存器内的二进制数用十六寄存器内的二进制数用十六进制数的形式在屏幕上显示出来进制数的形式在屏幕上显示出来分析:分析:BX16位位 BHBL 1001 1100 00110101 9C359 C 3 5 0-30H十六进制数:十六进制数: 0 1 2 3 4 5 6 7 8 9 A B C D E F 1-31H 2-32H 3-33

14、H 9-39H A-41H B-42H C-43H D-44H E-45H F-46HBXBHBL1001 1100 00110101 9C35 0011 1001 循环左移循环左移4位位 1100 00110101 1001 C359BLAL0101 1001 屏蔽屏蔽AL高高4位位0000 1001 AL与与30H相或相或0011 1001 39HCode sgement Assume cs:code Start: mov ch,4 Loop1:mov cl,4 Rol bx,cl Mov al,bl And al,0fh Add al,30h Cmp al,3ah Jl shuchu A

15、dd al,07hShuchu:mov dl,al Mov ah,2Int 21h Dec ch Jnz loop1 Mov ah,4ch Int 21h Code ends End start 用冒泡法排序用冒泡法排序有一个首地址为有一个首地址为A的的N字数组,编程实现字数组,编程实现数组中的数从大到小排序数组中的数从大到小排序分析:分析:序号123456数85168432181 AL8855165 165584321821684321885384321816854843218168558432181685排序程序设计排序程序设计 Data seggmentA dw 8,5,16,84,32

16、,18, n dw $-1Data ends Code segment Assume cs:code,ds:data start: mov ds,axMov cx,n dec cxMov di,cx Mov bx,0 Mov ax,abx Cmp ax,abx+2 jge cotinue mov ax, data xchg ax,abx+2Mov abx,ax add bx,2Loop loop1 mov cx,diLoop loop2 code ends end srart loop1:cotinue: loop2:4、字符串处理程序、字符串处理程序使用ASCLL码时注意的几个问题P124页

17、例如,搜索字符串的长度置串指针置串长度初值0取串元素=CR?N串长度加1Y存长度返回Name length-of-string Data segment String db abcdefg,odh Ii db ? Cr equ 0dh Data ends Stack segment para stack stack Db 100 dup(?) Stack ends Code segment Assume cs:code, ss:stack,ds:data,es:data Start proc far Begin :push ds Mov ax,0 Push ax Mov ax,data Mov

18、 ds,ax Mov ds,ax Mov es,ax Lea di,string Mov dl,0 Mov al,cr scasb Je done Inc dl Jmp again Again :done:lea bx, ii Mov bx, dl Ret Start endp Code ends End begin 7宏汇编宏汇编一、宏定义、宏调用和宏展开一、宏定义、宏调用和宏展开1、定义格式:、定义格式:宏名宏名MACRO 哑元表哑元表宏定义体宏定义体ENDM宏指令名宏指令名的第一个的第一个符号必须符号必须是字母是字母给出宏定义给出宏定义中用到的中用到的形式参数形式参数各参数之间各参数之间

19、用逗号分开用逗号分开 2、宏调用格式:、宏调用格式:宏名宏名 实元表实元表3、宏展开:、宏展开:汇编时将宏名用宏定义体代替,并用元汇编时将宏名用宏定义体代替,并用元代替对应的哑元代替对应的哑元 举例说明宏的定义、调用和展开举例说明宏的定义、调用和展开例例7.1 P247页页用宏指令定义两个字操作数相乘,得用宏指令定义两个字操作数相乘,得到一个到一个16位的第三个操作数为结果。位的第三个操作数为结果。宏定义宏定义MULTIPLYMACROOPR1,OPR2,RESULTPUSH DXPUSH AXMOV AX, OPR1 IMUL OPR2MOV RESULT,AX POP AXPOP DXEN

20、DM 宏调用宏调用MULTIPLYCX,VAR,XYZBXMULTIPLY240,BX,SAVE宏展开宏展开PUSH DXPUSH AXMOV AX, CX IMUL VARMOV XYZBX,AX POP AXPOP DXPUSH DXPUSH AXMOV AX, 240 IMUL BXMOV SAVE,AX POP AXPOP DX宏调用与子程序调用的区别宏调用与子程序调用的区别主程序主程序X-a,y-bCall Q子程序子程序(X,Y)Q: RETX-C,y-DCall QX-E,y-FCall Q Q MACRO X,YENDM Q A,BQ C,DQ E,FQ (A,B)Q (C,D

21、)Q (E,F)二、宏定义中的参数二、宏定义中的参数1、宏定义可以无参数、宏定义可以无参数SAVEREGMACROPUSH AXPUSH BXPUSH CXPUSH DXPUSH SI PUSH DIENDM定义:定义:程序中调用程序中调用SAVEREG例例7.3 P249页页2、变元可以是操作码、变元可以是操作码FOOMACRO定义:定义:P1,P2,P3MOV AX, P1P2 P3ENDMFOOWORD_VAR,INC,AX汇编时展开宏汇编时展开宏MOV AX, WORD_VAR INC AX例例7.4 P249页页3、变元是操作码的一部分,用、变元是操作码的一部分,用作为分隔符作为分隔

22、符LEAPMACRO定义:定义:COND,LABJ COND LABENDMLEAP Z,THERE汇编时展开宏汇编时展开宏JZ THERE JNZ THERELEAP NZ,THERE例例7.5 P250页页FOMACRO定义:定义:P1JMP TAP1ENDMFO WORD_VAR汇编时展开宏汇编时展开宏JMP TAWORD_VAR FOMACROP1JMP TAP1ENDM例例7.6 P250页页4、变元是、变元是ASCLL串串MSGGENMACRO定义:定义:LAB,NUM,XYZLAB NUM DB HELLO MR. XYZENDMMSGGENMSG,1,TAYLOR汇编时展开宏汇

23、编时展开宏MSG1 DB HELLO MR.TAYLOR例例7.6 P250页页4、变元是、变元是ASCLL串串MSGGEN定义:定义:例例7.7 P251页页5、变元中实用、变元中实用%操作符(略)操作符(略)三、三、LOCAL伪操作伪操作例例7.8 P252页页1、宏定义体内允许使用标号、宏定义体内允许使用标号ABSOLMACROOPERENDMCMP OPER,0JGE NEXTNEG OPER NEXT:宏调用宏调用ABSOLVARABSOLBX汇编时展开宏汇编时展开宏CMP VAR,0JGE NEXTNEG VAR NEXT:CMP BX,0JGE NEXTNEG BX NEXT:标

24、号多重定标号多重定义不允许义不允许用用LOCAL伪操作解决标号多重定义的问题伪操作解决标号多重定义的问题格式:格式:LOCALLIST OF LOCAL LABELS注意事项见注意事项见P252汇编时各局部标号用汇编时各局部标号用?0000?FFFF依次代替依次代替例例7.8 的宏定义应改为:的宏定义应改为: ABSOLMACROOPERENDMCMP OPER,0JGE NEXTNEG OPER NEXT:LOCAL NEXT宏调用宏调用ABSOLVARABSOLBX汇编时展开宏汇编时展开宏CMP VAR,0JGE NEG VAR ?0000:CMP BX,0JGE NEG BX?0001:?0000 ?0001 四、在宏定义内使用宏(略)四、在宏定义内使用宏(略) 例例7.9 P253页页五、列表伪操作(略)五、列表伪操作(略)六、宏库的建立与调用六、宏库的建立与调用宏库中包含多个宏定义,库名的扩展名通常宏库中包含多个宏定义,库名的扩展名通常为为.MAC或或.INC来表示,调用是需要在程序开始来表示,调用是需要在程序开始用用INCLUDE语句来说明。语句来说明。 例:例:INCLUDE C:MACRO.MAC建立

温馨提示

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

评论

0/150

提交评论