8086指令和机器码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
010
100 111 101 110
DX
SP DI BP SI
DL
AH BH CH DH
6
§3-2 指令的机器码表示方法
15 11 10 9 8 7 6 5 4 3 2 1 0
1
0
0
0
1
0
D
W
MOD
REG
R/M
操作码
典型的MOV指令的编码格式
MOD字段和R/M字段:
这类MOV指令的两个操作数中有一个必为寄存器,另一个操作数可能是
16
011
100 101
[BP]+[DI]
[SI] [DI]
[BP]+[DI]+D8
[SI]+D8 [DI]+D8
[BP]+[DI]+D16
[SI]+D16 [DI]+D16
BL
AH CH
BX
SP BP
110
111
D16(直接ቤተ መጻሕፍቲ ባይዱ址)
[BX]
[BP]+D8
[BX]+D8
[BP]+D16
[BX]+D16
DH
机器码
运算结果
8086指令的二进制编码非常多,很难以一张表实现指令与机器语言的对照。
为每种基本指令类型给出一个编码格式,对照格式填上不同的数字表示不同 的寻址方式、数据类型,即可求得每条指令的机器码。
8086指令系统采用变长指令,指令的长度可由1~6字节组成。
8086机器指令有零个或多个操作数。
MOD和R/M的编码( 见表3-2:24种不同的编码格式,D8表示8位位移量,
D16为16位位移量)
MOD(右) R/M(下) 000 001 010 [BX]+[SI] [BX]+[DI] [BP]+[SI] [BX]+[SI]+D8 [BX]+[DI]+D8 [BP]+[SI]+D8 [BX]+[SI]+D16 [BX]+[DI]+D16 [BP]+[SI]+D16 00 01 10 W=0 AL CL DL 11 W=1 AX CX DX
2
§3-2 指令的机器码表示方法
一、机器语言指令的编码目的和特点
1、零操作数指令
CLC ;机器码为F8H
2、单操作数指令
INC AX INC BX ;机器码为40H ;机器码为43H
3、双操作数指令
MOV AL, 04 ;机器码为B004H
4、三操作数指令
ADC AX, BX ;该指令完成操作数AX、BX和CF位相加。
3
§3-2 指令的机器码表示方法
二、机器语言指令代码的编制
1、编码格式说明:
以寄存器之间或寄存器与存储器之间交换数据的MOV指
令,来说明指令的编码格式。
15 11 10 9 8 7 6 5 4 3 2 1 0
1
0
0
0
1
0
D
W
MOD
REG
R/M
操作码
典型的MOV指令的编码格式
4
§3-2 指令的机器码表示方法
34H; 第4字节存放高字节12H 。
所以该指令的4字节编码为8A 8F 34 12H 。
11
§3-2 指令的机器码表示方法
例:求指令MOV CL, [BX+l234H]的机器码
12
§3-2 指令的机器码表示方法
4、立即数寻址指令的编码
例:求指令MOV [BX+2100H], 0FA50H的机器码
5
§3-2 指令的机器码表示方法
其中,第二个字节:
REG字段:寄存器号,用3位编码寻址8种不同的寄存器,再根据第一字节中 W位,选择8位或16位寄存器。如表3-l所示。(对使用段寄存器的指令,REG字
段占2位)
8086寄存器编码表
REG 000 011 001 W=1(字) AX BX CX W=0(字节) AL BL CL REG 01 11 00 10 段寄存器 CS DS ES SS
第三章 8086的寻址方式和指令系统
内容提要
8086的寻址方式
微机系统指令的机器码表示方法(自学) 8086的指令系统
1
§3-2 指令的机器码表示方法(自学)
一、机器语言指令的编码目的和特点
汇编语言源程序:
用汇编语言 (即主要由指令系统组成的语言)编写的程序。
编译程序 执行
源程序 编码特点:
BH
SI
DI
8
§3-2 指令的机器码表示方法
2、寄存器间传送指令的编码
例:求指令MOV SP,BX的机器码
解:指令的功能是将BX寄存器的内容送到SP寄存器中。 该指令的编码格式为:100010DW MOD REG R/M.
W=1:表示传送的是字数据;
REG字段:选择SP,则REG字段编码=100; D位=1:表示数据传至所选的寄存器(SP); MOD=11:因另一个操作数BX也是寄存器。 根据W=1及寄存器名称为BX,从表3-2查得R/M=011。 所以,该指令的2字节编码为8B E3H。
13
§3-2 指令的机器码表示方法
例:求指令MOV [BX+2100H], 0FA50H的机器码
14
§3-2 指令的机器码表示方法
5、包含段寄存器的指令的编码
例:求指令MOV DS, AX的机器码
解:指令的功能是将AX寄存器的内容传送到数据段寄存器DS。 该指令的编码格式为:10001110 MOD 0 REG R/M . 段寄存器DS的编码为11,即REG字段为11;另一个操作数也是 寄存器,所以MOD=11,而R/M字段应填上AX的三位代码000 .
解:指令的功能是将16位立即数送到指定有效地址的字存储单元 中;其中低字节50H送列[BX+2100H]单元,高字节FAH送到 (BX+2101H)单元。 该指令的编码格式为:110011W MOD 000 R/M 数据 数据
(若W=1).
指令中不但有16位立即数,还有16位位移量; 所以,该指令的6字节编码为C7 87 00 21 50 FA H。
9
§3-2 指令的机器码表示方法
例:求指令MOV SP,BX的机器码
10
§3-2 指令的机器码表示方法
3、寄存器与存储器间传送指令的编码
例:求指令MOV CL, [BX+l234H]的机器码
解:指令的功能是将有效地址为(BX+1234H)存储单元中的数据字 节传送到CL中。 该指令的编码格式为:100010DW MOD REG R/M 数据. 第1、2字节可通过查表得到;第3字节存放16位位移量的低字节
15 11 10 9 8 7 6 5 4 3 2 1 0
1
0
0
0
1
0
D
W
MOD
REG
R/M
操作码
典型的MOV指令的编码格式
其中,第一个字节: 高6位是操作码100010;
W位说明传递数据的类型是字(W=l)还是字节(W=0);
D位标明数据传送的方向:D=0,数据从寄存器传出; D=1,数据传至寄存器;
所以,该指令的2字节编码为8E D8H。
15
§3-2 指令的机器码表示方法
6、段超越前缀指令的编码
例:求指令MOV [BX], DL的机器码
解:指令的功能是将DL寄存器的内容传送到有效地址为(BX)的字节存储单元。
该指令(不带段超越前缀)的编码格式为:100010DW MOD 0 REG R/M . 数据从寄存器传出,则D=0;传递数据为字节,则W=0;进而,REG=010; 另一个操作数是存储器,所以MOD=00,而R/M=111 .该指令的编码是在不带段 超越前缀的指令代码为88 17H. 在指令代码前加一个8位的段超越的缀代码,代码的格式为001××110,其 中××位表明段超越寄存器。由于段寄存器CS的代码为01,所以指令的第1个字 节的编码为00101110,即 2EH. 所以,该指令的机器码为2E 88 17H。
寄存器,也可能是存储器单元,由指令代码的第二个字节个的MOD和R/M字 段指定。
对指令进行编码时,若包含8位位移量,则在编码后增加一个宇节存放位
移量disp-L;若包含16位的位移量,则增加2个字节存放位移量:第3个字节存 放位移量的低字节disp-L,第4个字节存放位移量高字节disp-H。
7
§3-2 指令的机器码表示方法