第二章 8086 8088指令系统 微型计算机原理及应用课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

20064H
SP:0064H 21
MOV AX, 1234H PUSH AX (1) SP-1SP AH[SP] (2) SP-1SP AL[SP] 先减指针, 再压数据, 先高后低 POP BX (1) [SP]BL SP+1SP
(2) [SP]BH SP+1SP
SP SP
SP 先出数据, 再加指针,先低后高
18
2.2 8086/8088指令系统
一、数据传送指令 1. 通用数据传送指令 1) 所有的MOV传送指令都不能改变标志 2) CS,IP不能作为目的操作数 MOV CS, AX 3) 两个段寄存器间不能直接传送 MOV SS, DS 4) 立即数不能直接传送给段寄存器 MOV DS,2000H 5) 内存单元间不能直接传送 MOV [SI], [2000H] 6) 立即数不能作为目的操作数 MOV 1000H, AX
量。在执行查表指令时,
…… ……
将BX与AL中的内容相加, 把得到的值作为地址,
…… ……
BX+AL 20H AL
…… ……
然后将此地址所对应单
…… ……
元中的值取到AL中去。 DS:[BX+AL]AL29
执行该指令前,应该先建立一张表格,该表的最 大容量为256字节。
例: 将十进制数字0~9变换成七段显示码的译码表
AX: 6050H 23000H 10H 23001H 20H
SI: 0002H 23002H 30H
23003H 40H
AX: 7856H 23004H 50H
AX: 4B3BH 23005H 60H 23006H 70H
AL: DEH 23007H 80H
MOV AX, [BX+SI+4H] AX: F0DEH
31000H 1AH 31001H 2AH 31002H 3AH 31003H 4AH 31004H 5AH 31005H 6AH 31006H 7AH 31007H 8AH
33000H 1BH 33001H 2BH 33002H 3BH 33003H 4BH 33004H 5BH 33005H 6BH 33006H 7BH 33007H 8BH
100个字节
SP:0064H 24
交换指令 XCHG OPRD1, OPRD2
OPRD1 OPRD2
在寄存器之间, 寄存器和内存之间的8位,16位数 据可以相互交换。
XCHG AL, AH
XCHG AX, [BX]
1) 内存之间的数据不可相互交换
2) CS,IP不能参与交换
3) 段寄存器之间不能参与交换
16
变址寄存器只有2个:SI和DI。允许段超越。 MOV AX, [BX+SI+0200H] MOV AX, 0200H[BX+SI] MOV AX, 0200H[BX][SI] MOV AX, 0200H[BX][BP]
MOV AX, 0200H[SI][DI]
必须是基址(BX或BP)加变址(DI或SI)
8
MOV AX, [0020H]
码段
AX: 3412H
堆栈段
DS:0000H
AX 34 12 AH AL
……
……
内存内容
…… ……
12H 34H 56H ……
0000H 0001H …… 0020H 0021H 0022H ……
……
……
偏移地址
数据段
9
也可以传送内存中其他段的数据,在相应的偏 移地址前加段超越符“ :”。
AX: 3000H 21000H 12H
AX: 1000H 21001H 34H 21002H 56H
AX: 2010H 21003H 78H
21004H 9AH
AX: 3412H 21005H BCH
AX: 3000H 21006H DEH 21007H F0H
AX: 2B1BH
MOV AX, [SI] MOV SI, 0002H MOV AX, [BX][SI] MOV AX, [BP+02H] MOV AL, [BX+06H]
20
堆栈操作指令
堆栈是按先进后出的原则组织的一段内存区域,
一般作临时存储器用(仓库)。其指针SP为16位的寄
存器,始终指向栈顶(货物堆放的位置)。堆栈的空
间大小是用户指定的。
20000H
SS: 2000H ; 堆栈段的段基址 ;表示堆栈从20000H处开始
100个字节
假设用户定义堆栈为100个字节, 则SP自动设置为0064H
AL (40H) AH (41H)
IN AL, 352H
OUT 400H, AL
当外口地址大于8位(0FFH)时,用DX作间址
MOV DX, 352H
MOV DX, 400H
OUT DX, AL;AL [DX]
IN AL, DX; [DX] AX
27
IN, OUT只能对AL, AX操作,若传送的数 据为16位,则外口地址只能取偶数。
25
累加器专用指令(只与AX或AL有关,与AH无关)
输入输出指令 IN
输入
CPU
OUT
AX或AL
输出
存储器
只能用IN、OUT指令向外设发命令; 外设只能与CPU内部寄存器AL或AX进行数据传输
26
IN AL, 40H
OUT 40H , AL
8位
IN AX, 40H
OUT 40H , AX
16位
(40H) AL (41H) AH
MOV [DI], 2000H ;将立即数2000H传送到数据段中,其目的地的 偏移地址存放在DI中。
13
五、 变址寻址 操作数存放在内存中,但其偏移地址需要计算。
偏移地址=寄存器内容+指令中给定的偏移量
MOV AX, [SI+0200H]
;欲传送的操作数在数据段中,其偏移地址是SI 寄存器中的内容加上0200H 同样,作为变址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
f0deh192280868088一数据传送指令csip不能作为目的操作数movcsax两个段寄存器间不能直接传送movssds立即数不能直接传送给段寄存器movds2000h内存单元间不能直接传送movsi2000h立即数不能作为目的操作数mov1000hax20movblaxmov100cxmovsiaxmovcsaxmovsidimovbx2dimovaxcsmovss2400hmovaxbp4错误不匹配错误立即数不能赋值正确错误cs不能赋值错误内存间不能直接传送正确正确错误段寄存器不能赋立即数正确21堆栈操作指令堆栈是按先进后出的原则组织的一段内存区域一般作临时存储器用仓库
MOV AL, BH ;将 BH中的内容传送到AL中去
MOV AL, BX 错误! 不匹配
7
三、 直接寻址 操作数存放在内存中,在指令中给出存放操作数 的偏移地址,如果不加说明,默认的段基址是数 据段。
MOV AX, [0020H]
;将 数据段偏移地址为0020H的地址中的内容传 送到AX中去,相当于: MOV AX, DS:[0020H]
3
寻址方式:寻找操作数的方式。
计算机中操作数可以存放在以下几个地方: 指令代码中,存放常量;MOV AX, 2070H 寄存器中:MOV AX, BX 内存中: MOV AX, [2000H] I/O端口中: IN AL, 40H
4
…… ……
码段
每段的长度均小 堆栈段 于64KB,即16
堆栈段
位寄存器能表示 的最大范围。
MOV AX, SS:[0020H]
;将 堆栈段偏移地址为0020H的地址中的内容传 送到AX中去
MOV ES:[0100H], BX 如果不加段超越,默认为数据段的偏移地址
10
四、 寄存器间接寻址 操作数存放在内存中,但其偏移地址存放寄存器 中。在指令中只给出这个寄存器。
MOV AX, [BX]
19
MOV BL, AX 错误,不匹配 MOV 100, CX 错误,立即数不能赋值 MOV [SI], AX 正确 MOV CS, AX 错误,CS不能赋值 MOV [SI], [DI] 错误,内存间不能直接传送 MOV BX, 2[DI] 正确 MOV AX, CS 正确 MOV SS, 2400H 错误,段寄存器不能赋立即数 MOV AX,[BP+4] 正确
AX 34 12 AH AL
……
……
内存内容
…… ……
12H 34H 56H ……
0000H 0001H …… 0020H 0021H 0022H ……
……
……
偏移地址
数据段
12
MOV AX, ES:[BX]
;传送的操作数在附加段ES中,偏移地址存放在 BX中。
MOV [BP], BX ;将BX中的内容传送到堆栈段中,其目的地的偏 移地址存放在BP中。
A)PUSH CS
B) POP CS
C) PUSH 30H[BX][SI] D) MOV SI,ES:[BP]
23
DS: 2000H SS:3000H SP:0064H
MOV AX, 1000H
PUSH AX
MOV BX, AX BX: 1000H
PUSH [BX]
30000H 30001H
PUSH [1000H] POP [1002H]
IN AX, 35H 错误! IN AX, 36H
必须为偶数
28
表格查找指令(换码指令) XLAT 使累加器AL中的一个值变换为存储器表格中的某 一个值,一般用来实现编码码制的转换。 DS段
用BX指向表的首地址, AL中的内容为表中某一 项与首地址之间的位移
BX AL
+
BX+0 11H 表格首地址 BX+1 22H BX+2 33H
…… …… 12H …… 34H
POP AX
AX: 3412H
30060H 12H 30061H 34H
POP BX BX:1000H 30062H 00H
30063H 10H
30064H
21000H 12H 21001H 34H 21002H 1526HH 21003H 3748HH 21004H 9AH 21005H BCH 21006H DEH 21007H F0H
MOV AX, 0200H[BP+SI]
;欲取的数据在堆栈段
17
DS: 2000H SS:3000H BX:1000H BP:3000H SI: 3004H
MOV AX, 3000H MOV AX, BX MOV AX, [3000H] MOV AX, [BX] MOV AX, BP MOV AX, [BP]
a
f gb
e
c
d
a
+5V g f e dc ba
40H 0 79H 1 24H 2 30H 3
f gb
e c 0100 0000 0 40H
19H 4 12H 5
14
用BP寻址,段基址默认为堆栈段SS,其余3个的段 基址默认为数据段DS,同时指令允许段超越。 变址寻址可以有多种格式:
MOV AX, [BX+0200H] MOV AX, 0200H[BX] MOV AX, 0200H+[BX]
例如:DS:3000H, BX: 1000H 数据所在的地址: 高位: 31201H 低位: 31200H
4002H 4003H 4004H
…… B8H 30H 20H ……
高字节 高地址 低字节 低地址
内存地址 内存内容
AX 20H 30H
AH
AL 6
二、 寄存器寻址 操作数放在CPU内部的寄存器中,可以是8位或16 位寄存器,注意源操作数和目的操作数的位数应 一致。 MOV AX, BX ;将 BX中的内容传送到AX中去
码段1
数据段
附加数 据段
码段2 数据段
……
……
5
一、 立即寻址 操作数直接放在指令中,紧跟在操作码的后面, 与操作码一起放在存储器的码段区域中。
MOV AX, 2030H
B8 2030
4000H 4001H 4002H 4003H 4004H
…… B8H 20H 30H ……
4000H
错误! 4001H
15
六、 基址加变址寻址 操作数存放在内存中,但其偏移地址是由三部分 相加而成:
基址寄存器内容+变址寄存器内容+偏移量
MOV AX, [BX+SI+0200H]
;欲传送的操作数在数据段中,其偏移地址是BX寄 存器中的内容加上SI寄存器中的内容加上0200H 基址寄存器只有2个:BX,默认的段基址为DS; BP,默认的段基址为SS。
BX中存放操作数 的偏移地址
其中,作为间址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
用BP寻址,段基址默认为堆栈段SS,其余3个的段 基址默认为数据段DS,同时指令允许段超越。
11
MOV BX, 0020H MOV AX, [BX] 码段
AX: 3412H
堆栈段
DS:0000H
20000H
100个字节
BL 34H BH
12H 20064H
22
只能对16位数进行操作,一次压入弹出两个字节 PUSH AH 错误!
必须对寄存器的内容或内存单元的内容进行操作
PUSH 2000H 错误! 设SP为0100H,SS为2000H, PUSH BP后,栈顶 的物理地址是: 20100H-2H=200FEH 下列指令中,错误的是:
微型计算机原理及应用
1
第二章 8086/8088指令系统
2
2.1 086/8088寻址方式
指令格式:
标号: 操作码 , 操作数 ; 注释
标号:内存码段中存放该指令的第一个字节的地址 操作码:操作的性质。 操作数:操作的对象,可以是操作数本身或存放 操作数的内存(I/O端口)地址。 注释:查看程序用,不参加编译运行。
相关文档
最新文档