微机原理与接口技术课件:第4章_1 汇编语言源程序

上传人:s9****2 文档编号:569489073 上传时间:2024-07-29 格式:PPT 页数:38 大小:210.50KB
返回 下载 相关 举报
微机原理与接口技术课件:第4章_1 汇编语言源程序_第1页
第1页 / 共38页
微机原理与接口技术课件:第4章_1 汇编语言源程序_第2页
第2页 / 共38页
微机原理与接口技术课件:第4章_1 汇编语言源程序_第3页
第3页 / 共38页
微机原理与接口技术课件:第4章_1 汇编语言源程序_第4页
第4页 / 共38页
微机原理与接口技术课件:第4章_1 汇编语言源程序_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《微机原理与接口技术课件:第4章_1 汇编语言源程序》由会员分享,可在线阅读,更多相关《微机原理与接口技术课件:第4章_1 汇编语言源程序(38页珍藏版)》请在金锄头文库上搜索。

1、第第4 4章章 汇编语言程序设计汇编语言程序设计4.1 汇编语言源程序 机器语言机器语言机器语言机器语言二进制数形式的指令和数据。二进制数形式的指令和数据。 B0 64 B0 64 是什么意思?这就是机器语言。既不直是什么意思?这就是机器语言。既不直观观, ,又不易理解和记忆又不易理解和记忆. . MOV ALMOV AL,64H64H ;很容易记忆理解,这就是很容易记忆理解,这就是助记助记助记助记符符符符。 助记符助记符助记符助记符用便于记忆的英语单词表示的指令用便于记忆的英语单词表示的指令操作码。它操作码。它反映了指令的功能和主要特征反映了指令的功能和主要特征, ,便于人便于人们理解和记忆

2、。们理解和记忆。1 1 操作数可能放在存储器中操作数可能放在存储器中, ,这就涉及一个地这就涉及一个地址问题。程序中遇到转移指令或调用指令址问题。程序中遇到转移指令或调用指令, ,就要就要知道转移地址知道转移地址, ,若采用具体地址就很不方便若采用具体地址就很不方便, ,一一旦有错改动也很麻烦。于是人们旦有错改动也很麻烦。于是人们采用标号或符采用标号或符采用标号或符采用标号或符号来代替地址号来代替地址号来代替地址号来代替地址, ,例:例: LP1: LP1: LOOP LOOPLP1LP1 汇汇汇汇编编编编语语语语言言言言指指令令助助记记符符, ,符符号号地地址址,标标号号,伪伪指指令令等等语

3、语言言元元素素的的集集合合以以及及这这些些元元素素使使用用的的规则。规则。 用汇编语言编写的程序叫用汇编语言编写的程序叫汇编语言源程序汇编语言源程序汇编语言源程序汇编语言源程序。指令除了操作码以外指令除了操作码以外, ,还有一个操作数问题。还有一个操作数问题。2 2 汇编语言是面向具体计算机硬件的语言,和机器密切相关。为什么要用汇编语言?程序短小,节省内存;程序短小,节省内存;执行速度快;执行速度快;用户可直接对硬件实施控制。用户可直接对硬件实施控制。故实时性要求很高的程序多采用汇编语言程序。 汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编汇编。高级语言中称该过程

4、为“解释”或“编译”。3 34.1.1 汇编语言源程序的结构 汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三个逻辑段组成: 数据段数据段存放数据、变量存放数据、变量 堆栈段堆栈段堆栈区域堆栈区域 代码段代码段存放程序指令存放程序指令4 4汇编语言程序框架如下:汇编语言程序框架如下: stackstack SEGMENT PARA SEGMENT PARA stackstack DB 100 DUP( DB 100 DUP(stackstack) ) stackstack ENDS ENDS datadata SEGMENT SEGMENT data data ENDS ENDS

5、codecode SEGMENT SEGMENT ASSUME CSASSUME CS: :codecode, DS, DS: :datadata, ES, ES: :datadata start:start: MOV AX, MOV AX, datadata MOV DS, AX MOV DS, AX MOV ES, AX MOV ES, AX MOV AL, 4CH MOV AL, 4CH INT 21HINT 21H codecode ENDS ENDS END END start start 堆栈段数据段代码段5 54.1.4.1.2 2 汇编语言的语句与格式汇编语言的语句与格式汇编语

6、言的语句有两种:汇编语言的语句有两种:指令性语句指令性语句指令性语句指令性语句由由由由8086808680868086指令助记符构成的语句指令助记符构成的语句指令助记符构成的语句指令助记符构成的语句指示性语句指示性语句指示性语句指示性语句由伪指令构成的语句由伪指令构成的语句由伪指令构成的语句由伪指令构成的语句指令性语句指令性语句的格式为: 标号标号标号标号: : : : 指令助记符指令助记符指令助记符指令助记符 目的操作数,源操作数目的操作数,源操作数目的操作数,源操作数目的操作数,源操作数 ; ; ; ;注释注释注释注释 指示性语句指示性语句的格式为: 名字名字名字名字 伪指令伪指令伪指令伪

7、指令 操作数操作数操作数操作数1,1,1,1,操作数操作数操作数操作数2,2,2,2,操作数操作数操作数操作数n n n n ; ; ; ;注释注释注释注释 注:各部分之间至少要用一个空格作为分隔符。注:各部分之间至少要用一个空格作为分隔符。注:各部分之间至少要用一个空格作为分隔符。注:各部分之间至少要用一个空格作为分隔符。6 6指令性语句指令性语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应;指示性语句指示性语句由由汇编程序汇编程序执行。它指出汇编程序应如何对源程序进行汇编,如何定义变量,分配存储单元以及指示程序开始和结束等。指示性语句没有机器码指令相对应。 指令性语句汇编时指令

8、性语句汇编时生成生成机器码;机器码; 指示性语句汇编时指示性语句汇编时不生成不生成机器码。机器码。7 7汇编语言的一个实例: hello.asm datadata SEGMENT SEGMENTHello DB Hello, world!,0DH,0AH,$data data ENDSENDSprogprog SEGMENT SEGMENT ASSUME CS:prog,DS:datastart: MOV AX,data MOV DS,AX LEA DX,hello MOV AH,9 INT 21H MOV AH,4CH INT 21Hprogprog ENDS ENDS END END st

9、artstart8 8语句的构成元素:标号标号指令的符号地址,表示该指令的起始存指令的符号地址,表示该指令的起始存储地址,后加冒号储地址,后加冒号名字名字段、过程、变量的名字,用来代表它们段、过程、变量的名字,用来代表它们在存储器中的地址在存储器中的地址指令助记符指令助记符80868086助记符、伪指令助记符、伪指令操作数操作数即指令的操作对象即指令的操作对象 对指令性语句对指令性语句00,1 1,2 2个个 对指示性语句对指示性语句根据需要而定根据需要而定 操作数之间以逗号分隔操作数之间以逗号分隔 操作数可以是操作数可以是寄存器、存储单元、常数或表达式寄存器、存储单元、常数或表达式 例如:例

10、如:MOV BYTE PTRDI+BX+10MOV BYTE PTRDI+BX+10,16*8+TABLE16*8+TABLE9 9注解以分号开头,可放在指令后,也可单独一行。注意注解的写法。要写本指令在程序中的作用,而不要写指令的操作。 例如:以下为同一条指令写的注释 1)MOV CX,100 ;100送CX 2)MOV CX,100 ;给计数器送初值 显然,第二种写法要比第一种写法要好。 1010 4.1.4.1.3 3 数据项与表达式数据项与表达式数据项包括常量常量、变量、标号标号及表达式表达式。1.常量二进制数二进制数, ,以以B B结尾。如结尾。如01001101B01001101B

11、。十进制数十进制数, ,如如8585。十十六六进进制制数数, ,以以H H结结尾尾。第第1 1个个数数字字为为A-FA-F时时,前前面应加面应加0 0,如,如0 0F160HF160H。字字符符串串:用用引引号号括括起起来来的的1 1个个或或多多个个字字符符。如如ERROR!, ERROR!, A,A,汇汇编编时时被被翻翻译译成成对对应应的的ASCIIASCII码码4 45H,52H,52H,4FH,52H,21H5H,52H,52H,4FH,52H,21H和和4141H H。1111有三个属性:有三个属性: 段地址:即标号所在段的段地址;段地址:即标号所在段的段地址; 偏移量:标号所代表存储

12、单元的段内偏移地址;偏移量:标号所代表存储单元的段内偏移地址; 类类 型:型:NEARNEAR或或FARFAR: NEARNEAR表示标号所在语句与转移指令表示标号所在语句与转移指令/ / 调用指令在同一码段内调用指令在同一码段内, ,跳转时跳转时 只需改变只需改变IPIP即可。即可。 FARFAR标号所在语句与转移指令标号所在语句与转移指令/ /调用调用 指令不在同一代码段内。指令不在同一代码段内。 若没有对类型进行说明若没有对类型进行说明, ,默认为默认为NEARNEAR。标号作为转移指令或标号作为转移指令或CALLCALL指令的转移地址。指令的转移地址。2.标号指令所在单元的符号地址12

13、12 变量就是内存中的数据区。 变量名是存储单元的符号地址(或数据区的名字)。变量的三个属性变量的三个属性: :段地址段地址变量所在段的段地址变量所在段的段地址偏移量偏移量变量单元地址与段起始地址之间的位移量。变量单元地址与段起始地址之间的位移量。类类 型型有有BYTEBYTE、WORDWORD和和DWORDDWORD三种。三种。变量在程序中作为存储器操作数被引用。变量在程序中作为存储器操作数被引用。3.变量1313标号和变量名的使用规则组成:组成:A-Z(A-Z(不分大小写不分大小写), 0-9, ), 0-9, ? . _ $ _ $不能以数字开头,句号不能以数字开头,句号( (.) )只

14、能作为首字符只能作为首字符长度小于长度小于3131个字符个字符不能与保留字不能与保留字( (指令助记符、伪指令、预定义符指令助记符、伪指令、预定义符号等号等) )重名重名不能重复定义不能重复定义例如: 正确的:L1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE14144.表达式表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。1515用于数字表达式,例: MOV AX,

15、4*1024汇编后的形式为: MOV AX,4096 用于地址表达式,例: LEA SI,TAB+3若TAB的偏移地址为1000H,则汇编后的形式为: LEA SI,1003H 1)算术运算符 +、-、*、/,MOD1616逻辑运算符只能用于数字表达式中。逻辑运算符只能用于数字表达式中。 例:例:MOVMOV CL,36H AND 0FHCL,36H AND 0FH 经汇编后:经汇编后:MOV CL,06HMOV CL,06H注意,不要把逻辑运算符与逻辑运算指令混淆:注意,不要把逻辑运算符与逻辑运算指令混淆: 例:例:AND AX, 3FC0H AND 0FF00HAND AX, 3FC0H

16、AND 0FF00H 经汇编后:经汇编后:AND AX,3F00HAND AX,3F00H2)逻辑运算符 AND、OR、XOR、NOT1717关系运算的结果是一个逻辑值:真真或假假 关系为真,结果为全1 关系为假,结果为全0例:例:MOV BX,PORT GT 300HMOV BX,PORT GT 300H 若若PORTPORT的值大于的值大于300H,300H,则汇编后为:则汇编后为: MOV BX,0FFFFHMOV BX,0FFFFH 否则汇编后为:否则汇编后为: MOV BX,0MOV BX,03)关系运算符EQ、NE、LT、GT、LE、GE1818SEG:取变量/标号的段地址OFFS

17、ET:取变量/标号的偏移地址例:VAR DB 12HVAR DB 12H MOV BX MOV BX,OFFSETOFFSET VAR VAR ;取变量;取变量VARVAR的偏移地址的偏移地址 MOV AX MOV AX,SEG VAR SEG VAR ;取变量;取变量VARVAR的段地址的段地址注意,以下指令的异同:注意,以下指令的异同: MOV BX, OFFSET VARMOV BX, OFFSET VAR LEA BX, VAR LEA BX, VAROFFSETOFFSET只能取静态的偏移地址;只能取静态的偏移地址;LEALEA指令即可取静态的偏移地址,也可取动态的偏移地址。指令即可

18、取静态的偏移地址,也可取动态的偏移地址。 4)取地址运算符SEG、OFFSET19194)属性运算符PTR用来指定地址操作数的类型。格式: PTR 类型类型 BYTE, WORD, DWORD, NEAR, BYTE, WORD, DWORD, NEAR, FARFAR BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址NEAR、FAR 用于描述转移、调用的目的地址2020例:MOVBYTE PTRDI,0 MOVWORD PTRDI,0而 MOVDI,0 ;类型不定PTR也可用来进行强制类型转换:例:例:STR1 DW STR1 DW ? ;STR1 ;STR1定义为字类型定义

19、为字类型 MOV MOVAX,STR1 ;AX,STR1 ;是合法的是合法的 MOV MOVAL,STR1 ;AL,STR1 ;是非法的是非法的 MOV AL, MOV AL,BYTE PTRBYTE PTR STR1 ; STR1 ;是合法的是合法的2121LENGTH用来计算存储器操作数的元素个数;TYPE用来取存储器操作数的类型;SIZE用来计算存储器操作数的字节总数。例:若BUFFER存储区的定义为: BUFFER DW 200 DUP(0)则: TYPE BUFFER 等于2 LENGTH BUFFER 等于200 SIZE BUFFER 等于4005)其他运算符LENGTH、TYP

20、E、SIZE22224.2 伪指令数据定义伪指令符号定义伪指令段定义和段寄存器指定伪指令过程定义伪指令结束伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:23234.2.1 数据定义伪指令 用于定义变量,即内存单元或数据区。数据定义伪指令的格式为: 变量名变量名变量名变量名 数据定义伪指令数据定义伪指令数据定义伪指令数据定义伪指令 操作数操作数操作数操作数 ; ; ; ;注释注释注释注释伪指令助记符有如下几种: DB 定义字节字节 DW 定义字字 DD 定义双字双字操作数可以是常数或表达式2424例1:DATA_B DB 10,5,10HDATA_B DB 10,5,10

21、HDATA_W DW 100H,-4DATA_W DW 100H,-4DATA_D DD 0FFFBHDATA_D DD 0FFFBH汇编后的内存分配情况汇编后的内存分配情况如右图所示。如右图所示。05H10H00H01HFCHFFHFBHFFH00H00H0AHQDATA_BDATA_BDATA_WDATA_WDATA_DDATA_D10105 510H10H100H100H- - - -4 40FFFBH0FFFBH2525例2:操作数可以是字符串,例如STR DB HELLO汇编后的情况如图:STRHELLO注意下面两个定义的不同之处:DBAB ;41H在低字节,42H在高字节DW AB

22、 ;42H在低字节,41H在高字节48H45H4CH4CH4FH2626操作数?用来保留存储空间,但不存入数据.例3:ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,?复制操作符DUP:重复的数据可以使用复制操作符DUP,如上面RSV亦可写成: RSV DW 8 DUP(?)若操作数中若使用$,则表示的是地址计数器的当前值。2727例: TABLE DB 10 DUP(?) BUFFER DW TABLE,$+3设TABLE的偏移地址为0080H,则汇编后如下图所示:BUFFER0080H80HTABLE008AH008BH008CH008DH.8FH00

23、H00H0089H10 Bytes28284.2.2 符号定义伪指令 把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。符号定义伪指令有两种:EQU,=用EQU定义的符号未清除前,不能重新定义。清除EQU定义可用PURGE伪指令。用”=”定义的符号可在任何时候进行重定义。二者二者均不占用存储空间,仅是给符号赋值 2929例:CONST EQU 100 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, CONS

24、T DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL 定义引用30304.2.3 段定义伪指令汇编语言程序是按段来组织程序和数据的。 和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编连接后被映射到物理段中。三类段:代码(程序)、数据、堆栈段定义伪指令:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME、ORGORG定义一个段的基本格式: 段名 SEGMENT 定位类型定位类型组合方式组合方式类别类别 段名 ENDS3131这两个伪指令总是成对出现,二者前面的段名应一致。SEGMENT说明了一个段的开始,ENDS说明了一

25、个段的结束。段中的内容部分,对数据段和堆栈段,一般是变量定义。对代码段则是指令语句。在代码段中,还必须明确段和段寄存器的关系,这由ASSUME语句来实现。如 ASSUME CS:code, DS:data, ES:dataSEGMENT 和和 ENDS3232但要注意,ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句 MOVAX,DATA MOVDS,AX MOVES,AX实现了将段基址装入段寄存器将段基址装入段寄存器。如果程序中用到堆栈段,也需装入实际的初值。而代码段基地址不需要程序员装入CS寄存器,而由OS负责装入。3333SEGMEN

26、TSEGMENT后的方括号中参数为可选项后的方括号中参数为可选项后的方括号中参数为可选项后的方括号中参数为可选项,规定了规定了规定了规定了逻辑段的一些其他特性逻辑段的一些其他特性逻辑段的一些其他特性逻辑段的一些其他特性。1) 定位类型定位类型说明说明如何确定逻辑段的边界。有四种如何确定逻辑段的边界。有四种:PARAPARA(Paragraph(Paragraph): ): 逻辑段从一个节 (16个字节) 的边界开始。即段的起始地址应能被16整除, 或这说段起始物理地址应为0H。默认类型BYTE :BYTE : 逻辑段从字节边界开始,即可以从任何地址开始。WORD :WORD : 逻辑段从字边界

27、开始。即本段的起始地址必须是偶数。PAGE :PAGE : 逻辑段从页边界开始。256字节称为一页,故本段的起始物理地址应为00H。3434 2) 组合类型组合类型说明不同模块中同名段的组合方式。PUBLIC : 所有此类型的同名段同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中。COMMON : 所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。AT : 按绝对地址定位,段地址就是表达式的值。STACK : 专用于说明堆栈段,组合方式同PUBLIC35353) 类别类别用单引号括起来的字符串。所有同类别的段被安用单引号括起来的字符串。所有同类别的段被安排在连续

28、的存储区域中。排在连续的存储区域中。如:在模块如:在模块1 1中有段定义:中有段定义: seg1 SEGMENT PARA STACK stackseg1 SEGMENT PARA STACK stack seg1 ENDS seg1 ENDS 在模块在模块2 2中有段定义:中有段定义: seg2 SEGMENT PARA STACK stackseg2 SEGMENT PARA STACK stack seg2 ENDS seg2 ENDS则连接时这两个段被安排在一起。则连接时这两个段被安排在一起。3636伪指令伪指令ORGORG规定了段内的指令或数据存放的开始规定了段内的指令或数据存放的开始地址地址( (偏移地址的初值偏移地址的初值) ),其格式为:,其格式为: ORG ORG 表表达达式式的的值值即即为为开开始始地地址址,从从此此地地址址起起连连续续存存放放程序或数据。程序或数据。例:例: ABC SEGMENTABC SEGMENT ORG 100H ORG 100H begin: begin: ABC ENDS ABC ENDS ORG3737作业:P193 4.1, 4.2, 4.12, 4.14, 4.15 3838

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号