资源描述
第一章 预备知识
一、教学基本内容
1、了解机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,正确认识学习汇编语言的重要性。
2、掌握8086处理器中各寄存器的符号表示形式、大小及主要用途。
3、理解主存的编址方式以及存储器物理地址形成的方式。
4、理解8086处理器关于使用堆栈的有关规定,掌握堆栈操作指令的功能以及使用格式。
5、掌握数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式。
6、掌握标志寄存器中各标志位的置位方式。
重点:主存的编址方式以及存储器物理地址形成的方式
难点:堆栈的概念及使用。
二、知识点:
1、机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,要求达到“识记”层次。
2、8086处理器中各寄存器的符号表示形式、大小及主要用途,要求达到“识记”层次。
3、主存的编址方式以及存储器物理地址形成的方式,要求达到“理解”层次。
4、堆栈的概念及堆栈操作指令执行后内存及相关寄存器值的变化,要求达到“理解”层次。
5、数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式,要求达到“理解”层次。
6、标志寄存器中各标志位的置位方式,要求达到“识记”层次;运算对各标志位的影响,要求达到“掌握”层次。
1.1机器语言和汇编语言
1、 机器语言
l 三种语言的层次关系
机器语言
汇编语言
高级语言
l 机器指令:指挥计算机完成某一基本操作的命令。
格式:
操作码 地址码1 地址码2
例:将偏移地址为100的字存储单元中的内容加2,在回送到原存储单元中去的机器指令如下:
8306640002
其中8306H为 操作码
6400H 为 目的操作数
02H 为源操作数
l 指令系统:机器指令面向机器,每台计算机都规定了自己所特有的一定数量的基本指令,这批指令的全体即为该计算机的指令系统
l 机器语言:这种 机器指令的集合。
l 机器语言程序:用机器语言编写的程序。
2、 汇编语言
ADD WORD PTR DS:[100],2
l 汇编语言:用助记符表示机器指令的操作码;
用变量代替操作数的存放地址;
在指令前冠以标号,用来代表指令的存放地址
l 汇编语言与机器语言
汇编程序
目标程序(机器语言)
汇编源程序
注: 汇编程序:能够将汇编源程序翻译成目标程序(机器语言)
l 汇编语言的特点:
① 所占空间、执行速度与机器语言相仿
② 直接、简捷,能充分控制计算机的硬件功能
1.2 Intel 8086 微处理器简介
通用寄存器:
AX(累加器)
BX(基址寄存器)
CX(计数器)
DX(数据寄存器) ;可以分8位使用。
指针及变址寄存器:
SP(堆栈指针寄存器)
BP(基址指针寄存器)
SI(源变址寄存器)
DI(目的变址寄存器)
IP(指令指针寄存器):用来存放下一条要执行指令在内存中代码段中的偏移地址。
1.3主存储器和堆栈
1、 主存储器
l 主存的基本存储单位是位(bit),它能容纳一个二进制数的0或1
l 字节编址:以字节为最小寻址单位。
l 8086的最大寻址空间1M
l 字的存放形式“低位在前,高位在后”
00000H
00200H
00201H
00202H
FFFFFH
56H
34H
12H
00200H起 取一个字得 3412H
00201H起 取一个字得 5634H
l “对准字”和“不对准字”
2、 堆栈
在内存中开辟出一片存储区,采用一端固定,另一端活动的方式存取数据。
堆栈的图示:
栈顶 SP:指向最后存入的数据的单元
栈底
l 进栈指令 PUSH
格式: PUSH OPS
SP
12H
34H
SP
功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈。
(SP)-2 à SP
例:假设(SP)=1000H (AX)= 1234H
PUSH AX
(SP)=0FFEH
注:PUSH AL ;错误
PUSH 0003H ;错误
l 出栈指令 POP
格式: POP OPD
功能:将栈顶元素(字)弹出送至寄存器、段寄存器(CS除外)或存储器中。
(SP)+2 à SP
例:设 (BX)=2004H
POP BX
执行后: (BX)=1234H (SP)=1000H
注:PUSH CS ;正确
POP CS ;错误
3、 存储器的分段管理
l 地址表示的一对矛盾:
直接寻址能力为1M (字节);
而寄存器是16位结构的。
l 解决方法:
引入了存储器“分段”的概念,即把1M字节内存空间分成若干段。每段最大可达64K字节--可由16位寄存器进行寻址。
段的起始地址成为“段基址”,要访问的单元距段基址的距离(字节数)为“偏移量”(Offset)。
…
…
段的起始地址
偏移量
要访问的单元
段
程序设计时,使用的是逻辑地址。逻辑地址由“段基址”和“偏移量”构成(均为16位)。
“段基址”由段寄存器CS、DS、SS和ES提供;“偏移量”由BX、BP、IP、SP、SI、DI或根据寻址方式计算出的有效地址EA(Effective Address)提供。
l 注意:
①每个存储单元有唯一的物理地址,但它却可由不同的“段基址”和“偏移量”组成。例如:
1200H:0345Hà12345H 1100H:1345Hà12345H
② 除非专门指定,一般情况下,段在存储器中的分配是由操作系统负责的。
例1:设(CS)=8000H (IP)=0100H
问下一条要执行的指令的物理地址PA?
(CS)内容左移4位+(IP)
PA = 80000H+0100H=80100H
例2:设(DS)=1000H 该数据段中偏移量为0200H处的物理地址PA?
(DS)内容左移4位+偏移量
PA = 10000H +0200H =10200H
例3:设(SS)=1000H (SP)=2000H 问该堆栈段栈顶的的物理地址PA?
(SS)内容左移4位+(SP)
PA = 10000H +2000H =12000H
1.4 数值数据在机器内的表示形式
8086的两个规定:
① 数值数据均指无符号定点数
② 有符号数则一律采用n位二进制补码表示。
例1:设 M = 14 = 0EH
[M]补 = 0EH
0
1
1
1
0
0
0
0
机器内:
扩展成16位后:[M]补 = 000EH
机器内:
1
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
例2:设 M = -14 = -0EH
[M]补 = 0F2H
1
1
1
1
0
0
1
0
机器内:
扩展成16位后:[M]补 = 0FFF2H
机器内:
1
1
1
1
1
1
1
1
1
1
1
1
0
0
1
0
注:最高位(符号位)向左扩展若干位后,仍是该数的补码。
l 8086中,16位补码的表示范围:
7FFFH ~~ 8000H
注:机器在进行算术运算时,总是把参加运算的用补码表示的操作数作为无符号数处理。
1.5 字符数据在机器内的表示形式
1、ASCII码 (美国信息标准交换码)
l 字符数据是以ASCII码形式存放在内存中的。
例如 “1” 就是 31H
“A” 就是 41H
2、BCD码
定义:利用二进制形式来表示十进制数。
利用4位二进制数(0000B~1001B)来表示十进制数(0~9)
例如: 19 = 00011001BCD
= 000010011B
l 压缩BCD(组合BCD) 一个字节存放两个十进制数位
例如 19
0
0
0
1
1
0
0
1
非压缩BCD(非组合BCD) 一个字节存放一个十进制数位
例如 19
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
1
注:这种情况下,高四位全零;
低位在前,高位在后。
CF
PF
AF
ZF
SF
TF
IF
DF
OF
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.6 标志寄存器
1、状态标志:表示前面的操作执行后,算术逻辑部件处于怎样一种状态。
例如,是否产生了进位,是否发生了溢出等等。程序中,可以通过对某个状态标志的测决
定后面的走向及操作。
例如:
STATE: IN AL, 0DAH;
TEST AL, 02H;
JZ STATE
● 零标志ZF(Zero Flag):若运算结果为0,则ZF=1;否则ZF=0。
例1:MOV AL, 4
SUB AL, 4
例2:XOR AX, AX
执行后,ZF也一定为1。
● 进位标志CF(Carry Flag):
它反映:
加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。
减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。
例如:
MOV AL, 3;
SUB AL, 4;
执行后,CF=1。
● 奇偶标志PF(Parity Flag):
若运算结果低8位中“1”的个数为偶数,则PF=1;否则PF=0。
例:MOV AL, 2
ADD AL, 1
执行后,PF位为1。
● 辅助进位标志AF(Auxiliary carrry Flag):
也称“半进位标志”,它反映:
加法时,第3位向第4位有进位;
减法时,第3位向第4位有借位。
● 溢出标志OF(Overflow Flag):
若运算过程中发生了“溢出”,则OF=1。
定义:运算结果超出计算装置所能表示的范围,称为溢出。
判断方法之一【逻辑】:溢出=最高位进位 ⊕ 次高位进位
例:分析执行下述两条指令后,以上六个标志位的变化。
MOV BL,58H
ADD BL,4AH
解: 01011000B
+ 01001010B
10100010B
CF=0 SF=1 OF=1 PF=1 ZF=0 AF=1
2、控制标志(3位):
每一位控制标志都对一种特定的功能起控制作用。可以通过专门的指令对其进行“置位”(Set)或“复位”(Reset)。
● 中断标志IF(Interrupt Enable Flag):
如果IF置“1”,则CPU可以接受可屏蔽中断请求;反之,则CPU不能接受可屏蔽中断请求。
指令系统中有两条专门的指令可以置“1”或置“0” IF标志位:
STI 使IF置“1”,即开放中断。
CLI 使IF清“0”,即关闭中断
● 方向标志DF(Direction Flag):
用于串操作指令中的地址增量修改(DF=0)还是减量修改(DF=1)。
STD
CLD
● 跟踪标志TF(Trap Flag):
若TF=1,则CPU按跟踪方式(单步方式)执行程序。
4、 标志位寄存器的操作
l 传送
LAHF
功能:将标志位寄存器的低8位送入AH中,即:
(FLAGS)7~0 à AH
例:执行前 (FLAGS)=0485H (AX)=0FFFFH
执行后 (FLAGS)=0485H (AX)=85FFH
SAHF
功能:将AH的内容送入标志位寄存器的低8位中,即:
AH à(FLAGS)7~0
l 栈操作
PUSHF
POPF
例:MOV AX,0FFFFH
PUSH AX
POPF
结果:(FLAGS)=0FFFFH
1.7 常用指令简介
源操作数
目的操作数
操作码
MOV AX , BX
功能:将BX中的内容放到AX中
其他指令:
ADD AX,100
SUB AX,100
INC AX
DEC BX
第二章、寻址方式
教学目的与要求
熟练掌握六种寻址方式(立即方式、直接方式、寄存器方式、寄存器间接方式、变址万式基址加变址方式〕的汇编格式、功能及使用方法。
教学内容
1、寻址方式的基本概念。
2、六种寻址方式的汇编格式、功能及使用方法。
3、寻址方式的应用。
考核知识点与考核要求
六种寻址方式的汇编格式、功能及使用方法,比较各种寻址方式的应用场合,要求达到“掌握”层次。
所谓寻址方式:就是寻找操作数存放地址的方式。
2.1 立即寻址(Immediate addressing)
指令中直接给出操作数,操作数紧跟在操作码之后,作为指令的一部分存放在代码段里,在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。
例:MOV AL,80H
MOV AX,306AH
l 立即数可以为8位,也可以为16位。如果是16位数,则“高位字节存放在高地址中,
低位字节存放在低地址中。”
l 立即寻址方式常用于给寄存器赋值,并且只能用于源操作数,而不能用于目的操作数
2.2 寄存器寻址(Register addressing)
操作数在寄存器中,指令中指明寄存器号,这种寻址方式叫寄存器寻址。
l 对于8位操作数,寄存器可以是 AH, AL, BH,BL, CH, CL, DH, DL
l 对于16位操作数,寄存器可以是AX, BX,CX, DX, SI, DI, SP 和 BP
例:MOV AL,BL
INC BX
(1) 操作数就在寄存器中,不需要访问存储器来取得操作数(指令执行时,操
作就在CPU的内部进行),因而执行速度快。
(2)寄存器号比内存地址短
* 在编程中,如有可能,尽量使用这种寻址方式的指令。
* 寄存器寻址方式既可用于源操作数,也可用于目的操作数,还可以两者都用于寄存器寻址方式(如 MOV BX , AX )
2.3直接寻址(Direct Addressing)
l 在讨论寻址方式时,通常把操作数的偏移地址称为有效地址EA (Effective Address) ,EA可通过不同的寻址方式来得到。
l 在直接寻址方式中,指令中直接给出操作数的有效地址,或者说,有效地址EA就在指令中。它(操作数的有效地址,而不是操作数本身)存放在代码段中指令的操作码之后,但操作数一般存放在数据段中。
例 1 MOV AX , ds:[2000H];ds:跨段前缀
如(DS)= 3000H, 则 PA=3000H *16d +2000H
例 2 MOV AX , BUFA; BUFA 为一变量名,这时可以不加跨段前缀,默认为DS
例 3 下面是运用跨段前缀的一些语句:
MOV AX,ES:[1000H]
MOV BX,SS:[0100H]
2.3寄存器间接寻址(Register indirect Addressing)
l 采用寄存器间接寻址方式时,指令中给出寄存器号(寄存器为BX,BP,SI和DI之一),
被指定的寄存器中存放着操作数的有效地址,操作数在存储器中
l 以寄存器的内容为操作数的有效地址
l 格式: [R]
l 只有下面四个寄存器:
[BX]……..对应段寄存器为 DS
[BP]…….. ………………… SS
[SI]……… …………………..DS
[DI]……… ………………….DS
例: MOV AX , [BX] ;
设 ( DS) = 2000H ,(BX) = 1000H
物理地址PA=20000H + 1000H =21000H
21000H
BX
数据段
5AH
30H
指令的执行结果为:
(AX) = 5A30H
指令中也可以通过“段跨越前缀”取得其他段中的数据.
例:MOV AX,ES: [BX]
2.4 变址寻址(Indexed Addressing)
l 操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和。
l 格式: [R+X] 或 X[R] [X+R]
l 若没有段跨越前缀,则对于寄存器BX,SI,DI的情况,段寄存器为DS;
而对于寄存器为BP的情况,则段寄存器为SS.
例: MOV AX, [SI+3000H]
设(DS)=4000H,(SI)=2000H
则物理地址PA=40000H+2000H+3000H
45000H
AX
30
数据段
代码段
12H
34H
00
OP
OP
= 45000H
2.5 基址变址寻址(Based indexed addressing)
l 操作数的有效地址是一个基址寄存器和一个变址寄存器内容以及位移量X三者之和,两个寄存器均由指令指定。
l 格式: [BR+IR+X] 或 X[BR+IR] X[BR][IR]
X 为8位或16位二进制补码表示的有符号数
BR 基址寄存器 可以选用 BX,BP, 它们“决定” 段
IR 变址寄存器 可以选用 SI,DI
例如:MOV AX,8[BX+SI]
MOV BX,-6[BP+DI]
综合举例:
例1:指出下列指令中源操作数的寻址方式:
MOV AX,02FH
MOV BX,[SI]
MOV CX,[BX+SI+2]
MOV DX,DS:[1000H]
MOV SI,BX
例2:指出下列指令的错误:
MOV BX,[AX]
MOV BX, DS[SI]
MOV [CX],2
MOV [SI+DI],AX
MOV AX,[2000H]
第三章、宏汇编语言
教学目的与要求
1、了解常量、变量与标号在汇编语言中的属性和定义形式,应使学生熟练使用数值表达式和地址表达式。
2、掌握数据传送指令、算术逻辑运算指令的语句格式及功能。
3、了解伪指令和机器指令的区别,掌握数据定义伪指令和符号定义伪指令的格式及功能。
4、理解假定伪指令ASSUME的功能和使用方法,以及汇编地址计数器$的作用。
5、熟练掌握1号、2号、9号、10号系统功能调用的格式要求及功能。
教学内容
1、数值表达式和地址表达式。
2、数据传送指令、算术逻辑运算指令。
3、伪指令。
4、DOS系统功能调用。
考核知识点与考核要求
1、常量、变量与标号在汇编语言中的属性和定义形式,数值表达式和地址表达式的使用,要求达到“掌握”层次。
2、数据传送指令、算术逻辑运算指令的语句格式及功能。要求达到“掌握”层次。
3、伪指令的语句格式及功能,要求达到“掌握”层次。
4、DOS系统功能调用的机理,要求达到“掌握”层次。
3.0 一个简单的汇编语言源程序
两数求和程序如下:
DSEG SEGMENT ‘DATA’
DATA1 DB 15H
SUM DB 00H
DSEG ENDS
CSEG SEGMENT ‘CODE’
ASSUME CS:CSEG,DS:DSEG
START: MOV AX, DSEG
MOV DS, AX
MOV AL, DATA1
ADD AL, 12H
MOV SUM, AL
HLT
CSEG ENDS
END START
观察程序的结构,猜测各语句的作用。
3.1 汇编语言中的表达式
一、 常量与数值表达式
1、常量:在将汇编源程序翻译成目标程序期间已经有确定的数值的量。
l 分类:数值常量,符号常量
l 数值常量的表示方法
二进制常量: 010101110B 010101110b
八进制常量: 12537O 45Q
十进制常量: 4298 1289D
十六进制常量: 0ABC2H
字符常量 ‘123ABC’ “STUDY”
l 标识符的格式
① 标识符的第一个字符必须是字母、问号?、@或下划线__四者之一;
② 从第二个字符开始可以是字母、问号?、@、下划线__或数字;
③ 一个标识符的长度可以有131个字符
例:下列标识符定义正确的是( )
A) 3DATA B) DATA_3 C) DATA 3 D) DATA.3
l 符号常量定义的方法
① EQU
AA EQU 50
② =
BB = 100
例:MOV AX,BB
则等价于 MOV AX,100
2、数值表达式:对常量的运算
l 算术运算 + - * / MOD SHR SHL
例:CC EQU 11111111B
表达式 CC SHR 3 ; 等价于00011111B
l 逻辑运算 AND OR XOR(按位加) NOT
例:789AH XOR 000FH ; 等价于 7895H
l 关系运算 EQ NE LT GT LE GE
注意:关系运算表达式的结果:真 0FFFFH
假 0
例: NUM = 50
NUM NE 100 ; 等价于0FFFFH
MOV AX, NUM EQ 100 ;(AX)=0
二、 变量、标号与地址表达式
1、变量:数据存储单元的名字
l 变量的段属性
l 变量的偏移量属性
l 变量的类型属性:字节,字,双字,4字,10个字节
2、变量的定义
在数据段或附加段中用数据定义伪指令DB、DW、DD、DQ、DT
格式:
[变量名] 数据定义伪指令 表达式[,……]
例如: x1 DB 08H
BUF DW 01H,02H,03H,04H
l 表达式的几种形式:
① 数值表达式
② ASCII码字符串(只有用DB定义变量时,才允许字符串长度超过2个字符)
例:BUF1 DB ‘HELLO’ ;等价于 BUF DB ‘H’,’E’,’L’,’L’,’O’
BUF2 DB ‘AB’
BUF3 DW ‘AB’
③ 地址表达式 (只适用DW、DD两条伪指令)
例:BUF1 DB ‘HELLO’
SA_BUF DW BUF1
LA_BUF DD BUF1
④ ?
例: SUM DW ?
⑤ 重复子句
格式为: N DUP (表达式)
例:N DB 3 DUP (01H,02H)
M DB 2 DUP(2,2 DUP (2,’2’))
综合举例1:书P41 图3。1
综合举例2:设有 BUF1 DB 01H,02H,03H,04H
问 执行 MOV AL,BUF1 后 ,AL中的内容?
要想将以上定义的03H取入AL,如何改上面指令?
3、 在指令中如何使用变量
l 直接寻址方式从变量中存取操作数时,定义该变量的段必须是当前段
l 类型要匹配
例:MOV AX,BUF1 这条指令就是错误的。
类型匹配的原则:
① 单操作数指令,操作数类型必须明确;
② 双操作数指令,两明确类型的操作数必须匹配;
③ 双操作数指令,一个类型明确,一个类型模糊时,以明确的那个操作数为准。
例:MOV AX,BL; 错误
MOV [SI],200; 错误
INC [SI] ; 错误
MOV AX,[SI] ;正确
MOV AL,[SI] ;正确
4、 标号(出现在代码段中)
标号:机器指令语句存放地址的符号表示,也可以是过程名。
例: XMOV: MOV AL, [SI]
MOV [DI],AL
l 标号的段属性
l 标号的偏移量属性
l 标号的类型属性:NEAR (只能在标号定义的段内使用)
FAR
5、 地址表达式
结果:段内偏移地址
例:BUF1 DB ‘HELLO’
MOV AL,BUF1 ; (AL)=’H’
MOV AL,BUF1+4; (AL)=’O’
l 在地址表达式中的几个特殊的算符
① 类型运算符 PTR
格式: 类型 PTR 地址表达式
注:这里的类型可以是BYTE,WORD,DWORD,NEAR,FAR
例: BUF DB 5,6,7
MOV AX,WORD PTR BUF
结果: (AX)= 0605H
例: MOV [SI],BYTE PTR 200
MOV BYTE PTR [SI],200
但 MOV AL, BYTE PTR SI 就是条错误指令。
例: W_BUF DW 1122H,3344H
B_BUF EQU BYTE PTR W_BUF
② : 跨段前缀符
格式:段寄存器名:地址表达式
或 段名:地址表达式
③ 定义类型算符THIS
格式: THIS 类型
作用:将类型符后面的类型属性赋予当前的存储单元。
例: DATA1 EQU THIS WORD
DATA2 DB 12H,34H,56H,78H
这样,DATA1变量是字类型,而DATA2为字节类型,它们具有同样的段和偏移量。
④ 属性分离算符
取段址算符 SEG
例:BUF DB 5,6,7
MOV AX,SEG BUF
取偏移地址算符 OFFSET
例:BUF DB 5,6,7
MOV SI,OFFSET BUF
取类型算符 TYPE
注:标号 NEAR 0FFFFH
FAR 0FFFEH
变量 字节 1
字 2
双字 4
四字 8
10字节 10
例:BUF DD 5,6,7
MOV CX,TYPE BUF ;结果 (CX)= 4
⑤ 其他算符
取变量单元数 LENGTH Page: 17
例: DATA SEGMENT
A DW 6 DUP (02H)
B DD 1,2,3,4,5,6
DATA ENDS
MOV BX, LENGTH A ;(BX)= 6
MOV CX, LENGTH B ;(CX)= 1
取变量字节数 SIZE
MOV BX, SIZE A ;(BX)= 12
MOV CX, SIZE B ;(CX)= 4
3.2 常用的机器指令语句
一般格式:
[标号:] 操作符 目的操作数,源操作数 [;注释]
[标号:] 操作符 目的操作数 [;注释]
注意点:
① 类型要匹配
② 目的操作数不能是立即数
③ 两操作数不能同时为存储器操作数
④ 源操作数在运算后值不变
一、 数据传送类指令
1、一般数据传送指令
① 传送指令
MOV OPD,OPS
功能: (OPS)à OPD
实现CPU的内部寄存器或寄存器与内存间的数据传送(复制操作).
标志:所有通用传送指令都不影响标志位。
注意点:立即数不能直接传送到段寄存器
两个段寄存器之间不能相互传送数据
立即数,CS 不能作为目的操作数
两个存储单元之间不能直接传送
操作数的类型和长度必须一致,不允许溢出
例: MOV AL, BL;
MOV [DI], AX;
MOV CX,DS:[1000H];
MOV BL, 40
MOV WORD PTR[SI],01H;
练习1:把CX中的内容放入AX的指令:
MOV AX,CX
2035H
01H
….
….
02H
2045H
练习2:用MOV指令实现两内存字节单元内容的交换
用直接寻址方式实现
MOV BL, DS:[2035H];
MOV CL,DS:[2045H];
MOV DS:[2045H],BL;
MOV DS:[2035H],CL;
HLT
用寄存器间接寻址方式实现
MOV SI , 2035H;
MOV DI, 2045H;
MOV AH, [SI];
MOV AL, [DI];
MOV DS:[2035H],AL;
MOV DS:[2045H],AH;
② 数据交换指令
XCHG OPD,OPS
例: XCHG AX,BX
③ 查表转换指令
XLAT OPS 或 XLAT
功能: ((BX)+(AL))à AL
注意:表的起始地址预先存放在BX 中,
AL中的值是表中要被传送的字节到表头地址的字节数
例: DATA SEGMENT
TABLE DB 03H,06H,09H,0CH,0FH
DATA ENDS
MOV BX,OFFSET TABLE
MOV Al,03H
XLAT
结果为: (AL)=0CH
2、地址传送指令
① 传送偏移地址指令
格式: LEA OPD,OPS
功能:将OPS的地址放入OPD中
注:OPD必须是16位的通用寄存器
例1: MOV SI,OFFSET TABLE
等价于 LEA SI,TABLE
例2: 注意 MOV AX,[SI]
LEA AX,[SI] 区别
例3: lEA AX,[SI] ;正确
MOV AX,OFFSET [SI] ;错误
②传送偏移地址及数据段首址指令
格式: LDS OPD,OPS
功能:将源操作数所指定的存储单元中取出某变量的地址指针(共4个字节),将低地址两个字节(偏移量)送到目的操作数,将高地址两个字节(变量的段首址)送到DS中。
注:OPD必须是16位的通用寄存器
OPS必须是DD类型存储器地址
例: LDS SI,ADDR[BX]
80H
10H
00H
20000H
DS
21020H
40H
设 (DS)=2000H , (BX)=1000H
ADDR =0020H
执行该指令后:
(SI)=1080H
(DS)=4000H
③传送偏移地址及附加段首址指令
格式: LES OPD,OPS
二、 算术运算类指令
1、二进制数算术运算指令
⑴ 加运算
①、加1指令
格式: INC OPD
例: INC AX
注:INC指令不影响CF。
②、加指令
格式: ADD OPD,OPS
例:ADD AX,-7FFFH
设 (AX)= 0FFFDH
[-7FFFH]补=8001H
0FFFDH
+ 8001H
7FFEH
CF=1 OF=1
③、带进位加指令
格式: ADC OPD,OPS
功能:(OPD)+(OPS)+CF
展开阅读全文