第04章-汇编语言程序设计.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第04章-汇编语言程序设计.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04 汇编语言 程序设计
- 资源描述:
-
1、 4.1 概述 4.2 汇编语言程序的格式与基本语法 4.3 伪操作命令与宏指令 4.4 DOS与BIOS的调用 4.5 汇编语言程序设计 汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用 汇编语言程序设计一、一、机器语言机器语言(Machine Language)(Machine Language)二进制数形式的指令和二进制数形式的指令和数据。数据。B0 64 B0 64 这就是机器语言。既不直观这就是机器语言。既不直观,又不易理解和记忆又不易理解和记忆.目标程序目标程序(Object Program)(Object Program)用机器语言编写的程序用机器语言编写的程序 MOV
2、AL,64H;这就是;这就是助记符助记符。助记符助记符用便于记忆的英语单词表示的指令操作码。它用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征反映了指令的功能和主要特征,便于人们理解和记忆。便于人们理解和记忆。二、汇编语言二、汇编语言(Assembly Language)(Assembly Language)指令助记符指令助记符,符号地址,符号地址,标号,伪指令等语言元素的集合以及这些元素使用的规则。标号,伪指令等语言元素的集合以及这些元素使用的规则。采用标号或符号来代替地址采用标号或符号来代替地址汇编语言源程序汇编语言源程序(Source Program)用汇编语言编写的程
3、序。用汇编语言编写的程序。操作数可能放在存储器中操作数可能放在存储器中,这就涉及操作数的地址。程序这就涉及操作数的地址。程序中遇到转移指令或调用指令中遇到转移指令或调用指令,也需要知道转移地址也需要知道转移地址,若采用若采用具体地址就很不方便具体地址就很不方便,一旦有错,改动也很麻烦。一旦有错,改动也很麻烦。10D1:0100 09750B OR DI+0B,SI10D1:0103 807C0A2C CMP BYTE PTR SI+0A,2C10D1:0107 7505 JNZ 010E10D1:0109 FF36A22C PUSH 2CA210D1:010D 41 INC CX10D1:01
4、0E 93 XCHG BX,AX10D1:010F 33D2 XOR DX,DX10D1:0111 EBA7 JMP 00BA10D1:0113 33D2 XOR DX,DX10D1:0115 33C0 XOR AX,AX10D1:0117 FF36952C PUSH 2C9510D1:011B C3 RET10D1:011C 33D2 XOR DX,DX10D1:011E 0BC9 OR CX,CX源程序的编译程序源程序的编译程序汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序输入汇编语言源程序源文件.ASM汇编(编译)目标文件.OBJ链接可执行文件.EXE调试最
5、终程序MASM、DEBUGMASM X.ASMLINK X.OBJX.EXE适合于描述各种算法,不依赖于计算机结构和指令系统。可移植性好,编成方法适合人们的习惯、通用性好。编译和解释程序复杂,占内存大,产生目标代码长。执行速度慢。处理中断和接口困难。高级语言源程序目标 程序编译编译软件程序或解释软件程序 汇编语言源程序通常由一个或几个程序模块组成,每个模块一般一般由三个逻辑段组成:数据段数据段存放数据、变量存放数据、变量 堆栈段堆栈段堆栈区域堆栈区域 代码段代码段存放程序指令存放程序指令堆栈段数据段代码段 stack SEGMENT PARA stack DB 100 DUP(stack)st
6、ack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code,DS:data,ES:data start:MOV AX,data MOV DS,AX MOV ES,AX MOV AL,4CH INT 21H code ENDS END start 一个基本的汇编语言程序框架如下:汇编语言的语句有三种:汇编语言的语句有三种:指令性语句指令性语句由由80868086指令助记符构成的语句,指令助记符构成的语句,由由CPU执行,每一条指令性语句都有一条执行,每一条指令性语句都有一条机器机器码指令码指令与其对应。与其对应。指示性语句指示性语句由伪
7、指令构成的语句,由由伪指令构成的语句,由汇编程汇编程序序执行。它指出汇编程序应如何对源程序进行执行。它指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。程序开始和结束等。指示性语句无机器码指令指示性语句无机器码指令与其相对应。与其相对应。宏指令语句宏指令语句简化汇编语言,可以用一条宏指简化汇编语言,可以用一条宏指令指令代替定义过的一段程序,汇编时将该段令指令代替定义过的一段程序,汇编时将该段程序插入对应程序中。程序插入对应程序中。一、语句的种类一、语句的种类指令性语句指令性语句的格式为:标号标号:指令助记符指令助记符
8、 目的操作数,源操作数目的操作数,源操作数 ;注释注释指示性语句指示性语句的格式为:名字名字 伪指令伪指令 参数参数1,1,参数参数2,2,参数参数n n ;注释注释宏指令语句宏指令语句的格式为:标号标号:宏指令宏指令 参数参数1,参数参数2,参数参数n ;注释注释 注:各部分之间注:各部分之间至少至少要用一个空格作为分隔符。要用一个空格作为分隔符。注释注释以分号开头,可放在指令后,也可单独一行。注意注解的写法。要写指令(段)在程序中的作用,而不要写指令的操作。例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值 显然,第二
9、种写法要比第一种写法要好。汇编语言的一个实例:hello.asm Hello DB Hello,world!,0DH,0AH,$ASSUME CS:prog,DS:datastart:MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;显示字符串 MOV AH,4CH INT 21H;退回DOS名字标号 数据项包括数据项包括常量常量、变量变量、标号标号及及表达式表达式。1.1.常量常量常数常数二进制数二进制数,以以B B结尾。如结尾。如01001101B01001101B。十进制数十进制数,如如8585。十六进制数十六进制数,
10、以以H H结尾。第结尾。第1 1个数字为个数字为A-FA-F时,前面应加时,前面应加0 0,如,如0F160H0F160H。字 符 串:字 符 串:用 引 号 括 起 来 的用 引 号 括 起 来 的 1 1 个 或 多 个 字 符。如个 或 多 个 字 符。如 E R R O R!,a ,E R R O R!,a ,汇 编 时 被 翻 译 成 对 应 的汇 编 时 被 翻 译 成 对 应 的 A S C I IA S C I I 码码45H,52H,52H,4FH,52H,21H45H,52H,52H,4FH,52H,21H和和61H61H。数值符号名:数值符号名:用伪指令定义的用伪指令定义
11、的(EQU)(EQU)符号名符号名.常量表达式:常量表达式:用各种运算符与各种数值常数组成的可求值的用各种运算符与各种数值常数组成的可求值的表达式。由汇编程序计算而得。表达式。由汇编程序计算而得。有三个属性:段地址段地址:即标号所在段的段地址;偏移量偏移量:标号所代表存储单元的段内偏移地址;类类 型型:NEAR或FAR:NEAR表示标号所在语句与转移指令/调用指令在同一码段内,跳转时 只需改变IP即可。FAR标号所在语句与转移指令/调用 指令不在同一代码段内。若没有对类型进行说明,默认为NEAR。标号通常作为转移指令转移指令或CALLCALL指令指令的转移地址。变量即内存中的存储单元或数据区。
12、变量名是存储单元(数据区)的符号地 址或名字。变量也有三个属性:段地址变量所在段的段地址偏移量变量单元地址与段首地址之间的位移量。类 型有BYTE、WORD和DWORD三种。变量在程序中作为存储器操作数存储器操作数被引用。标号和变量名的使用规则 组成:A-Z(不分大小写),0-9,?._$不能以数字开头,句号(.)只能作为首字符 长度小于31个字符 不能与保留字(指令助记符、伪指令、预定义符号等)重名 不能重复定义例如:正确的:LP1,AGAIN,NEXT,_GO,OK_1 错误的:4M,LOOP,AAA,#HELP,+ONE表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表
13、达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。表达式中的运算符有5类:算术运算符、逻辑运算符、关系运算符、分析运算符和合成运算符。用于数字表达式,例:MOV AX,4*1024汇编后的形式为:MOV AX,4096 用于地址表达式,例:LEA SI,TAB+3若TAB的偏移地址为1000H,则汇编后的形式为:LEA SI,1003H 逻辑运算符只能用于数字表达式中。例:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H注意,不要把逻辑运算符与逻辑运算指令混淆:例:AND AX,3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F
14、00H,所以上述指令与AND AX,3F00H等价。关系运算的结果是一个逻辑值:真真或假假 关系为真,结果为全1 关系为假,结果为全0例:MOV BX,PORT GT 300H;若PORT的值大于300H,则汇编后为:MOV BX,0FFFFH否则汇编后为:MOV BX,0 例:MOV BX,(PORT GT 300H)AND 20H)OR(PORT LE 300H)AND 30H)MOV BX,(PORT GT 300H)AND 20H)OR(PORT LE 300H)AND 30H)若PORT的值大于300H,则汇编后为:MOV BX,20H 否则汇编后为:MOV BX,30HSEG:取变
15、量/标号的段地址OFFSET:取变量/标号的偏移地址例:VAR DB 12H MOV BX,OFFSET VAR;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址注意,以下指令的异同:MOV BX,OFFSET VAR LEA BX,VAROFFSET只能取静态的偏移地址;LEA指令即可取静态的偏移地址,也可取动态的偏移地址。4)分析运算符:分析对MEM(变量或标号)的三个重要的属性。TYPE 取变量的类型(取变量的类型(1,2,4)LENGTH 取所定义变量的长度取所定义变量的长度 (即变量中元素的个数)(即变量中元素的个数)SIZE 取所定义存储区的字节数取所定
16、义存储区的字节数 (=TYPE*LENGTH)例:例:VAR DW 20 DUP(?),2 DAT1 DB 5,1 则 TYPE VAR=2 LENGTH VAR=20 SIZE VAR =40LENGTH、SIZE 仅用于带DUP的外层有效 格式 运算符 操作数SEGOFFSETTYPE变量名或标号变量名或标号标号或变量名返回其所在段的段基址返回其所在段的偏移地址返回其属性值NEAR、FARDB、DW、DD、DQ、DT变量名变量名LENGTHSIZE1、2、4、8、10-1、-2元素个数字节数SIZE=TYPE*LENGTH用于带DUP的外层有效用来指定地址操作数的类型。格式:PTR 类型B
17、YTE,WORD,DWORD,NEAR,FARBYTE、WORD、DWORD 用于描述数据存储单元(变量)地址NEAR、FAR 用于描述转移、调用的目的地址变量:指令中临时指定的变量的新属性可利用PTR指定地址相同而类型不同的新变量例:MOVBYTE PTRDI,0;字节类型 MOVWORD PTRDI,0;字类型 MOVDI,0B5H ;类型不定例:STR1 DW?;STR1定义为字类型 STR2 EQU BYTE PTR STAR1 MOVAX,STR1 ;合法 MOVAL,STR1 ;非法 MOV AL,BYTE PTR STR1;合法 MOV AL,STR2标号:可用PTR建立地址相同
18、而类型不同的新符号。可临时指定其标号的新属性。C1 SEGMENT ASSUME C1:CS JMP NEAR PTR NEXT;超前引用FNEXT EQU FAR PTR NEXT FFNEXT EQU THIS FARNEXT:MOV BX,100C2 SEGMENT C2:CS JMP FNEXT 符号符号equ this类型类型 另一符号另一符号;放于被指定类型前放于被指定类型前格式:THIS 类型 可以像PTR一样建立一个指定类型的地址操作数,该操作数的段地址和偏移地址与下一个存储单元地址相同。例:BUFB EQU THIS BYTEBUFW DW 1234H,5678H.MOV A
19、X,BUFW ;AX=1234HMOV BL,BUFB ;BL=34HBUFB的偏移地址和BUFW完全相同,但它是字节类型;而BUFW则是字类型。P237页 运算符的优先级 数据定义伪指令 符号定义伪指令 模块定义伪指令(段)过程定义伪指令 宏指令 模块连接 列表伪指令 用于定义变量,即内存单元或数据区。数据定义伪指令的格式为:变量名变量名 数据定义伪指令数据定义伪指令 操作数,操作数,操作数,操作数,DB、DW、DD、DQ、DT 作用:定义变量类型属性,并可以进行初始化常数或表达式字符串(hello表示其ASC值的)?(该单元不初始化,预留出存储空间)带DUP表达式 n dup(操作数)带$
20、(表示地址计数器当前值)常数或表达式:DATA_B DB 10,5,10HDATA_W DW 100H,-4DATA_D DD 0FFFBH05H10H00H01HFCHFFHFBHFFH00H00H0AHSTRHELLO48H45H4CH4CH4FH注意下面两个定义的不同之处:DBAB;41H在低字节 ;42H在高字节DW AB;42H在低字节,;41H在高字节操作数可以是字符串,例如STR DBHELLO操作数?用来保留存储空间,但不存入数据.例3:ABC DB 0,1,2,3,4,OK,$RSV DW?,?,?,?,?,?,?,?复制操作符DUP:重复的数据可以使用复制操作符DUP,如上
21、面RSV亦可写成:RSV DW 8 DUP(?)若操作数中若使用$,则表示的是地址计数器的当前值。例:TABLE DB 10 DUP(?)BUFFER DW TABLE,$+3设TABLE的偏移地址为0080H,则汇编后如下图所示:$表示当前存储单元的偏移地址。表示当前存储单元的偏移地址。BUFFER0080H80HTABLE008AH008BH008CH008DH.8FH00H00H0089H10 BytesDAT8DAT7DAT6DAT5DAT4DAT3DAT2DAT115H14H13H12H11H10H0FH0EH0DH0CH0BH0AH9H8H7H6H5H4H3H2H1H0000HDA
22、TA SEGMENT DAT1 DB 40H DAT10 EQU WORD PTR DAT1 DAT9 EQU THIS WORD DAT2 DW 00H,23H DAT3 DB 2 DUP(20H)DAT4 DB AB DAT5 DW AB DAT6 DW?,$+3 DAT7 DB 25H*4 A1 EQU 10H DAT8 DB 2 DUP(2 DUP(A1)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX MOV BX,SEG DAT2 MOV CX,OFFSET DAT2XX:MOV DX,TYPE D
23、AT2 MOV AX,TYPE XX MOV AL,LENGTH DAT3 MOV AH,LENGTH DAT8 MOV BL,SIZE DAT8 mov ah,4ch int 21hCODE ENDS END?H?H10H00H94H10H10H10H10H09H10H41H42H42H41H20H20H00H23H00H00H40HDAT9DAT10D:MASM1DEBUG DEFINED.EXE-D1254:0000 40 00 00 23 00 20 20 41-42 42 41 00 00 10 00 94 .#.ABBA.1254:0010 10 10 10 10 00 00 00
24、 00-00 00 00 00 00 00 00 00 .1254:0020 B8 54 12 8E D8 BB 54 12-B9 01 00 BA 02 00 B8 FF 8T.X;T.9.:.8.1254:0030 FF B0 02 B4 00 B3 00 B4-4C CD 21 00 00 00 00 00 .0.4.3.4LM!.1254:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .1254:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .1254:0060 00
25、 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .1254:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-AX=0000 BX=0000 CX=0082 DX=0002 SP=0000 BP=0000 SI=0000 DI=0000DS=1244 ES=1244 SS=1254 CS=1254 IP=0020 NV UP DI PL NZ NA PO NC1254:0020 B85412 MOV AX,1254-TAX=1254 BX=0000 CX=0082 DX=0002 SP=00
展开阅读全文