第三章 指令系统
第3章 指令系统(BH)

• 程序设计语言:是实现人机交换信息的基本工具,
分为机器语言、汇编语言和高级语言。 能直接识别和执行的语言。
• 机器语言:用二进制编码表示每条指令,是计算机
• 汇编语言:是用助记符、符号和数字等来表示指令
的程序设计语言。它与机器语言指令是一一对应的。
MOV direct,Rn;
111 1rrr direct
(Rn)
direct
MOV direct, direct;
1000 0101 源 direct 目的 direct
(源 direct) 目的 direct
MOV direct,@Ri ;
1000 011i direct
((Ri))
direct
• 例如
计算机科学学院
电子信息科学教研室
12
• 例如:将片内RAM 65H单元内容47H送A,可执行 指令“MOV A,@R0”。其中R0内容为65H。如 图所示:
以指令中所指定 的R0内容(65H) ① 为指针
地址 数据存储器
R0
65H
┋
② A
47H
将片内RAM 65H单 元内容47H送A
65H
11
计算机科学学院
电子信息科学教研室
4、寄存器间接寻址
• 寄存器间接寻址:操作数的地址事先存放在某个寄
存器中,寄存器间接寻址是把指定寄存器的内容作为 地址,由该地址所指定的单元内容作为操作数。
• 89C51规定R0或R1为间接寻址寄存器,它可寻址内部
地址RAM低位的128B单元内容。还可采用DPTR作为 间接寻址寄存器,寻址外部数据存储器的64KB空间。
第三章 微型计算机的指令系统

reg , reg mem , reg reg , mem
C、从存贮器/寄存器到段寄存器 (mem/reg,segreg)
注:不能往CS中传送数据.
D、从段寄存器到存贮器/寄存器 (segreg,mem/reg)
注:
1,不影响标志 2,不允许两操作数都使用存储器 3,不允许往CS中送数 4,8位传送/16位传送决定于指令中寄存器及立 即数形式 5,凡给SS赋值时,系统会自动禁止中断,等下 条指令执行完后才会恢复
B、例 LEA BX,[BX+SI] 执行前:BX=0400H SI=003CH 执行后:BX= LDS SI,[10H] 执行前:DS=C000H, (C0010H)=0180H (0012H)=2000H 执行后:SI= DS= LES DI,[BX] 执行前:DS=B000H, BX=080AH (B080AH)=05AEH, (B080CH)=4000H 执行后:DI= ES=
0
CF
AH
/
/
/
三、算术运算指令 1、加法指令 加: ADD DST,SRC DST←SRC+DST reg,reg; reg,mem; mem,reg reg,data; mem,data; ac,data 带进位加:ADC DST,SRC (DST)← (SRC)+(DST)+CF reg,reg; reg,mem; mem,reg reg,data; mem,data; ac,data 加1: INC OPR (OPR)←─ (OPR)+1 (reg;mem) 注:INC指令不影响CF标志
2,高字节 4,低字节 2,SP+1 4,SP+1 SP SP
(SP) (SP)
第三章 MCS-51指令系统

3-1 指令格式 3-2 寻址方式 3-3 数据传送指令 3-4 算术运算指令
3-5 逻辑运算指令
3-6 位操作指令
3-7 控制转移指令
3-8 调用和返回指令
1
第三章 MCS-51指令系统
3-1 指令格式
一、 汇编语言指令格式 [标号:] 操作码 [操作数1],[操作数2][;注释] 例: LOOP: MOV A,#40H ;40H -> A
3-2 指令寻址方式
寻找操作数的方法叫寻址方式。
一、立即寻址方式 指令中给出实际操作数据(立即数), 一般用于为寄存器或存储器赋常数初值。
例:
8位立即数: MOV A,#40H ;A40H 16位立即数: MOV DPTR,#2100H ;DPTR2100H
9
第三章 MCS-51指令系统 二、直接寻址方式
24
第三章 MCS-51指令系统
(四)堆栈操作指令 入栈指令:PUSH n ;SPSP+1,(SP)(n) 出栈指令:POP n ;(n)(SP),SPSP-1 例:设 A=02,B=56H,执行下列指令后,SP= 30H , ? A= ? ,B= ? 30H 30H
SBR: MOV SP,#30H ;设栈底 PUSH A PUSH B MOV A,#0 B, #01
Y1,Y2,…,Yn
5
第三章 MCS-51指令系统
3-1 指令格式
二、 伪指令
汇编时不产生机器码,仅供汇编识别控制。
5.定义空间伪指令:DS 表达式 例3-6 ORG DS DB 0F00H 10H 20H,40H
汇编后,从0F00H开始,保留16个字节的内存单元, 然后从0F10H开始,按照下一条DB伪指令给内存单元赋值, 得(0F10H)=20H,(0F11H)=40H。
第三章MCS51系列单片机指令系统及汇编语言程序设计

SJMP rel ;PC+ 2 + rel→PC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码 偏移量,且SJMP rel指令为2字节指令,所以转移范围为-126D~+ 129D 【4】间接转移指令
表3.4 程序存储器空间中的32个基本2K地址范围
0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH
3. 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。通用寄存 器包括:A,B,DPTR,R0~R7。其中,R0~R7必须在 工作寄存器组之中。
例如:INC R0 ;(R0)+1→R0
需要注意的是,A和B既是通用寄存器,又是具有直 接地址的特殊功能寄存器。
4. 寄存器间接寻址
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够 用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必 须在工作寄存器组之中,SP仅用于堆栈操作。
MCS-51单片机共有111条指令,按功能分类, MCS-51指令系统可分为5大类:
➢ 数据传送类指令(共29条) ➢ 算术操作类指令(共24条) ➢ 逻辑操作类指令(共24条) ➢ 控制转移类指令(共17条) ➢ 布尔变量操作类指令(共17条)
1.数据传送类指令(共29条)
以累加器A为目的操作数类指令(4条)
微机原理第3章-指令系统

▲按给出偏移地址方式的不同,分为以下5种: 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器 相对基址加变址寄存器 MOV AL, [ BX ] MOV AL, [ BX + 10H ] MOV AL, [ BX + SI ] MOV AL, [ BX + SI + 10H ]
(1)寄存器间接寻址
寄存器寻址方式的操作数是寄存器的值,指令中直接 使用寄存器名,包括8位或16位通用寄存器和段寄存器。可 使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、 BP;其中:AX、BX、CX、DX可分成两8位使用。
例: MOV AX,CX
;(AX)
(CX)
INC CX
;(CX)
(CX)+1
3.直接寻址(Direct Addressing)
0002
AH
AL
默认段寄存器的关系: ① 使用BX、SI、DI,默认段寄存器为DS
(BX)
PA = ( DS )×10H + (SI) (DI)
② 使用BP,默认段寄存器为SS PA = ( SS )×10H + ( BP )
使用BX、SI、DI的寄存器寻址,默认段寄存器为DS
寄存器组 AH AL BH BL CH CL DH DL SI DI BP SP AX BX CX DX DS ES SS CS IP 地 址 加 法 器
运 算 器
控制总线CB
码
器
PSW标志 寄存器
执行部件控制电路
CPU
总线
内存
例: MOV AX , [ BX + SI ]
若 ( DS ) = 4000H
( BX ) = 2000H ( SI ) = 100H 则内存操作数的物理地址为:
汇编语言第3章 指令系统和寻址方式

5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H 物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)
第三章 8086 8088指令系统

SI 1200
+)
6000 0 1200 61200 AX 33 44
61200H 61201H
存储器 . . . 44H 33H 数 据 段
. . .
图 3-5 寄存器间接寻址示意图
3.2.5 寄存器相对寻址
寄存器相对寻址——操作数在存储器中。由指令指定的地址寄存器的内容加上指令中
给出的一个8位或16位的地址位移量,即可得操作数的偏移地址。
SI AX AX AX AX AX
3.2.8隐含寻址
隐含寻址—— 操作数隐含在操作码中,在有些指令的操作数中,不仅包含了操作的性质,
还隐含了部分操作数的地址。如乘法指令 MUL,在这条指令中只须指明乘数的地址,而被乘数 已经乘积的地址是隐含且固定的。这种将一个操作数隐含在指令码中的寻址方式就称为隐含
立即数操作数: 所谓立即数指具有固定数值的操作数,不因指令的执行而发生变化 。立即数操作 数只能用作源操作数,而不能用作目标操作数。
寄存器操作数:
8086CPU的8个通用寄存器和4个段寄存器可以作为指令中的寄存器操作数,寄存
器操作数在指令中既可以作为源操作数,也可以用作目标操作数。 存储器操作数: 参加运算的数据是存放在内存中。
两单元的内容送到AX中。假设DS=2000H,则所寻找的操作数的物理地址为: 2000H×10H+3102H = 23102H, 指令的执行情况如图3-3所示
存储器 . . .
MOV操作码
02H 31H AH AL 23102H 23103H
图 3-3 直接寻址方式
代 码 段
. . . ×× ×× . . . 数 据 段
请注意:使用基址—变址方式时,不允许将两个基址寄存器或两个变址寄存器组合
第3章MCS-51单片机指令系统

第3章MCS-51单片机指令系统3.1概述3.1.1指令格式3.1.2指令的三种表示形式3.1.3指令的字节数1. 单字节指令(49条)图3-1 MOVA,Rn指令的格式2单片机原理及其接口技术(第2版)2. 双字节指令(46条)3. 三字节指令(16条)3.1.4指令的分类1. 数据传送指令(28条)2. 算术运算指令(24条)3. 逻辑操作和环移指令(25条)4. 控制转移指令(17条)5. 位操作指令(17条)3.1.5指令系统综述1. 指令系统中所用符号的说明2. 指令对标志位的影响3.2寻址方式3.2.1寄存器寻址图3-2寄存器寻址示意图单片机原理及其接口技术(第2版) 3 3.2.2直接寻址图3-3直接寻址示意图3.2.3立即寻址3.2.4寄存器间址图3-4寄存器间址寻址示意图3.2.5变址寻址图3-5变址寻址示意图4单片机原理及其接口技术(第2版)3.2.6相对寻址图3-6相对寻址示意图3.2.7位寻址3.3数据传送指令3.3.1内部数据传送指令(15条)1. 立即寻址型传送指令2. 直接寻址型传送指令3. 寄存器寻址型传送指令4. 寄存器间址型传送指令5. 内部数据传送指令的使用图3-7 8×C552/8051指令的数据传送方式单片机原理及其接口技术(第2版) 5 3.3.2外部数据传送指令(7条)1. 16位数传送指令2. 外部ROM的字节传送指令图3-8 0~9平方值表3. 外部RAM的字节传送指令3.3.3堆栈操作指令(2条)图3-9例3.8的堆栈变化示意图6单片机原理及其接口技术(第2版)3.3.4数据交换指令(4条)3.4算术与逻辑运算和移位指令3.4.1算术运算指令(24条)1. 加法指令2. 减法指令3. 十进制调整指令4. 乘法和除法指令3.4.2逻辑运算指令(20条)1. 逻辑与运算指令2. 逻辑或指令3. 逻辑异或指令4. 累加器清零和取反指令3.4.3移位指令(5条)单片机原理及其接口技术(第2版)7图3-10例3.26附图3.5控制转移和位操作指令3.5.1控制转移指令(17条)1. 无条件转移指令图3-11 AJMP指令转移范围8单片机原理及其接口技术(第2版)图3-12例3.29附图图3-13带符号数的比较方法3. 子程序调用和返回指令图3-14二级子程序嵌套及断点地址存放单片机原理及其接口技术(第2版)9图3-15例3.33附图10单片机原理及其接口技术(第2版)4. 空操作指令3.5.2位操作指令(17条)1. 位传送指令2. 位置位和位清零指令3. 位运算指令4. 位控制转移指令习题与思考题3.1指令通常有哪三种表示形式?各有什么特点?3. 2 MCS-51指令按功能可以分为哪几类?每类指令的作用是什么?3. 3 MCS-51共有哪七种寻址方式?各有什么特点?3. 4指出下列每条指令源操作数的寻址方式和功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1.2
8086微处理器的指令系统
指令系统可分为如下几类: 1.数据传送类 2.算术运算类 3.逻辑运算与移位指令 4.字符串处理 5.控制转移指令 6.处理器控制指令
1.数据传送类(P89表3-3)
要求掌握的指令: MOV PUSH POP XCHG
XLAT LEA IN OUT
14. OUT指令(输出指令) 格式:OUT port,A 功能: (port) ←AL 或 (port+1)_(port) ← AX
二、算术运算指令
ADD ADC INC SUB SBB DEC NEG CMP MUL IMUL DIV 加法 带进位的加法 加1 减法 带进位的减法 减1 求补 比较 无符号数乘法 有符号数乘法 无符号数除法
错误指令: INC [2000H] 正确指令: INC BYTE PTR[2000H] INC WORD PTR[2000H]
这样,编译系统才不会产生岐义。因为访问内存单元 时,内存单元是以字节为单位组织的,它可以访问 一个字节,也可以访问一个字,若指令中只有一个 操作数,这时就必须指明内存单元的类型。
2. ADC指令 格式:ADC dest,src (B/W) 功能:dest←dest+src+CF
3. INC指令 格式:INC dest 功能:dest←dest+1 注意: (1)该指令的执行不影响CF标志位。 (2)对内存单元进行加1时,要指明内存单元是字节, 还是字。可以在内存单元前加操作符BYTE PTR, 表明为字节;加WORD PTR表明是字。
指令运行后,AL=05H
AND指令常用来对一个数据的指定位清0。 如 AND AL,0FH ;实现将寄存器AL的高4位清0。
2、OR指令 格式:OR
dest,src (B/W) 功能:dest←dest∨src做或运算的结果 注意: (1)两个操作数不能都为存储器单元 表示的操作数。 (2)该指令会使CF,OF清0.
5. XLAT指令(查表指令) 格式: XLAT 功能: AL←(BX+AL) 注意:用XLAT指令前,需将表的首地址存入 寄存器BX。
例:将数据5查表转换为其ASCII码35H. 若在内存的某段区域放有数字0-9的ASCII码 值FSET TABLE MOV AL,5 XLAT
4. SUB指令 格式:SUB dest,src (B/W) 功能:dest←dest-src 注意:减法时OF溢出标志位何时为0,何时 为1?当负数减正数时,若结果为正数, OF=1;当正数减负数时,若结果为负数, OF=1;否则为0.
5. SBB指令 格式:SBB dest,src (B/W) 功能:dest←dest-src-CF
2. PUSH指令 格式:PUSH src (W) 功能:SP←SP-2 (SP+1)_(SP) ←src 用PUSH指令将一个字数据压入堆栈进行存储。
有关堆栈的概念 堆栈是一块特殊的内存区域,这块内存区域 按“后进先出”的原则来存取数据。它的段 基值放在SS段寄存器里,SP堆栈指针指向堆 栈的栈顶。堆栈操作有入栈和出栈,操作的 对象是堆栈指针所指的内存单元的数据。
13. DIV指令(除法指令) 格式:DIV src 功能:AL←AX/src的商 (若src为字节数据) AH←AX/src的余数 AX ←DX_AX/src的商 (若src为字数据) DX ←DX_AX/src的余数
14 IDIV指令(有符号数的除法指令) 格式和功能同DIV指令。
AL寄存器
3、NOT指令 格式:NOT dest (B/W) 功能:dest←dest 注意: 该指令不影响标志位
例:MOV AL,5 NOT AL 0000 0101 取反后:1111 1010
指令运行后,AL=FAH
4、XOR指令 格式:OR dest,src (B/W) 功能:dest←dest⊕src做异或运算的结果 注意: (1)两个操作数不能都为存储器单元表示的 操作数。 (2)该指令会使CF,OF清0.
例: IN AL,100; 表示将端口号为100的端口中的数据输入到寄存 器AL中。 IN AX,100; 表示将端口号为100和101的两个端口中的数据 输入到寄存器AX中。
例:
MOV DX,300 IN AL,DX 由于端口号为300,不能用8位二进制数表示, 所以需要先将端口号用MOV指令传送到寄存 器DX,再用IN指令输入DX表示的端口号中 的数据到寄存器AL中。
三、位处理指令 1、AND指令 格式:AND dest,src (B/W) 功能:dest←dest∧src 做与运算的结果 注意: (1)两个操作数不能都为存储器单元表示的操作 数。 (2)该指令会使CF,OF清0.
例:MOV AL,5 AND AL,7 0000 0101 ∧ 0000 0111 0000 0101
同理:同学们可自行推算出堆栈段内存单元 (11002H)=? 78H (11003H)=? 56H
3. POP指令 格式:PUSH dest (W) 功能: dest← (SP+1)_(SP) SP←SP+2 用POP指令将堆栈指针所指的两个内存单元 形成的字数据弹出到目的操作数中。dest可 以是寄存器,,段寄存器(CS除外),内存 单元(用有效地址表示)。
5、TEST指令 格式:TEST dest,src (B/W) 功能:dest与src做与运算,但其结果不保存, 运算前后,dest和src不变。 注意: (1)两个操作数不能都为存储器单元表示的 操作数。 (2)该指令会使CF,OF清0.
TEST指令常用来测试某些位是否为0,例如,若要 测试AL中的第3位是否为0,若为0则将BL置为0, 否则置BL为1. TEST AL,00001000B JZ ZERO JZ (Jump Zero的缩写)为条件跳转指令, MOV BL,1 运算结果为0时跳转.若结果非0,不满足 JMP OVER 跳转条件,程序顺序执行下一条指令。 ZERO:MOV BL,0 OVER:HLT JMP为无条件跳转指令,程序执行到该指
1.MOV指令 格式:MOV dest,src (B/W) 功能:dest←src dest为目的操作数,src为源操作数,B/W表 示操作数可以是字节数据(8位),也可以是 字数据(16位)
注意: (1)dest和src不能同时为存储器操作数; 错误指令:MOV [1000H],[2000H] 正确指令:MOV AL,[2000H] MOV [1000H],AL
(2) dest和src不能同时为段寄存器; 错误指令:MOV DS,SS 正确指令:MOV AX,SS MOV DS,AX
(3)不能对段寄存器用立即数赋初值; 错误指令:MOV DS, 1234H 正确指令:MOV AX,1234H MOV DS,AX
(4)不能用CS作dest。 编程人员是不允许对CS赋值的,其值是由操 作系统在系统运行时自动赋值的。
例: MOV AX,1234H MOV BX,5678H PUSH AX 交换寄存器AX,BX的值。 PUSH BX POP AX POP BX 试分析上述程序段的功能?
4. XCHG指令(交换指令) 格式: XCHG dest, src 功能: dest←→src 注意:dest和src不能都是mem操作数。 错误指令:XCHG [1000H],[2000H] 正确指令:MOV AL,[1000H] XCHG AL,[2000H] MOV [1000H],AL
例:MOV AL,5 XOR AL,7 0000 0101 ⊕ 0000 0111 0000 0010
XOR AL,00101110B 该XOR指令会使得和0相异或 的位保持不变,而和1相异或 的位取反。
异或运算规则: 相同为0,不同为1
指令运行后,AL=02H
XOR指令常用在一些程序的开头,可使某个寄存器清0,以 配合初始化的完成;还可用XOR指令来使指定位求反,而其 余位保持不变。 如 XOR AX,AX ;对累加器AX的清0
下面是一程序段: 假定指令执行前,有 MOV AX,1234H SS=1000H,SP=1006H. MOV BX,5678H PUSH AX 执行PUSH AX指令后,SP=1004H, PUSH BX (SP+1)_(SP)表示堆栈段的两个存 储单元,它们的有效地址分别是 这两个单元的数据为: 1004H,1005H. (11004H)=34H 用物理地址的生成办法,可以计算 (11005H)=12H 出这两个单元的物理地址是: 11004H,11005H,
AL=? 0FCH
CF=? 0
OF=?
1
OF标志位何时为0,何时为1? 当数据作为有符号数时,运算中产生溢出OF 就为1,否则就为0. 简单判断规则:正数与正数相加,若结果为 负数,说明产生了溢出,OF=1;负数与负数 相加,若结果为正数,也说明产生了溢出, OF=1. 判断一个数是正数,还是负数,只需看它的 最高二进制位,0正1负。
例:MOV AL,5 OR AL,7 0000 0101 ∨ 0000 0111 0000 0111
指令运行后,AL=07H
OR指令常用来对一个数据的指定位置1。 如 OR AL,02H ; 02H→00000010B,上面指令实现将寄存器AL的D1位置 1,而AL的其余位保持不变。
D7 D6 D5 D4 D3 D2 D1 D0