计算机原理:第三章 汇编语言程序设计1of3

上传人:大米 文档编号:569506348 上传时间:2024-07-30 格式:PPT 页数:29 大小:589KB
返回 下载 相关 举报
计算机原理:第三章 汇编语言程序设计1of3_第1页
第1页 / 共29页
计算机原理:第三章 汇编语言程序设计1of3_第2页
第2页 / 共29页
计算机原理:第三章 汇编语言程序设计1of3_第3页
第3页 / 共29页
计算机原理:第三章 汇编语言程序设计1of3_第4页
第4页 / 共29页
计算机原理:第三章 汇编语言程序设计1of3_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《计算机原理:第三章 汇编语言程序设计1of3》由会员分享,可在线阅读,更多相关《计算机原理:第三章 汇编语言程序设计1of3(29页珍藏版)》请在金锄头文库上搜索。

1、 1第三章第三章 汇编语言程序设计汇编语言程序设计 3.1概述概述 机器语言面向硬件,高级语言面向编程员。汇编语言是最接近机器语言的高级语言。用汇编语言编写的程序称汇编语言源程序。源程序要经过汇编、连接、加载成可执行程序。任何可执行程序可反汇编成汇编语言源程序汇编语言源程序汇编(MASM)机器码LINK可执行程序 2希望汇编具有的功能希望汇编具有的功能1. 一个程序可用多个文件写成2. 存储器地址用一个名字替代且明确类型3.同一地址可具有不同类型且分别以不同名字区别4.能对给出的表达式进行计算5.具有宏功能。 3汇编语言源程序格式汇编语言源程序格式(实验指示书实验指示书P11)NAME MY_

2、PROGRAMNAME MY_PROGRAMDATA SEGMENTDATA SEGMENTBUFFER1DB0,1,2,3,4,5,6,7,8,9,10,11,12DB13,14,15BUFFER2DB10HDUP(0) MESSDBHAVEDONE,0DH,0AH,0DH,0AH,$ DATA ENDSDATA ENDSSTACK SEGMENT STACK SEGMENT STACKSTACK; ;自动安装堆栈段自动安装堆栈段 DB100DUP(?);堆栈深度堆栈深度100B100BSTACK ENDSSTACK ENDS 逻辑数据段逻辑堆栈段 4 CODE SEGMENTCODE SE

3、GMENT ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATA, ,ESES:DATADATA,SSSS:STACKSTACKSTARTSTART: MOV AXMOV AX,DATADATA MOV DS MOV DS,AX ;AX ;建立数据段建立数据段 MOV ESMOV ES,AX ;AX ;数据段数据段, ,附加数据段重合附加数据段重合 LEA SILEA SI,BUFFER1;BUFFER1;源指针源指针 LEA DILEA DI,BUFFER2;BUFFER2;目标指针目标指针 MOV CXMOV CX,10H ;10H ;计数器计数器NEXTN

4、EXT: MOV ALMOV AL,SISI ; ;取源数据取源数据 MOV DIMOV DI, AL, AL ; ;存到目标存到目标逻辑代码段 5 INC SI ; INC SI ;修改源指针修改源指针 INC DI ;INC DI ;修改目标指针修改目标指针 DEC CX ;DEC CX ;计数减计数减 1 1 JNZ NEXT ; JNZ NEXT ;重复传重复传1616字节字节 LEA DXLEA DX,MESSMESS MOV AH MOV AH,9 9 INT 21H INT 21H MOV AH MOV AH,4CH4CH INT 21H INT 21HCODE ENDSCODE

5、 ENDSEND START ; END START ; 汇编结束,第一句执行的语句汇编结束,第一句执行的语句 ; STARTSTART逻逻辑辑代码段(续续);显示提示信息显示提示信息;返回操作系统返回操作系统 6 一、一、纵纵向分成向分成若干若干逻辑逻辑段段, ,段数不限段数不限逻辑段逻辑段 组装成可执行程序的物理段(组装成可执行程序的物理段(4 4个)个)二、横向分四个域:二、横向分四个域:名字名字操作符操作符操作数操作数 ;注释;注释(一)名字名字由字母、数字等组成由字母、数字等组成( (但不能以数字开头但不能以数字开头) )。1.例如例如段名、过程名、模块名、段名、过程名、模块名、 变

6、量名、标号名等变量名、标号名等名字经常表示名字经常表示符号地址符号地址,主要是主要是变量、标号变量、标号 7变量(内存变量)变量(内存变量)定义在定义在数据段数据段(或附加数据段)的名字。(或附加数据段)的名字。 有两方面属性:有两方面属性:地址地址 (段基址和偏移地址)(段基址和偏移地址)内容内容类型类型 (字节(字节1 1/字字2 2/双字双字4 4)( (运算符运算符TYPETYPE) )。在在汇编汇编操作时对变量操作时对变量引用地址,引用地址,在在执行执行指令时对变量指令时对变量引用内容。引用内容。变量变量一般一般都按定义的类型引用。都按定义的类型引用。DT DB 89H, 12H,

7、56H MOV AH, DT ; 即为即为 MOV AH, #; 为直接寻址,为直接寻址, 其其# 为为DT的偏移地址的偏移地址; AH 89H 8标号:(程序标号)标号:(程序标号)定义在程序段(加冒号:)的名字。定义在程序段(加冒号:)的名字。代表一条指令(首字节)的地址。代表一条指令(首字节)的地址。有两方面属性:有两方面属性:地址属性(段基址和偏移地址)。地址属性(段基址和偏移地址)。类型属性(远类型属性(远2/近近1)。)。标号在程序中一般可理解成地址。标号在程序中一般可理解成地址。和标号类似的还有和标号类似的还有过程名:过程名:过程名过程名代表一个完整子程序的第一条可执代表一个完整

8、子程序的第一条可执行指令的地址(入口)。行指令的地址(入口)。 91.指令助记符:指令助记符:在汇编时变成指令的操作码在汇编时变成指令的操作码在执行程序时完成在执行程序时完成(二)操作符(必有)二)操作符(必有)由由指指令令助助记记符符等等构构成成的的操操作作和和操操作作码码一一一一对对应应2.伪指令(伪操作):伪指令(伪操作):指示性操作指示性操作指示指示MASM和和LINK程序工作程序工作在汇编在汇编和和连接连接过程中过程中完成完成伪指令的操作符本身伪指令的操作符本身无机器码无机器码对应对应 103. 宏指令助记符宏指令助记符宏指令宏指令本身不是本身不是CPU原有的指令,原有的指令,用用户

9、户提提前前将将一一段段程程序序(多多条条指指令令、伪伪指指令令)定定义义成一条宏指令成一条宏指令在源程序中将它当一般指令一样在源程序中将它当一般指令一样调用,调用,在汇编时在汇编时展开展开成成原定义的各条指令的原定义的各条指令的机器码机器码。执行程序时逐执行程序时逐条指令条指令完成完成 。 11( (三)操作数(非必须)三)操作数(非必须) 基本操作数,基本操作数,或基本操作数再加上或基本操作数再加上运算符运算符构成的构成的表达式表达式。0个、个、1个或多个,用逗号分隔。个或多个,用逗号分隔。用分号引出的说明语句,不被汇编处理。用分号引出的说明语句,不被汇编处理。建建议议开开始始不不要要用用汉

10、汉字字写写注注释释,以以免免输输入入了了汉汉字的标点,汇编时出错。字的标点,汇编时出错。(四)注释(四)注释 (非必须)(非必须) 123.2 3.2 操作数操作数1. 常数:允许用多种不同数制输入,但汇编后都要变成二进制: 0FFH 1111 1111B 0AH 0000 1010B输入多位BCD数需装扮成装扮成 二进制或十六进制20 0001 0100B= 14H20H 0010 0000B 后者按BCD理解是十进制的20。 字符(包括串)汇编成其 ASCII码 A 41H汇编成 13 MOVSI, 0100H MOV DI, 0114H CLC; (CF) 0 MOV CL, 10 N1

11、: MOVAL, SI MOVBL, 10SI ADC AL, BL DAA MOVDI, AL INCSI INCDI DECCL JNZN1 142. 寄存器:执行指令时引用寄存器的内容例如: IN AL , 40H ADD AL , 3 ;AL内容加3伪指令和汇编运算不能引用寄存器的内容。例如: DT1 DB AL MOV BL, AL1都不行!因为伪指令在汇编时完成,汇编时某寄存器的内容和用户程序执行到这一句时的内容是两回事。 153. 标号:用于表示JMP / CALL / LOOP等的目标4. 变量:汇编时只能取地址(不能取内容)DATA SEGMENTDT1 DB 9,8DATA

12、 ENDS .CODE SEGMENT . MOV AL,DT1 ;汇编后是直接寻址;汇编后是直接寻址 MOV AL , DT1+1 ;汇编时取地址汇编时取地址+1,即等于,即等于DT1下一个单元的地址下一个单元的地址标号和变量合称存储器操作数,有地址、内容两方面的属性:汇编时取地址;执行指令时才能取内容 165. 运算表达式基本操作数再加上运算符 算术运算: + , - , * , / , MOD , SHL , SHR 逻辑运算: AND , OR , XOR , NOT 关系运算: EQ , NE , LT , LE , GT , GE关系运算的结果:为假 = 0 为真 = -1(汇编中

13、)最后以补码赋给reg / mem ( FFH / FFFFH 等) 17 分析运算(提取内存操作数的属性) OFFSET 提取内存操作数的偏移地址 SEG 提取内存操作数的段基址 TYPE 提取内存操作数的类型 LENGTH 取用DUP定义的变量元素的个数 SIZE 取用DUP定义的变量所占字节数 18 指定内存操作数的类型 PTR 指定临时类型(仅当前语句有效)例:DT1 DB 0FFH,3H INC DT1 INC WORD PTR DT1 ; 3FFH+1 = 400H ; 执行后即有,(DT1)=0, (DT1+1)=4 ; 但这一句之外DT1仍是字节类型; 该指令执行后,该指令执行

14、后,; 仅仅(DT1)=0,(DT1+1)不变不变 19 THIS 指定多重类型ARWDW 1340H MOVAX , ARW ; AX=1340HMOVBL , ARB ; BL=40H可以反复用这两个名字,以这两种不同类型读写这一共同的内存区域ARBEQU THISBYTE各种运算符的优先级表P 127 表3.2; 不同的名字占用共同的内存兼有不同的类型; 此处此处THIS与与; 伪操作符伪操作符EQU; 组合完成指定组合完成指定 20多重指定类型举例Hex-table DB 012345678 DB 9ABCDEF .MOV AL, Hex-table ; AL 30H内存变量内存变量-

15、MOV AX, Wrd-table ; AX 3130HWrd-table EQU THIS WORDWrd-table内存变量内存变量 213.3 3.3 伪操作符(伪指令)伪操作符(伪指令)伪操作符在汇编过程中完成,伪操作符在汇编过程中完成,本身无操作码本身无操作码1.变量定义类变量定义类功能功能:定义定义类型:类型:DB、DW、DD分配存储器:确定所用存储器分配存储器:确定所用存储器 赋予变量初值赋予变量初值DATADB100,0FFH变量名字变量名字 伪操作符伪操作符操作数(初值)操作数(初值) 22(1) (1) 基本变量基本变量定义定义DB:定义字节类型变量:定义字节类型变量 DT

16、1DT1DBDB1 1,7 7 DT2DT2DB DB ADFADF一一个个变变量量内内含含多多个个字字节节的的元元素素,多字节顺序排列地址连续。多字节顺序排列地址连续。用途:定义字节类型数值。用途:定义字节类型数值。 定义字符串定义字符串(ASCII(ASCII码)码)变量名变量名3个元素个元素01H07H41H44H46HDT1DT11DT2DT21上一个上一个数据段数据段DT22 23一个变量内可以包含多个一个变量内可以包含多个相同类型相同类型的元素,的元素,元素的类型称元素的类型称TYPE字节字节1、字、字2、双字、双字4.元素的个数称元素的个数称LENGTH变量的总字节数称变量的总字

17、节数称SIZESIZELENGTHTYPE变量名始终指向第一个元素,变量名始终指向第一个元素,变量名变量名1、2是偏移地址加,相加后还是地址,是偏移地址加,相加后还是地址,既不是元素内容加也不是元素下标的加。既不是元素内容加也不是元素下标的加。例如上页中:例如上页中:MOVAL,DT11;AL7,而不是,而不是2MOVAL,DT21;AL44H,而不是,而不是42H 24DB的用途1.定义单字节类型数值 源程序中可写不同进制,汇编后全变为二进制, 多个数值用逗号分隔,顺序存放2.定义字符串 尤其是提示信息 25存储器操作数存储器操作数的引用的引用汇编时只能取存储器操作数存储器操作数地址,汇编运

18、算中对存储器操作数存储器操作数的运算也是地址运算,运算结果一般还是地址。汇编时不能取存储器操作数存储器操作数内容,执行指令时才能取其内容。DT1 DB 9,8 . MOV AL , DT1+1 ; 汇编时取地址+1, ; 执行指令时才能取其内容:AL8 26多重指定类型及地址运算举例Hex-table DB 012345678 DB 9ABCDEF .MOV AL, Hex-table + 10 ; AL 41H-MOV AX, Wrd-table + 10 ; AX 4241HWrd-table EQU THIS WORD Wrd-table Wrd-table+1 27DWDW:定义:定义

19、字字类型变量类型变量 以以字字为为单单位位定定义义,在在存存储储器器中中低低字字节节数数放放在在地地址址较较小小单单元元、高高字字节节数数放放在在地地址址加加1 1单单元元。反反序序排排列!列!DT1 DW 5DT1 DW 5DT2 DW DT2 DW ABAB DW DT1 DW DT1DT1DT1的偏移地址是的偏移地址是00010001050042H41H0100DT1DT11DT2DT21上一个上一个地址地址DT2200010203040506DT23 28DW的用途1.定义双字节类型数值 多个字顺序排列、字内高低字节反序排列 立即数高位的零可以省略不写2.定义定义存储器操作数存储器操作数的偏移地址的偏移地址 存储器操作数可以是变量,也可以是标号。存储器操作数可以是变量,也可以是标号。 29DW、DD不便于定义字符串,每个引号内不能多于2个字符,而且2个字符是反序。1.1.以双字为单位定义数值以双字为单位定义数值2.2.定义定义存储器操作数存储器操作数的偏移地址和段基址的偏移地址和段基址例:例:P129页页TOTALDDTABLEDD的用途DDDD:定义:定义双字双字类型变量类型变量多个双字顺序排列、双字内4 4个字节反序排列!个字节反序排列!立即数高位的零可以省略不写ABDD DD AB; 存入存入 42H, 41H, 00H, 00H

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

最新文档


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

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