微机原理8086汇编程序设计.ppt
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV BL,05H OR 30H
;35H→BL
MOV CX,NOT 00FFH
;0FF00H→CX
MOV DX,789AH XOR 000FH
;7895H→DX
13/),不等(NE),小于(LT),大于(GT), 小于等于(LE)及大于等于(GE)。
•运算结果成立时逻辑值为真,用0FFFFH表示;
汇编程序不区分大小写
3/96
汇编语言语句统一格式规定
指令性语句、伪指令语句和宏指令语句的统一格式:
[名字项] 操作项 [操作数项] [;注释项]
1.名字项:最多由21个字符组成。可由下列字符组成。
①字母A~Z、a~z
②数字0~9
③特殊符号?、·、@ 、- 、$等
注意:
➢ 名字项的第一个字符不可以是数字,必须是字母或特殊字
符,但是问号本身不能单独作为名字;
➢ 如果用到特殊符号,则它必须是首字符。
➢ 汇编语言的专用保留字、寄存器名、8088/8086汇编语言中
的指令助记符、伪指令名、表达式中使用的运算符和属性
运算符等均不能作为名字项,否则汇编会给出错误信息;
➢ 名字项在程序中不能重复定义。
4/96
名字项属性
(1) 段属性:可用SIG伪指令求出 此属性用于定义标号和变量的段起始地址。标号通常在代码 段CS中定义,变量通常在DS、ES和SS段中定义。
2 DATA SEGMENT;
数据段
┇
3 DATA ENDS ;…………………………………堆栈段说明 4 STACK SEGMENT PARA STACK′STACK′;堆栈段
┇
5 STACK ENDS
;……………………………………………………………代码段说明
6 CODE SEGMENT
;代码段
7 START PROC FAR ; 远过程调用定义
18/96
(5)综合运算符
① 段属性前缀运算符“∶” 格式为: 段寄存器名∶地址表达式 或 段名∶地址表达式 或 组名∶地址表达式 此运算符用来表示一个标号、变量或地址表达式的段属性。 【例】用段前缀指定附加段内操作数的地址 MOV AL,ES∶DATA
;指令源操作数在附加段DATA地址单元中 19/96
MOV BX,SEG DBUF 汇编为: MOV BX,2300H
16/96
② OFFSET 运算符
•格式:OFFSET 变量或标号 •功能:分离出其后变量或标号的偏移地址。 【例】已知标号START的段地址为2100H,物理地址为 21200H。 MOV DX,OFFSET START 汇编为: MOV DX,0200H 这条指令与指令 LEA DX,START功能相同。
•关系不成立时逻辑值为假,用0表示。
【例】用关系运算符进行数值表达式运算。
NUM1
EQU 10 LT 5 ;NUM1=0
NUM2
EQU 0AAAAH GT 7FFFH
;NUM2=0FFFFH
MOVAX,‘A‘ EQ 41H ;0FFFFH→AX
MOV BX,NUM2 LT NUM1 ;0→BX
14/96
(2)表达式及运算符
表达式由常数、寄存器、标 号、变量与一些运算符组合 而成,分为数字表达式和地 址表达式。汇编过程中,汇 编程序按照一定的优先规则, 对表达式进行计算后得到一 个数值或地址,用作指令的 操作数。
•算术运算符 •移位运算符 •逻辑运算符 •关系运算符 •分析运算符 •综合运算符
10/96
MOV AL , LOW RESULT
汇编为: MOV AL,88H
20/96
表达式及运算符小结
本节介绍了几种常用的运算符。为了正确计算表达式的 数值,应该按照运算符的优先级:
先高后低、自左向右(优先级相同时)地进行计算。括 号内的表达式应优先计算。
下面给出相关运算符 从高到低的优先级排列顺序:
21/96
表达式及运算符小结
1. (在圆括号中的项),[方括号中的项],〈结构变量 高 (变量、字段)〉
2. LENGTH,SIZE、WIDTH和MASK
3. PTR,OFFSET,SEG,TYPE,THIS及段运算符
4. HIGH和 LOW
5. *,/,MOD,SHL(左移),SHR(右移)
6. +,-
7. EQ,NE,LT,LE,GT,GE
8 ASSUME CS∶CODE,DS∶DATA,ES∶DATA,SS∶STACK
➢算术运算符和移位运算符
•算术运算符: +(加)、-(减)、*(乘)、/(除)、MOD(求模) •移位运算符: SHL(左移)、SHR(右移) •可以用于数值表达式又可用于地址表达式。
11/96
【例】 算术和移位运算符进行数值表达式运算
┆ NUM1 EQU 25*4 –50 ;NUM1=50 NUM2 EQU NUM1 / 7 ;NUM2=7 NUM3 EQU NUM1 MOD 7 ;NUM3=1 NUM4 EQU 0FH
┆ MOV AL,NUM4 SHL 4 ;(AL)=11110000B
12/96
➢逻辑运算符
•与(AND)、或(OR)、异或(XOR)、非(NOT)四种运算。
•由于逻辑运算是按位操作,且在汇编过程中完成,因而运算的结果 仍为整数常量。
【例】 用逻辑运算符进行运算。
MOV AL,34H AND 0FH ;04H→AL
.286 选择 80286 指令系统
.286P 选择保护模式下的 80286 指令系统
.386 选择 80386 指令系统
.386P 选择保护模式下的 80386 指令系统
.486 选择 80486 指令系统
.486P 选择保护模式下的 80486 指令系统
.586 选择 Pentium 指令系统
.586P 选择保护模式下的 Pentium 指令系统
确后,再把这些指令解冻或删除,这样可减少语句增、 删的编辑工作。
23/96
MOV CX,0 ;传送指令,具有2个操作数 DELAY: NOP ;空操作指令,没有操作数,带有标号
LOOP DELAY ;循环指令,标号DELAY说明转移位置 BUFFER DB 1,2,3,4,5,6,7
;数据定义伪指令,在主存中开辟7个连续的字节单元, 初值依次为1~7,BUFFER表示首地址
24/96
本节小结
• 汇编语言指令格式
[名字项] 操作项 [操作数项] [;注释项]
• 标号和变量的属性:
段属性、偏移属性、类型属性
• 操作数的表达形式
算术、移位、逻辑、关系、属性、综合运算符
首页 25/96
二、汇编语言伪指令
• 伪指令:在汇编程序对源程序汇编期间由汇编程序处理
的操作(不是真正执行的指令),可以完成处理器选择、 定义程序模式、定义数据、分配存储区、指示程序结束等 功能。
28/96
2.段定义伪操作
• 源程序分别用两种格式书写 ❖第一种格式从MASM 5.0开始支持
– 简化段定义格式
❖第二种格式MASM 5.0以前就具有
– 完整段定义格式
程序功能
Hello, Everybody !
29/96
完整段定义伪操作基本格式(1)
1 ;EXAMPLE5.42 ;程序注释
;…………………………………数据段说明
17/96
③ TYPE运算符
•格式:TYPE 变量或标号 •功能:分离出其后变量或标号的类型。如果是变量,将 返回该变量的类型对应字节数;如果是标号,则返回代 表标号类型的数值。它们之间的关系见下表所示。
【例】已定义 ARRAY DB 22,33
指令 ADD SI,TYPE ARRAY 汇编为: ADD SI,1
SUB DH,22 ;常数22为立即数,汇编后为16H
MOV BX,[SI十32H] ;常数32H作位移量
DB 12H
;定义一个字节数据
DW 1234H
;定义一个字数据
DD 12345678H ;定义一个双字数据
DB ′ 9BD′ ;定义三个字节的字符串数据,在 内存中就是39H、42H、44H
9/96
序运行时保持不变。分为数值常量和字符型常量。
各种形式数字常量格式对照表
7/96
字符串常量
•字符串常量是用单引号或双引号引起来的一个 或多个字符。字符串常量是以各字符的ASCⅡ码 表示的。如‘A’用41H 表示,字符串‘A1B2’用 41H,31H,42H,32H表示。
8/96
常数项举例
[例5.2]
5/96
2.操作项
可以是指令、宏指令、伪指令的助记符。 【例】LOOP: MOV AX , BX ┆ BUFFER DB 1,2,3,4,5,6,7
;数据定义伪指令,在主存中开辟7个连续的字节单元, 初值依次为1~7,BUFFER表示首地址
6/96
3. 操作数项
操作数项可以由常量、寄存器、标号、变量或表达式等组成。 (1)常量 常量是没有属性的纯数,其数值在汇编过程中被确定,并在程
➢分析运算符号
把标号或变量所指存储器地址的属性(段、偏移 量和类型)或一些特征分离出来,作为操作数使 用。主要介绍3个: ✓ SEG 运算符 ✓ OFFSET运算符 ✓ TYPE运算符
15/96
① SEG 运算符
格式:SEG 变量或标号 •功能:分离出其后变量或标号所在段的段首址。 【例】已知数据段从存储器的23000H地址开始, DBUF是该段中的一个变量名。
伪指令命令助记符共有40多个,按功能不同分成八类。操作数之间须用 逗号分隔。 3、宏指令语句:[宏名] 宏操作助记符 [操作数] [;注释] 是指令性语句和指示性语句的复合体,在汇编时被展开。 说明:宏名即宏指令名,是一标识符,宏名后面不能有“:”。
宏操作助记符有MACRO、ENDM、LOCAL、REPT、IRP、PURGE等8个。
27/96
2.段定义伪指令
• 完整的汇编语言源程序由段组成 • 一个汇编语言源程序可以包含若干个代码段、数
据段、附加段或堆栈段,段与段之间的顺序可随 意排列。 • 需独立运行的程序必须包含一个代码段,并指示 程序执行的起始点,一个程序只有一个起始点 • 所有的可执行性语句必须位于某一个代码段内, 说明性语句可根据需要位于任一段内 • 通常,程序还需要一个堆栈段
(2) 偏移属性:可用OFFSET伪指令求出 此属性指出标号或变量距离段起始地址的字节数,它是一个 16位的无符号数。
(3) 类型属性:可用TYPE伪指令求出 对标号而言,此属性指出其引用类型,段内引用属于NEAR 类,指针长度为2字节;段间引用属于FAR类,指针长度为 4字节。对变量而言,此属性指出其字节长度,可为1、2、 4、8、10个字节。
(5)综合运算符
② LOW和HIGH
格式为: LOW 表达式
或 HIGH 表达式
此运算符用于对一个16位数据或地址表达式,用HIGH取其高 位字节、LOW取其低位字节。所以此运算符又称为字节分离 运算符。
【例】已知 RESULT EQU 7788H
则 MOV AH , HIGH RESULT
汇编为:MOV AH,77H
汇编语言程序设计
主要内容: 一、汇编语言语句格式 二、汇编语言伪指令 三、汇编语言源程序的汇编与连接 四、汇编语言程序设计的基本方法
1/96
汇编语言程序设计
本讲重点:
➢ 伪操作 ➢ 汇编语言程序格式 ➢ 简单汇编程序设计
2/96
一、汇编语言语句格式
汇编语言语句有指令性语句、伪指令语句和宏指令语句三种类型。 1、指令性语句: [标号:] 操作码 [操作数] [;注释] 是机器指令的符号表示,经汇编产生对应的机器指令代码,在形成执行文件时 执行。 2、伪指令语句: [名字] 伪指令助记符 [操作数] [;注释] 只是给汇编程序提供一些控制信息,帮助汇编程序正确汇编指令性语句,没有 对应的机器码。 说明:名字可以是符号常量名、变量名、过程名、段名等,名字后面不能有 “:”。
8. NOT
9. AND
10. OR,XOR
低
11. SHORT 22/96
4.注释项
一行语句分号后面的内容,主要用来说明程序或语句功 能,增加程序的可读性。对于较大的程序,注释项更 不能缺少。
➢ 分号(;)放在语句后,用来说明该语句的功能; ➢ 分号放在某一行的开头,用来说明下面一段程序的功
能; ➢ 分号加到指令前,可暂时冻结有疑问的指令,调试正
• 常用伪指令:
➢处理器选择伪指令;
➢赋值伪指令;
➢段定义伪指令
➢地址计数器与对准伪指
➢程序开始与结束伪指令;
令;
➢数据定义与存储器分配伪指令; ➢基数控制伪指令;
➢ 偶地址对准伪指令;26/96
1.处理器选择伪操作
.8086 选择 8086 指令系统
一般放在整个程 序的最前面。默
认值为.8086