第四章-汇编语言程序设计---北京大学微处理器研究开发中心

上传人:小** 文档编号:45848573 上传时间:2018-06-19 格式:PPT 页数:79 大小:406.52KB
返回 下载 相关 举报
第四章-汇编语言程序设计---北京大学微处理器研究开发中心_第1页
第1页 / 共79页
第四章-汇编语言程序设计---北京大学微处理器研究开发中心_第2页
第2页 / 共79页
第四章-汇编语言程序设计---北京大学微处理器研究开发中心_第3页
第3页 / 共79页
第四章-汇编语言程序设计---北京大学微处理器研究开发中心_第4页
第4页 / 共79页
第四章-汇编语言程序设计---北京大学微处理器研究开发中心_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《第四章-汇编语言程序设计---北京大学微处理器研究开发中心》由会员分享,可在线阅读,更多相关《第四章-汇编语言程序设计---北京大学微处理器研究开发中心(79页珍藏版)》请在金锄头文库上搜索。

1、第7章 汇编语言的基本语 法Assemble Languagen一种面向机器的程序设计语言,是一种用符号 表示的低级程序设计语言(机器语言的符号化 描述),通常是为特定计算机或计算机系列专 门设计的。Assemble Languagen用汇编语言编写的程序 不能由机器直接执行, 而必须经汇编程序翻译 成机器语言程序。汇编 语言指令与翻译成的机 器语言指令之间基本是 一一对应的关系。n汇编过程示意:n采用汇编语言进行程序设计的优点:n可充分利用机器的硬件功能和结构特点,加快程序的执 行速度,减少目标程序所占用的存储空间。n常用来编写实时控制程序、实时通信程序,有时也用来 编制某些系统软件程序。缺

2、点: 1. 编程效率低(与人们描述计算过程的需要差距大);2. 与机器硬件的具体结构联系过于紧密在一种结构的机器上开发的程序极难移植到另一 种不同结构的机器上去。示例程序DATA SEGMENT ;数据段 NUM DW 0011101000000111BNOTES DB The result is : , $ DATA ENDS CODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATABEGIN:MOV AX, DATA MOV DS,AXMOV DX,OFFSET NOTES ;显示提示信息MOV AH,9HINT 21HMOV BX,NUM ;将数装入BXMOV CH

3、,4 ;CH作循环计数器示例程序(续)ROTATE : DISPLAY: MOV CL, 4 ;CL中放移位位数 MOV DL, AL ;显示16进制数ROL BX,CL MOV AH,2 MOV AL,BL INT 21H AND AL,0FH ;AL中为一位16进制数 DEC CHADD AL,30H ;转换为ASCII码值 JNZ ROTATECMP AL,9 ;是09的数码? MOV AX,4C00H;返回DOSJLE DISPLAY INT 21HADD AL,07H ;在AF之间 CODE ENDS ;代码段结束END BEGIN ;模块结束堆栈段定义格式STACK SEGMENT

4、 STACKSTA DB 50 DUP (?)TOP EQU LENGTH STA STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS, AXMOV SP,TOP: CODE ENDSEND START 7.1.2 汇编语言源程序的组成1. 伪指令语句和指令语句汇编语言源程序中除了包含真正的指令外,还应包含说 明性的“指令”。这些说明性的“指令”是面向汇编程序和连 接程序的,称为伪指令。宏汇编程序5.0版(MASM V5.0)规定,汇编语言源程序的

5、 每行只能写一个语句: 指令语句或伪指令语句。行长不 能超过128个字符。每个语句最多可由四个字段组成: 名字字段、操作字段、操作数字段和注释字段。 伪指令语句是说明性语句,其格式为: 名字伪指令说明符参数表达式1,参数表达式2, ;注释其中,伪指令说明符(伪指令名)是伪指令语句中不可缺 少的主体,其余部分(方括号中的内容)有时可省略。名字可为段名、过程名、变量名、符号名(或常量名)、 宏名、结构名、记录名等。例: A DB 20H,30H ; 注释指令语句是可执行语句,其格式为:名字:指令操作助记符操作数表达式1,操作数表达式2;注释 其中,指令操作助记符(指令名)是指令语句中不可缺少 的主

6、体,其余部分(方括号中的内容)有时可省略。名字只能是标号。 注释以分号开头,分号右边的内容将被汇编程序忽略。例 L: ADD AX,BX ;注释 汇编程序负责计算伪指令语句中表达式的值,解释伪指 令语句的含义并遵照“执行”,但并不产生机器代码。汇编程序负责计算指令语句中表达式的值,并将汇编指 令翻译成机器指令代码。指令语句经汇编后,在可执行程序运行期间由CPU解释 ,并由CPU按指令的要求完成各种运算与操作。7.1.4 汇编语言的表达式1. 汇编语言的标识符 2. 汇编语言的操作对象( 数据类型) (1) 常数、常量编程时已经确定其值,程序运行期间不会改变其值的数 据对象称为常数。8086/8

7、088CPU允许定义四种形式的常数: 整数、字符 串、“组合BCD码数”和实数(浮点数),但只能处理整数 、字符串、“组合BCD码数”,不能处理实数(浮点数)。 常数表达式的名字称为常量。(程序员给出的一个名或助记名作为一个确定值的标识 , 其值在程序执行过程中保持不变。)常量可用伪指令说明符“EQU”或“=”定义。例如,A EQU 7或 A = 7都可将常量A的值定义为常数7 。注意:伪指令说明符EQU左边的符号名不允许重复定义 ,而“=”左边的符号名可以重复定义。即,A EQU 7 可以:A=7 A EQU 8 (不允许) A=8(2) 变量编程时只能确定其初始值,程序运行期间可修改其值的

8、 数据对象称为变量。变量是存储单元中的数据,可定义 在任何段(DS、 ES、 SS、 CS),但通常都定义在数据 段(DS)和附加段(ES)。变量由伪指令说明符DB、DW、DD等定义。需要时可 给变量的地址取名字,变量名就是变量地址的名字,可 称为变量的符号地址。n例如, 在下列伪指令语句中,A DB 50,60,70,80DW 50,60,70,80DD 50,60,70,80n用DB、DW、DD说明符各定义了4个变量,并给出了每 个变量的初始值。n用DB定义的每个变量占一个字节单元,用DW定义的每 个变量占两个连续的字节单元,用DD定义的每个变量 占四个连续的字节单元,这些变量全部都按定义

9、时的顺 序依次存储,只是用DB定义的第一个变量赋予了名字A 。nA仅代表DB右边第一个变量(即DB右边初值为50的变量 )的地址。变量有如下的属性: 段基值属性: 指变量所在段的段基值;偏移地址属性: 指变量所在的存储单元的段内偏移地 址;类型属性: 指变量所占存储单元的字节数。(3) 标号n标号就是指令地址的名字,也称为指令的符号地址。n标号定义在指令的前面(通常是左边),用冒号作为分隔 符。标号只能定义在代码段(CS)中,它代表其后第一条 指令的第一个字节的存储单元地址,用于说明指令在存 储器中的存储位置。例如, 在下列指令序列中,MOV CX, 2L:DEC CXJZ LnL就是标号,它

10、是JZ指令的直接操作数(转移地址).标号有如下的属性: 段基值属性: 指标号后面第一条指令所在的代码段的 段基值; 偏移地址属性: 指标号后面第一条指令首字节的段 内偏移地址; 类型属性: 也称距离属性,是指标号与引用该标号 的指令之间允许距离的远、近。(4) 段名每一个段都必须用SEGMENT和ENDS标识段的开始和 结束,SEGMENT和ENDS左边必须有名字,段名就是 SEGMENT和ENDS左边的名字。对于同一个段,ENDS左边的名字必须与SEGMENT左 边的名字相同。(5) 过程名n过程就是一段程序,可以是主程序,也可以是子程序。 一个代码段中可以只有一个过程,也可以有多个过程。n

11、每一个过程都可用PROC和ENDP标识过程的开始和结 束,PROC和ENDP左边必须有名字,过程名就是 PROC和ENDP左边的名字。n对于同一个过程,ENDP左边的名字必须与PROC左边 的名字相同。n过程名等同于标号,具有标号的全部属性。过程(子程序)的基本结构Proc-A PROC NEAR(或FAR)_ 过程名 _ ._RETProc-A ENDP(6) 偏移地址计数器$汇编程序在对源程序进行汇编的过程中,用偏移地址计 数器$来保存当前正在汇编的指令的偏移地址或伪指令 语句中变量的偏移地址。用户可将$用于自己编写的源程序中。在每个段开始汇编时,汇编程序( 汇编器)都将$清为0 ,以后,

12、每处理一条指令或一个变量,$就增加一个值 ,此值为该指令或该变量所占的字节数。可见,$的内容就是当前指令或变量的偏移地址。n在伪指令中,$代表其所在地的偏移地址。例如,如果A 的偏移地址是0074H,则语句nA DW 1, 2, $+4, 3, 4, $+4 中的第一个$+4的偏移地址为 A+4,第二个$+4的偏移地址为A+10。n汇编后:n第一个$+4:$+4=(A+4)+4=(0074H+4)+4=007CHn第二个$+4:$+4=(A+10)+4=(0074H+0AH)+4=0082Hn在指令中,$无论出现在指令的任何位置,都代表本条 指令第一个字节的偏移地址。例如,“JZ $+6”的转

13、向地 址是该指令的首地址加上6,$+6还必须是另一条指令的 首地址。再如,在下述指令序列中,DEC CXJZ $+5MOV AX, 2LAB: .n因为$代表JZ指令的开始地址,而JZ指令占2个字节,这 里的MOV 指令占3个字节,所以,在发生转移时,JZ指 令会将程序转向LAB标号处的指令, 且标号LAB 可省。3. 汇编语言的伪操作(运算)符n汇编语言中的操作符号很多,可分为算术操作符、逻辑 操作符、关系操作符、重复置数(复制)操作符、取属性( 分析)操作符、指定属性(合成)操作符、分离操作符、结 构和记录中专用的操作符等几类。n这些操作符都是面向汇编程序的,都由汇编程序解释并“ 执行”,

14、而不是像指令那样由CPU去执行。n通常称这些操作符为伪操作符,称对应的操作为伪操作。(1) 算术伪操作n常见的有+、-、MOD、SHL、SHR、*、/共7个符号, 分别表示加、减、取模(求余数)、逻辑左移、逻辑右移 、乘、除。这些操作符都可用于数据之间的运算,+、- 操作符还可用于地址之间、数据与地址之间的运算。n 用于数据之间的运算时,按每个操作符的定义进行。例如,在字节操作时,n“124 MOD 3”的结果为1n“10110101B SHL 2”的结果为11010100Bn再例如,对如下的定义,W1 DW 1, 2, 3, 4, 5, 6, 7B1 DB 10, 20, 30, 40, 50N1 EQU B1-W1N2 EQU $-W1B2 DB 0n则N1=14,它是从W1开始到B1前为止的一组变量的字 节数;nN2=19,它是从W1开始到B2($代表的地址)前为止的一 组变量的字节数。(2) 关系伪操作n关系伪操作对两个数据进行比较,有EQ、NE、LT、GT 、LE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

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