微机原理 第四章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
③ 表达式及运算符 <5> 综合运算符
• 综合运算符为存储器地址操作数临时指定一个新 的属性,而忽略当前原有的属性,因此又称为属 性修改运算符。
PTR 原操作数”,新操作数的类型为表 ARY1 DB―新类型 0,1,PTR 2,3, 4 ;定义字节变量 达式中指定的“新类型” ,新操作数的段基址和偏移量与“ ARY2 DW 0,1,2,3, 4 ;定义字变量 原操作数”相同。 MOV BX ,WORD PTR ARY1[3] ;将0403H→BX UNIT DW―THIS 10 DUP(?) THIS 新类型”,类似PTR,不同的是:新操作 MOV WORD PTR [SI],4 ;将 0004H 送至SI开 数的段基址和偏移量为汇编过程中遇到 THIS 运算符时的当 UNIT1 EQU THIS BYTE 始的字单元中 前值, 和的类型为字节,它对应的是 THIS可以完成同样的功能,但 THIS 出现在 新变量PTR UNIT1 UNIT 单元后第 伪指令 EQU的操作数段中重新定义一个名字,而 PTR出现 20个字节单元,即变量 UNIT1和UNIT的段基址相同,偏 在指令的操作数段改变操作数的地址类型; 移量有如下关系: SHORT ―SHORT Near-label‖,表达式代表的新标号的 OFFSET UNIT1=(OFFSET UNIT)+(SIZE UNIT) 类型为SHORT, SHORT一般出现在跳转指令的操作数段 ,表示进行短跳转(-128 ~ +127字节);
• 赋值语句EQU COUNT EQU CX ; 用COUNT代替CX通用寄存器
M
EQU MOV ; 用M代替MOV指令助记符
例 “$‖ 与EQU结合使用 BUF DW ?, ? 字节的内存空间 SUM DD ? 字节的内存空间 ; 定义两个字变量,共占用4个 ; 定义一个双字变量,占用4个
NO EQU $-BUF ; NO表示当前内存单元与BUF 单元之间的“距离”,NO等同于立即数“8‖,不占内存 空间
③ 表达式及运算符 <2> 逻辑运算符—— AND、OR、XOR、NOT • 逻辑运算符在两个操作数之间按位进行二进制布 尔运算,结果产生确定的数值 • 逻辑运算符与逻辑指令助记符形同意不同
例:
AND BL, 46H AND 0FH
; 汇编后得到 “ AND BL, 06H ‖ 的目
标码
③ 表达式及运算符 <3> 关系运算符—— EQ、NE、GT、 LT、 GE 、 LE
DT —— 变量为10字节数据类型(80位)
2. 数据定义伪指令
ONE DB 8 ; 给变量ONE分配一个字节,并预 置初值为8 TWO DB ? ; 字节变量TWO初值不定 ST DB 96, 20, ?, -57 分配4个字节的存储单元 STR DB ‗How are you ? $ ‘ TWIN DB 5 DUP( 0FFH ) 节,初值均为0FFH ; 以ST为首址连续 ; 定义字符串 ;连续分配5个字
微机原理及接口技术
教师:王茜 邮箱:wqwypmyhww@yahoo.com.cn
第4章 80x86汇编语言程序设计
本章重点:
·了解汇编语言的基本语法规则及其使用方法; ·掌握伪指令语句的格式、类别及功能; ·掌握8086/8088汇编语言程序设计。
本章难点:
·汇编语言语句中使用的各种操作数、表达式、运算
GO_ON1 LABLE FAR GO_ON: …… GO_ON1 EQU THIS FAR GO_ON: …… GO_ON: ……
JMP GO_ON
…… JMP GO_ON1
JMP GO_ON
…… JMP GO_ON1
JMP GO_ON
…… JMP FAR PTR GO_ON1
4. 段定义伪指令SEGMENT / ENDS 组合方式:表示与其它段的关系,为连接程序提供信息,可以有 6种选择:
2. 数据定义伪指令 例:试计算下列伪指令中各变量所分配的存储单元字 节数和总共占据的存储空间 X1 DW 20 X2 DW 8 DUP(?),10,20 X3 DD 10 DUP(?) X4 DB 3 DUP(?,4 DUP(0)) X5 DB ‘HAPPY NEW YEAR!!‘
3. 符号定义伪指令
• 两个操作数必须同是数值或同是一个段内的两个 存储器地址 • 若关系满足则返回全1,否则返回全0。
例: MOV AX, 0A2H NE 02H ; 汇编后得到 “ MOV AX, 0FFFFH ‖ 的目标码
例: MOV AX,10H GT 16
ADD
BL, 6 EQ 0110B
MOV CX,((PORT LT 5)AND 100) OR ((PORT GE 5)AND 111) 汇编时,形成指令: MOV AX, 0
DB 100 DUP( ? ) ;连续分配100个字节单元,初 值不定
2. 数据定义伪指令
DATA SEGMENT ARE1 DB 20H,30H ARE2 DW 2030H ARE3 DB ‗A‘,‘B‘ ARE4 DW ‗AB‘ DATA ENDS 请画出相应的存储器 图
ARE1 20H
30H ARE2 30H 20H ARE3 41H 42H ARE4 42H 41H
4.2.3 语句的构成与规范 ·操作数 ① 常数 可以用二进制(B)、十进制、十六进制(H)、八 进制(Q)、串常数(用单引号括起来的字符串) ②标号和变量 标号是指令语句的符号地址 变量通常是指存放在某些存储单元中的数据,这些数 据可以被程序改变。对变量的访问是通过变量名实现 的。
③ 表达式及运算符 <1> 算术运算符—— +、-、*、/、MOD、SHL、 SHR
4.3 伪指令及其应用
名字 定义符 操作符 ;注释
伪指令语句即不是真正的指令语句,它是CPU不执行 的语句。在汇编后它本身不产生目标代码,只为汇编 程序提供汇编时所需要的控制信息。伪指令的操作 (称作伪操作)在汇编过程中完成。
4.3.1 常用伪指令 1. 处理器方式伪指令 用于设置CPU指令系统类型 格式:-处理器名称
• 数值表达式中可使用所有算术运算符 • 地址表达式仅使用‘+、-‘算术运算符 • 算术运算符不影响标志位
例:完成80H+90H 解:MOV AL,80H+90H ;使用数值表达式 ;(AL)=10H、CF=不变 用以前的知识完成! MOV AL,80H ;使用加法指令
ADD AL,90H ;(AL) = 10H、CF = 1
3. 符号定义伪指令
• 等号语句 = PP = 89FAH PP = PP+1 ;PP = 89FBH
等号语句与赋值语句:
相同点 : 符号而非变量,故用EQU、= 定义的符号 不占用存储器单元 区别 : 等号语句可以在同一源程序中重复定义符号 而无需解除
3. 符号定义伪指令
• 定义符号名语句 LABEL 格式: 标号 LABEL 类型 注: - 可以用于使被定义的标号具有NEAR或FAR的 类型; - 与运算符PTR和THIS的功能相同:
4.2 宏汇编语言程序 的规范
4.2.3 语句的构成与规范
[名字] 指令助记符 [操作数] [;注释]
• 名字:名字由字母开头的字符串组成。指令语句 中的名字后跟冒号,而伪指令语句中的名字之后不 跟冒号。 • 助记符:由保留字组成,是语句中不可缺少的部 分。包括指令助记符和伪指令助记符。 • 操作数:表示操作符操作的对象,并说明要处理 的数据存在什么位置以及如何访问该数据。 • 注释:对汇编不起任何作用,不对应于任何机器 码,仅增强源程序的可读性。
SIZE 取分配给变量的字节个数
CSEG SEGMENT BUFF DW 10DUP(1234H),10H,00H COUN DD 12345678H CSEG EDNS
则: SEG BUFF = CSEG OFFSET BUFF = 0 TYPE BUFF = 2(字) LENGTH BUFF = 10 SIZE BUFF = 10*2 = 20 HIGH 12A0H = 12H LOW 12A0H = 0A0H SEG COUN = CSEG ;段基址 OFFSET COUN = 24 ;偏移量 TYPE COUN = 4(双 ;类型 ;单元个数 LENGTH COUN = 1 SIZE COUN = 4 ;字节数 ;高字节 ;低字节
ADD
BL, 0FFH
MOV CX, 100 ;若满足PORT<5,则 PORT LT 5 逻辑取值为真, PORT GE 5逻辑取 值为假,即 (全1 AND 100)OR (全0 AND 111) 100 OR 全0
;若满足PORT>5或PORT = 5 ,应该怎么样?
③ 表达式及运算符 <4> 分析运算符
• 用于对 DS、ES、SS、CS 段的定义
NONE:本段与其它段逻辑上不发生关系,每段都有自己的基地 • 语句格式 址(缺省选择)。 段名 SEGMENT [ 定位类型 ] [ 组合方式 ] [ ‗类别名’] PUBLIC:连接程序首先将本段与其它同名同类别的段相邻地连 …… 接在一起,然后为所有这些 PUBLIC段指定一个共同的段基址。 段名 ENDS 连接的先后次序由连接命令指定。 STACK :与PUBLIC 同样处理,但此段作为堆栈段, •类别名:给各段的名字信息,连接程序将类别名相同的段 ENDS 必须与SEGMENT 成对出现,且段名必须一 定位类型:规定段的起始边界,有 4种选择: SS指向第 一个STACK 段。 致。 组成一个段组用它们共同的名字作为这个段组的名字。类 PAGE:段起始地址的最低8位必须为0。 COMMON :本段与其它同名同类别段重叠,段基址与最后定义 别必须用单引号括起来。 PARA:段起始地址的最低4位必须为0。 的相同,长度为同名段中最大段的长度。 例如: STACK SEGMENT PARA STACK ‗STACK‘ WORD:段起始地址的最低1位必须为0,即从偶地址开始。 AT表达式:连接程序把本段装在表达式值所指定的段地址(此 BYTE:段起始地址为任意值,即从任何地址开始都行。 方式不能指定代码段)。 缺省类型为 PARA。 MEMORY :同PUBLIC 连接程序将本段定位在被连接在一起的 其它所有段之上。
符、操作符;
·汇编语言程序设计。
第四章 80X86汇编语言程序设计
4.1 汇编语言和汇编程序 使用汇编语言编写的程序
汇编语言源程序 高级语言源程序
汇编(可由汇编程序 完成) 编译或解释 (可由编译程序完成)
机器语言程序 (目标代码)
完成汇编任务的程序(ASM) 为了能顺利完成汇编,用户 把汇编语言源程 必须为汇编程序提供一些与 序经过翻译,则 硬件有关的信息,如:程序 可得到机器语言 使用的变量应分别存放在内 程序 存的哪个单元、堆栈应从内 存的什么地址开始等等。
4.2.3 语句的构成与规范
几点注意: ·名字的命名规则: 以字母开头,由大写字母A~Z小写字母a~z(汇编 程序不区分大小写)、数字(0~9)及4个特殊 字符(?、@、$、和_等)组成 字符串长度不能超过31个字符
命名不能使用汇编语言中的保留字
4.2.3 语句的构成与规范
几点注意: ·操作数 如果是两个操作数,中间用逗号隔开 操作数的形式可以有:常数、寄存器名、标号、 变量和表达式
通常,该伪指令置于整个汇编语言源程序的开头 ,用以设定源程序的指令系统类型。
2. 数据定义伪指令 用于定义一个变量的类型,给存储器赋值,或者仅给 变量分配存储单元而不需赋值。 DB —— 变量为字节数据类型(8位) DW —— 变量为字数据类型(16位)
DD —— 变量为双字数据类型(32位)
DQ —— 变量为4字数据类型(64位)
来自百度文库
• 对单个操作数进行属性分解,分别返回不同属性 的值 SEG 取变量或标号所在段的段寄存器值作为段 基址,结果为16位值
OFFSET 取变量或标号的段内偏移量,结果为16 位值 TYPE 取分配给变量或标号的类型 LENGTH 取分配给变量的基本单元个数
LENGTH和SIZE仅对数组变量有意义。 --------作为操作数的变量应用 DUP()进行定 义,否则结果为1。