第五章汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目标程序
第五章汇编语言程序设计
● 汇编语言是一种采用助记符表示的程序设计语言,即用助记符来表示指令的操作码和操作数,用符号或标号代表地址。
● 使用汇编语言编写的程序称作汇编语言源程序。汇编语言源程序不能由机器直接执行而必须翻译成由机器代码组成的目标程序,这个过程称为汇编。
● 把汇编语言源程序翻译成目标程序的软件称为汇编程序。
汇编过程的含义如图:
5.1宏汇编语言的基本语法
1、常数、变量和标号
常数、变量和标号是汇编语言能识别的数据项,是指令和伪指令语句中操作数的基
本组成部分,其大小和属性与机器语言代码生成有直接关系。
一、常 数
常数是没有任何属性的纯数值。在汇编期间,它的值已经完全确定,而且在程序的
运行中也不会发生变化,它可以有以下几种类型:
(1) 二进制数:
以字母B 结尾的由一串“0”和“1”组成的序列。例如:0010110B
(2) 八进制数:
以字母O 或Q 结尾,由若干个0到7的数字组成的序列。例如:255Q 、377Q
(3) 十进制数:
由若干个0到9的数字组成的序列,可以以字母D 结尾,也可以省略字母例如:1234D
或1234 。
(4) 十六进制数:
以字母H 结尾,由若干个0到9的数字和字母A 到F 组成的序列,且必须以数字开
头。例如: 56H,0B3FH
(5)字符串常量:
用引号括起来的一个或多个字符。这些字符以ASCII 码形式存在内存中。
例如:‘A’的值是41H, ‘ B’的值是42H
二、变 量
变量通常是存放在某些存储单元的数据,这些数据在程序运行期间可以修改。变量
使用数据定义伪指令DB 、DW 、DD 等定义的。
经过定义的变量,每个变量均有三个属性:
(1) 段属性(SEGMENT )
表示变量存放在哪一个逻辑段中(即变量所在段的段地址)。
(2)偏移属性(OFFSET)
表示变量的偏移地址,即在逻辑段中距段的起始点的字节数。
(3)类型属性(TYPE)
表示变量占用存储单元的字节数。用DB定义的变量类型属性为字节;用DW定义的变量类型属性为字(2字节);用DD定义的变量类型属性为双字(4字节)
三、标号
标号表示一条指令所在的地址,所以标号也是指令语句的地址符号,常用作转移指令(包含子程序调用指令)的操作数,即目标地址。
标号通常由字母数字串组成,但第一个字母必须为字母。
标号有三种属性:
(1)段属性(SEGMENT)
表示标号所在段的段基址。
(2)偏移属性(OFFSET)
表示标号的偏移地址,即标号地址在逻辑段中距段的起始点的字节数。
(3)距离属性(或类型属性TYPE)
表示标号作为段内或段间的转移属性。
距离属性分为两种:
A、NEAR(近)
表示本标号只能被标号所在段内的转移和调用指令访问(即段内转移)
B、FAR(远)
表示本标号可以被其他段(不是标号所在段)的转移和调用指令访问(即段间转移)2、表达式与运算符
8086宏汇编语言允许使用的表达式有两种类型:
数值表达式只产生数值结果
它所产生的结果是一个存储器地址,如果这个地址存放的是
数据,一般称它为变量,如果存放的是指令,一般称它为标地址表达式
号。
运算符主要包括以下6种类型:
(1)算术运算符
包括加(+)、减(-)、乘(*)、除(/)、求余数(MOD)、左移(SHL)和右移(SHR)注:除了加和减法运算符可以使用变量和符号外,其他运算符只适用于常数的数值运算。
[例5-1] CONT = 15*4 ; CONT =60
CONT = CONT /8 ; CONT =7
CONT = CONT MOD 3 ; CONT =1
MOV AL, 21H SHL 2 ; AL = 84H
(2)逻辑运算符
包括按位操作的与(AND)、或(OR)、异或(XOR)、和非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。
注:AND、OR、XOR和NOT也是指令助记符。
[例5-2] AND DX, PORT AND OFEH
其中第二个AND是逻辑运算符,在程序汇编时,计算PORT AND OFEH 产生一个立即数作为指令操作数。而第一个AND是指令助记符,在汇编以后执行AND指令,
DX的内容与上述立即数相“与”,结果放在DX中。
(3)关系运算符
包括EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或大于)、GE(大于或等于)共六种。
[例5-3] MOV BX, PORT LT5
若PORT的值小于5,则汇编程序把上条指令汇编为:MOV BX,OFFFFH; 否则被汇编为:MOV BX,0。
[例5-4] MOV BX, ((PORT LT 5) AND 20) OR ((PORT GE 5) AND 30)
此例中当PORT 的值小于5时,执行MOV BX,20 否则执行MOV BX,30。(4)分析操作符(数值返回运算符)
A、取地址的偏移量
格式:OFFSET 变量名或标号
功能:取变量名或标号所在段的段内偏移量。
B、取段基址
格式:SEG 变量名或标号
功能:取变量名或标号所在段的段地址。
C、求变量名或标号的类型值
格式:TYPE 变量名或标号
功能:返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距离属性;返回的数值与性的关系表4-1。
D、求长度
格式:LENGTH 变量名
功能:返回一个变量名所占的存储单元(字节、字或双字)的数目。如果变量使用重复定义子句说明的,则返回DUP前面的数值;若没有DUP明,则返
回值总是1。(例5-5,P121)
E、求大小
格式:SIZE 变量名
功能:返回变量名所占存储单元的字节数,它等于LENGTH和TYPE两个运算符返回值的乘积。
[例5-6]上例中SIZE BUF1 = 100
SIZE BUF2 = 200
SIZE BUF3 =0
(5)综合运算符
A、PTR 运算符
格式:类型PTR 表达式
功能:用于指出变量、标号或地址表达式的类型属性,新的类型只在当前指令内有效。
[例5-7] MOV BYTE PTR [DI],4 ; 指明目的操作数为字节类型
JMP DWORD PTR [BP] ; 指明目的操作数为双字节类型;(即指明转
移操作为段间转移
B、THIS 运算符
格式:THIS 类型
功能:把它后面指定的类型或距离属性赋给当前的变量、标号或地址表达式。