当前位置:文档之家› 微机原理指令系统学习

微机原理指令系统学习

22
DS= 2000H SS=3000H BX=1000H BP=3000H
MOV AX, BX MOV AX, [3000H] MOV AX, [BX] MOV AL, [BP] MOV SI, 0002H MOV CX, [BX][SI] MOV DL, [BX+06H]
AX= 1000H AX= 2010H AX= 3412H AL= 1BH SI= 0002H CX= 7856H DL= DEH
23000H 10H 23001H 20H 23002H 30H 23003H 40H 23004H 50H 23005H 60H 23006H 70H 23007H 80H
33000H 1BH 33001H 2BH 33002H 3BH 33003H 4BH 33004H 5BH 33005H 6BH 33006H 7BH 33007H 8BH
MOV AX, BX MOV AL, BH
;将 BX中的内容传送到AX中去 ;将 BH中的内容传送到AL中去
MOV CL, AX
错误! 不匹配 8
二、 立即寻址 操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在存储器的代码段中(8/16位)。
MOV AX, 2030H 对应机器码: B8H 2030H
寄存器寻址 ;操作数存放在寄存器中 立即寻址 ;操作数存放在内存代码段 直接寻址 ;操作数存放在内存 寄存器间接寻址;操作数存放在内存 变址寻址 ;操作数存放在内存 基址加变址寻址 ;操作数存放在内存
7
一、 寄存器寻址
操作数放在CPU内部的寄存器中,可以是8位或16位寄存器,注意源操作数和目的操作数的位数应 一致。
AX
34
AH
12 AL
…… ……
内存内容 偏移地址
…… ……
12H 34H 56H ……
0000H 0001H …… 0020H 0021H 0022H ……
数据段 11
也可以指向内存中其他段的数据,这时要在相应的偏移地址前加段超越符和“ :”。 MOV AL, ES:[0020H]
;将 扩展段中偏移地址为0020H单元中的内容传送到AL中去
23
2.2 8086/8088指令系统
8088/8086指令系统可以分为以下六个功能组:
• 数据传送(Data Transter) • 算术运算(Arithmetic) • 逻辑运算(Logic) • 程序控制(Program Control) • 串操作(String Menipulation) • 标志处理 和CPU控制(Processor Control)
AX: 0078H
码段
堆栈段 DS:0000H
AX
00
AH
78 AL
…… ……
内存内容 偏移地址
…… ……
78H 00H 56H ……
0000H 0001H …… 1100H 1101H 1102H ……
数据段 15
例1:MOV AX, ES:[BX] ;传送的操作数在附加段中,偏移地址存放在BX中。
操作码 操作数…
操作码:计算机所要执行的操作,或指出操作类型,是一种助记符。
操作数:操作的对象,可以是操作数本身或存放操作数的内存(I/O端口)地址或其它有关操作数的 信息 。
4
汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址,它与 机器指令是一一对应的。
5
21000H 21001H 21002H 21003H 21004H 21005H 21006H 21007H
12H 34H 56H 78H 9AH BCH DEH F0H
31000H 31001H 31002H 31003H 31004H 31005H 31006H 31007H
1AH 2AH 3AH 4AH 5AH 6AH 7AH 8AH
寻址方式:是指令中用于说明如何寻找操作数的方法。
计算机中操作数常存放在以下几个地方: 指令代码中,存放常量;MOV AX, 2070H 寄存器中:MOV AX, BX 内存中: MOV AX, [2000H] I/O端口中(仅对IN/OUT指令): IN AL, 40H
6
8086/8088的基本寻址方式有六种:
25
注意: • CS,IP不能作为目的操作数 MOV CS, AX • 两个段寄存器间不能直接传送 MOV SS, DS • 立即数不能直接传送给段寄存器 MOV DS,2000H • 内存单元间不能直接传送 MOV [SI], [2000H] • 立即数不能作为目的操作数 MOV 1000H, AX
(1) [SP]BL SP+1SP (2) [SP]BH SP+1SP 先出数据, 再加指针,先低后高
20000H
100个字节
FFH
弹出低字节
SP
34H
弹出高字节
SP
12H
SP
20064H
29
注意: 只能对16位数进行操作,一次压入弹出一个字
PUSH AH;错 必须对寄存器的内容或内存单元的内容进行操作
MOV AX, [BX+SI+0200H]
;欲传送的操作数在数据段中,其偏移地址是BX寄存器中的内容加上SI寄存器中的内容加上0200H
MOV AX, VAL[BX+SI] MOV AX, 0200H[BX][SI] MOV AX, 0200H[BX][BP];错误 MOV AX, 0200H[SI][DI];错误 MOV AX, COUNT[BP+SI] ;欲取的数据在堆栈段
17
注意:用BP变址寻址,操作数默认在堆栈段,用其余3个寄存器时,操作数默认在数据段。
1、对DI、SI、BX变址寻址 物理地址: (DS)×16+计算出的偏移地址
2、对BP变址寻址 物理地址: (SS)×16+计算出的偏移地址 18
MOV DH, [SI+0200H]
;此时传送的操作数在数据段中,其偏移地址是SI寄存器中的内容加上0200H
SP
SP
SP 31
3. 交换指令XCHG 格式:XCHG OPRD1, OPRD2
功能:(OPRD1) (OPRD2) 完成通用寄存器之间,通用寄存器与累加器之间、与存储器之间8位,16位数据的相互交换。
例如:XCHG BL, AH
1) 内存之间的数据、累加器之间不可相互交换 2) CS,IP不能参与交换 3) 段寄存器和立即数不能作为一个操作数
20000H 100个字节 20064H
28
堆栈的操作有两种:入栈/出栈 1、格式:PUSH OPRD
功能: (OPRD)入栈
(1) SP-1SP AH[SP] (2) SP-1SP AL[SP] 先减指针, 再压数据, 先高后低
例: MOV AX, 1234H PUSH AX;入栈
2、格式:POP OPRD 功能: 栈顶内容送OPRD
4000H 4001H 4002H 4003H 4004H
…… B8H 30H 20H ……
注意别错!
4000H 4001H 4002H 4003H 4004H
内存偏移地址
单元内容
…… B8H
高字节 高地址 低字节 低地址
30H
20H
……
AX 20H AH
30H AL 9
三、 直接寻址 操作数存放在内存中,在指令中给出存放单元的偏移地址,如果不加说明,操作数默认在数据段。
24
一、数据传送指令 1. 通用数据传送指令 格式:MOV OPRD1, OPRD2 功能: (OPRD2) OPRD1 •CPU内部寄存器之间数据的传送(除CS、IP) •立即数传送至CPU内部的通用寄存器组 •CPU内部的寄存器(除CS、IP)与存储器(所有寻址方式)之间 •能实现用立即数给存储单元赋值
变址寻址可以有多种格式: MOV AX, [BX+0A00H] MOV AX, TAB[DI]
如:MOV AX, 0200H+[BX] 假设DS:3000H, BX: 1000H 则操作数所在地址:
高8位: 31201H 低8位: 31200H 19
六、 基址加变址寻址 操作数存放在内存中,但其偏移地址是由三部分相加而成:
13
注意:用BP间接寻址,操作数默认在堆栈段,用其余3个寄存器时,操作数默认在数据段。
1、对DI、SI、BX间接寻址 物理地址: (DS)×16+DI/SI/BX中给的16位偏移地址
2、对BP间接寻址 物理地址: (SS)×16+BP中给的16位偏移地址 14
MOV BX, 1100H MOV AX, [BX]
微机原理指令系统学习
第二章 8086/8088指令系统 2
2.1 寻址方式 2.2 8086/8088指令系统
2.2.1 数据传送指令 2.2.2 算术运算指令 2.2.3 逻辑运算和移位指令 2.2.4 程序控制指令 2.2.5 串操作指令 2.2.6 标志处理与CPU控制指令
3
2.1 8086/8088寻址方式 指令格式:
例2:MOV [BP], BX ;将BX中的内容传送到堆栈段中,其目的地的偏移地址存放在BP中。
例3: MOV [CX], 2000H ;错,不能对CX间接寻址
16
五、 变址寻址 操作数在内存中,由指定的寄存器内容,加上指令中给出的8位或16位偏移量作为操作数的偏移地址,计算 方法:
偏移地址=寄存器内容+指令中给定的偏移量 同样,作为变址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
27
2. 堆栈指令
堆栈是按先进后出的原则组织的一段内存区域,一般作临时存储器用(仓库)。其指针SP为16位的寄存器, 始终指向栈顶(货物堆放的位置)。堆栈的空间大小可用户指定。如:
相关主题