当前位置:文档之家› 第三章 指令系统

第三章 指令系统

2015/12/20 17
MOV AX,1050H[BX][SI] 若(BX)=2000H,(SI)=1600H, (DS)=1200H,指令中给出的偏移量为 1050H,则源操作数的物理地址为16650H

若用BX作为基址寄存器,则段寄存器为DS,操 作数在数据段中; 若用BP作为基址寄存器,则段寄存器为SS,操 作数在堆栈段中。
微机原理与接口技术 第三章 指令系统
2015/12/20
1
第一节 指令的基本结构和执行时间
指令 指令系统 8086/8088CPU的指令系统共包含92种基 本指令,按照功能可将它们分为6大类: • 数据传送指令 • 算术运算指令 • 逻辑运算和移位指令 • 串操作指令 • 控制转移指令 • 处理器控制指令

2015/12/20
10
四、寄存器间接寻址(Register Indirect Addressing) MOV AX,[DI] 指令中的16位寄存器的内容不是操作数,而是 操作数的偏移地址,操作数本身则在存储器中。 可用的寄存器有四个,分别是:SI、DI、BX 和BP,但如果使用不同的间址寄存器,则相 应的段寄存器有所不同
2015/12/20 18
基址加变址的寻址方式
2015/12/20
19
第三节 8086的指令系统


• 数据传送(Data transfer) • 算术运算(Arithmetic) • 逻辑运算和移位(Logic) • 串操作(String manipulation) • 控制转移(Control transfer) • 处理器控制(Processor control)
2015/12/20 35
例:
现要查出数值6对应的 ASCII码 LEA BX,Hex_table ;(BX)←表的首地址 MOV AL,6 ;(AL)←6 XLAT ;查表转换 结果为(AL)=36H,为6 所对应的ASCII码。
2015/12/20

36
字位扩展指令


操作数扩展的规则是:扩展时在高位添 加符号位,即将符号位扩展到整个高8位 (或高16位)。 例如,要把有符号数 35H 扩展为一个字, 则结果为0035H;而如果要扩展的数是 81H,则结果为FF81H。

2015/12/20
4
指令的执行时间 一条指令的执行时间包括取指令、取操作数、 执行指令及传送结果几部分,单位用时钟 周期表示 寄存器操作数的指令执行速度最快,立即 数操作数次之,存储器操作数指令的执行 速度最慢

2015/12/20 5
第二节 8086的寻址方式
一、立即寻址 (Immediate Addressing)
堆栈示意图

2015/12/20
29
堆栈操作指令PUSH,POP
PUSH src ;src的高8位→[(SP)-1] ;src的低8位→[(SP)-2] ;(SP)-2→(SP) POP dest ;[SP]→dest的低8位 ;[SP+1]→dest的高8位 ;(SP)+2→(SP)
2015/12/20 30
25
2015/12/20
使用MOV指令完成数据传送时需注意几点:
Biblioteka MOV指令的两个操作数的类型必须相同 MOV AX,DL ╳ 不能用一条MOV指令完成两个存储器单元之 间的数据传送 MOV [BX],[SI] ╳ 不能用立即数直接给段寄存器赋值 MOV DS,DATA ╳ 不能在段寄存器之间进行直接数据传送 MOV DS,ES ╳ 通常不要求用户用MOV指令修改代码段寄存 器CS和指令指针寄存器IP的内容,但CS可以 作为源操作数
32
POP AX指令执行示意图

2015/12/20
33
交换指令XCHG (Exchange)
指令格式及操作: XCHG dest,src ;(dest) ←→(src) 源操作数和目标操作数均可以是寄存器或存 储器,但不能同时为存储器。即可以在寄存器 与寄存器之间、寄存器与存储器之间进行交换, 但不能在存储器与存储器之间进行交换。 不能为段寄存器操作数。即段寄存器的内容 不能参加交换。 两个操作数的字长必须相同,可以是字节交 换,也可以是字交换。
16
六、基址-变址寻址(Based Indexed Addressing) 将BX和BP看作基址寄存器,将SI和DI看作变 址寄存器。 基址加变址的寻址方式: 把一个基址寄存器(BX 或BP)的内容加上一个变址寄存器(SI或DI) 的内容,再加上指令中指定的8位或16位位移量 (必须要以一个段寄存器作为地址基址),作为 操作数的地址 MOV AX,1050H[BX][SI]

2015/12/20
2

8086指令的一般格式如下: 操作码 [操作数],[操作数]
操作数主要分为3类: 立即数操作数、 寄存器操作数 存储器操作数。
2015/12/20 3

表3-2 隐含及允许超越的段寄存器 存储器操作的类型 隐含的段寄存器 允许超越的段寄存器 偏移地址 取指令 CS 无 IP 堆栈操作 SS 无 SP 通用数据读写 DS CS,ES,SS 有效地址 源数据串 DS CS,ES,SS SI 目标数据串 ES 无 DI 用BP作为基址寄存器 SS CS,DS,ES 有效地址
2015/12/20 23
⑴ 一般传送指令MOV (Movement) MOV dest,src ;(dest)←(src)



既可传送字节操作数(8位),也可传送 字操作数(16位); 可使用本章讨论过的各种寻址方式; 可实现以下各种传送:
24
2015/12/20
MOV可实现的各种传送:

26
2015/12/20

⑵ 堆栈操作指令PUSH和POP (Push word onto stack, Pop word off stack)
堆栈是内存中一个特定的区域,用以存放 寄存器或存储器中暂时不用但又必须保存 的数据。

2015/12/20
27
堆栈操作需要遵循以下原则:





堆栈的存取每次必须是一个字(16位); 向堆栈中存放数据时,总是从高地址向低地址方 向增长,从堆栈取数据时正好相反; 堆栈指令中的操作数只能是寄存器或存储器操作 数,而不能是立即数; 堆栈段在内存中的位置由 SS 决定,堆栈指针 SP 总是指向栈顶,即SP的内容等于当前栈顶的偏移 地址。在压入操作数之前, SP 先减 2 。每弹出一 个字,SP加2; 对堆栈的操作遵循“后进先出 (LIFO: Last In First Out)”的原则。最后压人堆栈的数据会最先 2015/12/20 28 被弹出。
指令中,操作数 src 和 dest 可以是以下三 种类型: 寄存器(包括数据寄存器、地址寄存器 和变址寄存器); 段寄存器( CS 除外。 PUSH CS 指令是 合法的;而POP CS是非法的); 存储器单元
2015/12/20 31
PUSH AX指令执行示意图

2015/12/20
2015/12/20 34
查表转移指令XLAT (Translate)
指令格式与操作: XLAT ;(AL)←[(BX)+(AL)] 或:XLAT src_table (src_table表示要查 找的表的首地址)
可以根据表中元素的序号查出表中相应元素的内容 应预先将要查找的这类代码排成一个表存放在内存的 某个区域中。 将表的首地址(偏移地址)送BX寄存器,要查找的元 素的序号送AL,表中第一个元素的序号为0,然后依次 为1,2,3,…。 执行XLAT指令后,标中指定序号的元素存于AL
2015/12/20
20

OPRD mem acc dest src disp DATA port () []
泛指各种类型的操作数 存储器操作数 累加器操作数 目的操作数 源操作数 8位或16位偏移量,可用符号地址表示 8位或16位立即数 输入输出端口,可用数字或表达式表示 表示寄存器的内容 表示存储单元的内容或偏移地址
2015/12/20
37
CBW (Convert Byte to Word)
CBW ; 若 (AL)<80H, 则 (AH)=00H;否则 (AH)=FFH。
CBW将一个字节的数(8位)扩展为一个字长的数(16位)。 指令中隐含了操作数AL和AH。CBW指令不影响标志位。
例如,把字节9AH扩展为字的语句如下: MOV AL,9AH CBW 其结果为:(AX)=FF9AH。
2015/12/20 13
无论用SI、DI、BX或BP作为间址寄存器, 都允许段超越。 MOV ES:[DI],AX MOV DX,DS:[BP]
2015/12/20
14



五、变址寻址(Indexed Addressing) 以指定的寄存器内容, 加上指令中给出的8位或 16位位移量(必须要以 一个段寄存器作为基地 址),作为操作数的地 址。 作为变址寻址的寄存器 可以是SI、DI、BX、 BP四个寄存器中的任一 个

主要用于给寄存器 或存储单元赋初值 MOV AX,3508H

2015/12/20
6
二、直接寻址(Direct Addressing) 直接寻址指令在指令的操作码后面直接 给出操作数的16位偏移地址。 此偏移地址也称为有效地址 EA(Effective Address),与指令的操 作码一起,存放在内存的代码段. 低8位存放在低地址单元,高8位存放在 高地址单元。


寄存器与寄存器之间的传送: MOV AL,CL 寄存器与段寄存器之间的传送: MOV DS,AX 寄存器与存储器之间的传送: MOV [3000H],AX 立即数到寄存器的传送: MOV AL,20H 立即数到存储器的传送: MOV BYTE PTR[BP+SI],20H 存储器与段寄存器之间的传送: MOV DS,[2000H]
相关主题