微机原理指令系统学习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1) [SP]BL SP+1SP (2) [SP]BH SP+1SP 先出数据, 再加指针,先低后高
20000H
100个字节
FFH
弹出低字节
SP
34H
弹出高字节
SP
12H
SP
20064H
29
注意: 只能对16位数进行操作,一次压入弹出一个字
PUSH AH;错 必须对寄存器的内容或内存单元的内容进行操作
寄存器寻址 ;操作数存放在寄存器中 立即寻址 ;操作数存放在内存代码段 直接寻址 ;操作数存放在内存 寄存器间接寻址;操作数存放在内存 变址寻址 ;操作数存放在内存 基址加变址寻址 ;操作数存放在内存
7
一、 寄存器寻址
操作数放在CPU内部的寄存器中,可以是8位或16位寄存器,注意源操作数和目的操作数的位数应 一致。
操作Байду номын сангаас 操作数…
操作码:计算机所要执行的操作,或指出操作类型,是一种助记符。
操作数:操作的对象,可以是操作数本身或存放操作数的内存(I/O端口)地址或其它有关操作数的 信息 。
4
汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址,它与 机器指令是一一对应的。
5
MOV AX, 1000H PUSH AX MOV BX, AX PUSH [BX] POP [1002H] POP BX
BX= 1000H
BX=1000H
30000H 30001H
……
……
……
30060H
30061H 12H 30062H
34H 30063H
00H 30064H
10H
21000H 12H 21001H 34H 21002H 125H6H 21003H 347H8H 21004H 9AH 21005H BCH 21006H DEH 21007H F0H
寻址方式:是指令中用于说明如何寻找操作数的方法。
计算机中操作数常存放在以下几个地方: 指令代码中,存放常量;MOV AX, 2070H 寄存器中:MOV AX, BX 内存中: MOV AX, [2000H] I/O端口中(仅对IN/OUT指令): IN AL, 40H
6
8086/8088的基本寻址方式有六种:
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]
23
2.2 8086/8088指令系统
8088/8086指令系统可以分为以下六个功能组:
• 数据传送(Data Transter) • 算术运算(Arithmetic) • 逻辑运算(Logic) • 程序控制(Program Control) • 串操作(String Menipulation) • 标志处理 和CPU控制(Processor Control)
MOV SS:[0100H], BX ;将 BX中的内容传送到堆栈段中偏移地址为0100H、0101H的单元中去
12
四、 寄存器间接寻址 操作数存放在内存中,但其偏移地址存放在指令中给出的寄存器中。
MOV AX, [BX]
BX中存放操作数的偏移地址
其中,作为间接寻址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
MOV AX, BX MOV AL, BH
;将 BX中的内容传送到AX中去 ;将 BH中的内容传送到AL中去
MOV CL, AX
错误! 不匹配 8
二、 立即寻址 操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在存储器的代码段中(8/16位)。
MOV AX, 2030H 对应机器码: B8H 2030H
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
24
一、数据传送指令 1. 通用数据传送指令 格式:MOV OPRD1, OPRD2 功能: (OPRD2) OPRD1 •CPU内部寄存器之间数据的传送(除CS、IP) •立即数传送至CPU内部的通用寄存器组 •CPU内部的寄存器(除CS、IP)与存储器(所有寻址方式)之间 •能实现用立即数给存储单元赋值
例2:MOV [BP], BX ;将BX中的内容传送到堆栈段中,其目的地的偏移地址存放在BP中。
例3: MOV [CX], 2000H ;错,不能对CX间接寻址
16
五、 变址寻址 操作数在内存中,由指定的寄存器内容,加上指令中给出的8位或16位偏移量作为操作数的偏移地址,计算 方法:
偏移地址=寄存器内容+指令中给定的偏移量 同样,作为变址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
25
注意: • CS,IP不能作为目的操作数 MOV CS, AX • 两个段寄存器间不能直接传送 MOV SS, DS • 立即数不能直接传送给段寄存器 MOV DS,2000H • 内存单元间不能直接传送 MOV [SI], [2000H] • 立即数不能作为目的操作数 MOV 1000H, AX
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
SP
SP
SP 31
3. 交换指令XCHG 格式:XCHG OPRD1, OPRD2
功能:(OPRD1) (OPRD2) 完成通用寄存器之间,通用寄存器与累加器之间、与存储器之间8位,16位数据的相互交换。
例如:XCHG BL, AH
1) 内存之间的数据、累加器之间不可相互交换 2) CS,IP不能参与交换 3) 段寄存器和立即数不能作为一个操作数
4000H 4001H 4002H 4003H 4004H
…… B8H 30H 20H ……
注意别错!
4000H 4001H 4002H 4003H 4004H
内存偏移地址
单元内容
…… B8H
高字节 高地址 低字节 低地址
30H
20H
……
AX 20H AH
30H AL 9
三、 直接寻址 操作数存放在内存中,在指令中给出存放单元的偏移地址,如果不加说明,操作数默认在数据段。
26
MOV BL, AX MOV 100, CX MOV [SI], DI MOV CS, AX MOV [SI], [DI] MOV BH, 2[DI] MOV AX, CS MOV SS, 2400H MOV [BP+4], AX
错误,不匹配 错误,立即数不能赋值 正确 错误,CS不能赋值 错误,内存间不能直接传送 正确 正确 错误,段寄存器不能赋立即数 正确
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+0A00H] MOV AX, TAB[DI]
如:MOV AX, 0200H+[BX] 假设DS:3000H, BX: 1000H 则操作数所在地址:
高8位: 31201H 低8位: 31200H 19
六、 基址加变址寻址 操作数存放在内存中,但其偏移地址是由三部分相加而成:
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] ;欲取的数据在堆栈段
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
27
2. 堆栈指令
堆栈是按先进后出的原则组织的一段内存区域,一般作临时存储器用(仓库)。其指针SP为16位的寄存器, 始终指向栈顶(货物堆放的位置)。堆栈的空间大小可用户指定。如:
SS的值为 2000H 表示堆栈从20000H处开始
假设用户定义堆栈为100个字节,则SP自动设置为0064H SP:0064H
17
注意:用BP变址寻址,操作数默认在堆栈段,用其余3个寄存器时,操作数默认在数据段。
1、对DI、SI、BX变址寻址 物理地址: (DS)×16+计算出的偏移地址
2、对BP变址寻址 物理地址: (SS)×16+计算出的偏移地址 18
MOV DH, [SI+0200H]
;此时传送的操作数在数据段中,其偏移地址是SI寄存器中的内容加上0200H
微机原理指令系统学习
第二章 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个:BX,默认的操作数在数据段;BP,默认的操作数在堆栈段。
变址寄存器只有2个:SI和DI。 偏移量同样由指令给出。
20
1、BX作为基地址
物理地址: (DS)×16+计算出的偏移地址
2、BP作为基地址
物理地址: (SS)×16+计算出的偏移地址 21
XCHG AX, [BX]
32
4. 累加器专用指令(只与AX或AL有关,与AH无关)
1)输入输出指令 输入
CPU
PUSH 2000H;错 PUSH [2000H]; 对
例:设SP为0100H,SS为2000H, PUSH BX后,栈顶的物理地址是: 20100H-2H=200FEH
而执行POP BX后,栈顶的物理地址是: 20100H+2H=20102H 30
例:设DS= 2000H SS=3000H SP=0064H,执行下列程序:
物理地址: (DS)×16+指令中给的16位偏移地址 MOV AX, [0020H]
;将 数据段偏移地址为0020H的地址中的内容传送到AX中去,相当于: MOV AX, DS:[0020H] 注意:书写时加方括号。
10
MOV AX, [0020H] AX: 3412H
码段
堆栈段 DS:0000H
AX
34
AH
12 AL
…… ……
内存内容 偏移地址
…… ……
12H 34H 56H ……
0000H 0001H …… 0020H 0021H 0022H ……
数据段 11
也可以指向内存中其他段的数据,这时要在相应的偏移地址前加段超越符和“ :”。 MOV AL, ES:[0020H]
;将 扩展段中偏移地址为0020H单元中的内容传送到AL中去
AX: 0078H
码段
堆栈段 DS:0000H
AX
00
AH
78 AL
…… ……
内存内容 偏移地址
…… ……
78H 00H 56H ……
0000H 0001H …… 1100H 1101H 1102H ……
数据段 15
例1:MOV AX, ES:[BX] ;传送的操作数在附加段中,偏移地址存放在BX中。
20000H
100个字节
FFH
弹出低字节
SP
34H
弹出高字节
SP
12H
SP
20064H
29
注意: 只能对16位数进行操作,一次压入弹出一个字
PUSH AH;错 必须对寄存器的内容或内存单元的内容进行操作
寄存器寻址 ;操作数存放在寄存器中 立即寻址 ;操作数存放在内存代码段 直接寻址 ;操作数存放在内存 寄存器间接寻址;操作数存放在内存 变址寻址 ;操作数存放在内存 基址加变址寻址 ;操作数存放在内存
7
一、 寄存器寻址
操作数放在CPU内部的寄存器中,可以是8位或16位寄存器,注意源操作数和目的操作数的位数应 一致。
操作Байду номын сангаас 操作数…
操作码:计算机所要执行的操作,或指出操作类型,是一种助记符。
操作数:操作的对象,可以是操作数本身或存放操作数的内存(I/O端口)地址或其它有关操作数的 信息 。
4
汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址,它与 机器指令是一一对应的。
5
MOV AX, 1000H PUSH AX MOV BX, AX PUSH [BX] POP [1002H] POP BX
BX= 1000H
BX=1000H
30000H 30001H
……
……
……
30060H
30061H 12H 30062H
34H 30063H
00H 30064H
10H
21000H 12H 21001H 34H 21002H 125H6H 21003H 347H8H 21004H 9AH 21005H BCH 21006H DEH 21007H F0H
寻址方式:是指令中用于说明如何寻找操作数的方法。
计算机中操作数常存放在以下几个地方: 指令代码中,存放常量;MOV AX, 2070H 寄存器中:MOV AX, BX 内存中: MOV AX, [2000H] I/O端口中(仅对IN/OUT指令): IN AL, 40H
6
8086/8088的基本寻址方式有六种:
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]
23
2.2 8086/8088指令系统
8088/8086指令系统可以分为以下六个功能组:
• 数据传送(Data Transter) • 算术运算(Arithmetic) • 逻辑运算(Logic) • 程序控制(Program Control) • 串操作(String Menipulation) • 标志处理 和CPU控制(Processor Control)
MOV SS:[0100H], BX ;将 BX中的内容传送到堆栈段中偏移地址为0100H、0101H的单元中去
12
四、 寄存器间接寻址 操作数存放在内存中,但其偏移地址存放在指令中给出的寄存器中。
MOV AX, [BX]
BX中存放操作数的偏移地址
其中,作为间接寻址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
MOV AX, BX MOV AL, BH
;将 BX中的内容传送到AX中去 ;将 BH中的内容传送到AL中去
MOV CL, AX
错误! 不匹配 8
二、 立即寻址 操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在存储器的代码段中(8/16位)。
MOV AX, 2030H 对应机器码: B8H 2030H
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
24
一、数据传送指令 1. 通用数据传送指令 格式:MOV OPRD1, OPRD2 功能: (OPRD2) OPRD1 •CPU内部寄存器之间数据的传送(除CS、IP) •立即数传送至CPU内部的通用寄存器组 •CPU内部的寄存器(除CS、IP)与存储器(所有寻址方式)之间 •能实现用立即数给存储单元赋值
例2:MOV [BP], BX ;将BX中的内容传送到堆栈段中,其目的地的偏移地址存放在BP中。
例3: MOV [CX], 2000H ;错,不能对CX间接寻址
16
五、 变址寻址 操作数在内存中,由指定的寄存器内容,加上指令中给出的8位或16位偏移量作为操作数的偏移地址,计算 方法:
偏移地址=寄存器内容+指令中给定的偏移量 同样,作为变址的寄存器只能有4个:BX, SI, DI, BP,其他寄存器无此功能。
25
注意: • CS,IP不能作为目的操作数 MOV CS, AX • 两个段寄存器间不能直接传送 MOV SS, DS • 立即数不能直接传送给段寄存器 MOV DS,2000H • 内存单元间不能直接传送 MOV [SI], [2000H] • 立即数不能作为目的操作数 MOV 1000H, AX
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
SP
SP
SP 31
3. 交换指令XCHG 格式:XCHG OPRD1, OPRD2
功能:(OPRD1) (OPRD2) 完成通用寄存器之间,通用寄存器与累加器之间、与存储器之间8位,16位数据的相互交换。
例如:XCHG BL, AH
1) 内存之间的数据、累加器之间不可相互交换 2) CS,IP不能参与交换 3) 段寄存器和立即数不能作为一个操作数
4000H 4001H 4002H 4003H 4004H
…… B8H 30H 20H ……
注意别错!
4000H 4001H 4002H 4003H 4004H
内存偏移地址
单元内容
…… B8H
高字节 高地址 低字节 低地址
30H
20H
……
AX 20H AH
30H AL 9
三、 直接寻址 操作数存放在内存中,在指令中给出存放单元的偏移地址,如果不加说明,操作数默认在数据段。
26
MOV BL, AX MOV 100, CX MOV [SI], DI MOV CS, AX MOV [SI], [DI] MOV BH, 2[DI] MOV AX, CS MOV SS, 2400H MOV [BP+4], AX
错误,不匹配 错误,立即数不能赋值 正确 错误,CS不能赋值 错误,内存间不能直接传送 正确 正确 错误,段寄存器不能赋立即数 正确
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+0A00H] MOV AX, TAB[DI]
如:MOV AX, 0200H+[BX] 假设DS:3000H, BX: 1000H 则操作数所在地址:
高8位: 31201H 低8位: 31200H 19
六、 基址加变址寻址 操作数存放在内存中,但其偏移地址是由三部分相加而成:
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] ;欲取的数据在堆栈段
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
27
2. 堆栈指令
堆栈是按先进后出的原则组织的一段内存区域,一般作临时存储器用(仓库)。其指针SP为16位的寄存器, 始终指向栈顶(货物堆放的位置)。堆栈的空间大小可用户指定。如:
SS的值为 2000H 表示堆栈从20000H处开始
假设用户定义堆栈为100个字节,则SP自动设置为0064H SP:0064H
17
注意:用BP变址寻址,操作数默认在堆栈段,用其余3个寄存器时,操作数默认在数据段。
1、对DI、SI、BX变址寻址 物理地址: (DS)×16+计算出的偏移地址
2、对BP变址寻址 物理地址: (SS)×16+计算出的偏移地址 18
MOV DH, [SI+0200H]
;此时传送的操作数在数据段中,其偏移地址是SI寄存器中的内容加上0200H
微机原理指令系统学习
第二章 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个:BX,默认的操作数在数据段;BP,默认的操作数在堆栈段。
变址寄存器只有2个:SI和DI。 偏移量同样由指令给出。
20
1、BX作为基地址
物理地址: (DS)×16+计算出的偏移地址
2、BP作为基地址
物理地址: (SS)×16+计算出的偏移地址 21
XCHG AX, [BX]
32
4. 累加器专用指令(只与AX或AL有关,与AH无关)
1)输入输出指令 输入
CPU
PUSH 2000H;错 PUSH [2000H]; 对
例:设SP为0100H,SS为2000H, PUSH BX后,栈顶的物理地址是: 20100H-2H=200FEH
而执行POP BX后,栈顶的物理地址是: 20100H+2H=20102H 30
例:设DS= 2000H SS=3000H SP=0064H,执行下列程序:
物理地址: (DS)×16+指令中给的16位偏移地址 MOV AX, [0020H]
;将 数据段偏移地址为0020H的地址中的内容传送到AX中去,相当于: MOV AX, DS:[0020H] 注意:书写时加方括号。
10
MOV AX, [0020H] AX: 3412H
码段
堆栈段 DS:0000H
AX
34
AH
12 AL
…… ……
内存内容 偏移地址
…… ……
12H 34H 56H ……
0000H 0001H …… 0020H 0021H 0022H ……
数据段 11
也可以指向内存中其他段的数据,这时要在相应的偏移地址前加段超越符和“ :”。 MOV AL, ES:[0020H]
;将 扩展段中偏移地址为0020H单元中的内容传送到AL中去
AX: 0078H
码段
堆栈段 DS:0000H
AX
00
AH
78 AL
…… ……
内存内容 偏移地址
…… ……
78H 00H 56H ……
0000H 0001H …… 1100H 1101H 1102H ……
数据段 15
例1:MOV AX, ES:[BX] ;传送的操作数在附加段中,偏移地址存放在BX中。