计组8086指令格式实验报告

上传人:平*** 文档编号:5649063 上传时间:2017-09-07 格式:DOC 页数:9 大小:101KB
返回 下载 相关 举报
计组8086指令格式实验报告_第1页
第1页 / 共9页
计组8086指令格式实验报告_第2页
第2页 / 共9页
计组8086指令格式实验报告_第3页
第3页 / 共9页
计组8086指令格式实验报告_第4页
第4页 / 共9页
计组8086指令格式实验报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《计组8086指令格式实验报告》由会员分享,可在线阅读,更多相关《计组8086指令格式实验报告(9页珍藏版)》请在金锄头文库上搜索。

1、1实验二(基本要求)(第一回合)8086/8088 指令系统采用了一种灵活的,由 16 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数 3 部分,如图 1 所示。操作码 操作码 MOD 操作码 DATA8/DISP8 操作码 MOD DATA8/DISP8 操作码 DATA/DISP16(低) DATA/DISP16(高) 操作码 MOD DATA/DISP16(低) DATA/DISP16(高)操作码 MOD DISP 16 (低) DISP16 (高 ) DATA8 操作码 MOD DISP16 (低) DISP16 (高 ) DATA16 (低) DATA16(高) 图1

2、8086/8088 不同字长的指令码格式通常指令的第一字节为操作码,规定指令的操作类型;第二字节规定操作数的寻址方式;接着以后的 36 字节依据指令的不同取舍,可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。图 2 8086/8088 操作码及寻址方式字段格式第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址 EA 的计算方法。MOD字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储

3、器寻址) 。在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。MOD字段编码表见表1。(注:若第二操作数为立即数,则指令格式中无MOD字段,从第二字节起直接就是该操作数,且操作码另行编码。)表1 MOD 字段编码表及寻址方式选择MOD 16位地址模式下 32位地址模式下00 存储器寻址,没有位移量 存储器寻址,没有位移量01 存储器寻址,有8位位移量 存储器寻址,有8位位移量10 存储器寻址,有16位位移量 存储器寻址,有32位位移量11 寄存器寻址,没有位移量 寄存器寻址,没有位移量REG字段规定一个寄存器操作数,它作为源操作数还是目标操作数

4、已由第一个字节中的D 位规定。由REG字段选择寄存器的具体规定见表 2。表2 REG 字段编码表REG域W=1(字操作) W=0(字节2编码16位模式32位模式 操作 )000 AX EAX AL001 CX ECX CL010 DX EDX DL011 BX EBX BL100 SP ESP AH101 BP EBP CH110 SI ESI DH111 DI EDI BHR/M字段受MOD字段控制。若MOD=11,为寄存器方式,R/M字段将指出第二操作数所在寄存器编号。MOD=00 , 01,10为存储器方式,R/M 则指出如何计算存储器中操作数地址。MOD与R/M字段组合的寻址方式见表3

5、。表3 各种MOD与R/M字段组合编码及有关地址的计算(16位地址模式下)MOD=11寄存器寻址 MOD11存储寻址、有效地址的计算公式R/M W=1 W=0 R/M 不带位移l量MOD=00带8位位移量MOD=01 带16位位移量MOD=10000 AX AL 000 BX+SI BX+SI+D8 BX+SI+D16001 CX CL 001 BX+DI BX+DI+D8 BX+SI+D16010 DX DL 010 BP+SI BP+SI+D8 BP+SI+D16011 BX BL 011 BP+DI BP+DI+D8 BP+DI+D16100 SP AH 100 SI SI+D8 SI+

6、D16101 BP CH 101 DI DI+D8 DI+D16110 SI DH 110 (直接寻址) BP+D8 BP+D16111 DI BH 111 BX BX+D8 BX+D16例如:指令 MOV AH,BX+DI+50H 。代码格式如下。OPCODE D W MOD REG R/M DISP8100010 1 0 01 100 001 01010000指令码:8A6150H。指令ADD DISP BX DI,DX;DISP=4523H代码格式:OPCODE D W MOD REG R/M DISPLo DISPHi000000 0 1 10 010 001 00100011 010

7、00101指令码为:01 91 23 45H。一、用试探法-e 100 00 00 00 00 00 00(或用 F 命令填充 100105 单元内容都为 0)-u 100 105 个字节3结论:操作码字节前六位为 000000(二进制)看来是一条 ADD 指令,而且只占两个字节。上述指令即为三个指令码为 00 00 的指令解读指令码为 00 00 代码格式:OPCODE D W MOD REG R/M 000000 0 0 00 000 000 OPCODE:可有反汇编结果看出当操作码是000000是执行加法指令;D:D指出操作数的传送方向:D=0寄存器操作数为源操作数,而指令 ADD A,

8、B表示A=A+B,所以寄存器操作数放在右边;W:W指出操作数类型:W=0 为字节;REG:字段规定一个寄存器操作数,上面 已经判断它作为源操作数。由REG字段选择寄存器的具体规定查表1,知当W=0,REG=000时,寄存器操作数选择AL;MOD:MOD 字段用来区分另一个操作数,查MOD字段编码表表 2知,当MOD=00 的16位地址模式下为存储器寻址,没有位移量;R/M:R/M字段受MOD字段控制, MOD=00为存储器方式,R/M 则指出如何计算存储器中操作数地址,查MOD与R/M字段组合的寻址方式表3知,不带位移量MOD=00时,寻址方式为BX+SI;综上,指令为 ADD BX+SI,A

9、L 印证了8086/8088 指令码格式。2、将指令首字节变为 01,重复以上实验 (观察第一条指令即可)代码格式:OPCODE D W MOD REG R/M 000000 0 1 00 000 000 解读:跟第一条指令对比,第 1 字节由 00(二进制 0000 0000)变为 01(二进制 0000 0001) ,操作码还是一样,仍为 ADD 指令,另一个操作数的寻址方式仍为BX+SI;变化的只有第一字节的指出操作数类型的 W,W 由 0 变为 1,而 REG 字段选择寄存器方式受W 影响,查表 2 REG 字段编码表知,源操作数由 AL 变为 16 位模式下的 AX。AL 为 8 位

10、寄存器、AX 为 16 位寄存器,印证了 W 字段的作用。三、将指令首字节变为 02,重复以上实验解读:跟第一条指令对比,第 1 字节由 00(二进制 0000 0000)变为 02(二进制 0000 0010) ,操作码还是一样,仍为 ADD 指令,另一个操作数的寻址方式仍为BX+SI;变化的只有第一字节的指出操作数的传送方向的 D:D 由 0 变为 1,寄存器操作数由源操作数变为目标操作数,放在第一操作数的位置上,仍是第一条指令的 AL。这条指令印证了 D字段的作用。再来,变为 03,4解读:跟第一条指令对比,第 1 字节由 00(二进制 0000 0000)变为 02(二进制 0000

11、00111) ,操作码还是一样,仍为 ADD 指令,其中一个操作数的寻址方式仍为BX+SI;变化的是:(1)第一字节的指出操作数类型的 W,W 由 0 变为 1,而 REG 字段选择寄存器方式受 W 影响,查表 2 REG 字段编码表知,源操作数由 AL 变为 16 位模式下的AX;(2)第一字节的指出操作数的传送方向的 D:D 由 0 变为 1,寄存器操作数由源操作数变为目标操作数,放在第一操作数的位置上。这条指令同事印证了 D 和 W 的作用。上诉四条印证了指令 D 和 W 变化,记下:指令码 汇编指令-0AE9:0100 0000 ADD BX+SI,AL0AE9:0100 0100 A

12、DD BX+SI,AX0AE9:0100 0200 ADD AL,BX+SI0AE9:0100 0300 ADD AX,BX+SI解读:以第一条指令格式作为标准对比,第二条指令的 W 变化,操作数类型改变,源操作数(第二操作数)的选择发生改变,可根据对应表格查出;第三条指令的 D 变化,操作数的传送方向改变,源操作数变为目的操作数,两个操作数的位置互换;第四条指令的 W和 D 同时发生改变,操作数类型和操作数的传送方向同时改变,寄存器操作数由 AL 变为AX,两操作数的位置也互换了。上诉四条指令清楚地印证了 D、W 的改变对指令的影响变化。(第二回合)一、首字节为 0407,继续实验-e 10

13、0 04-u 100 105(为免遗漏,还是对 6 个字节均进行反汇编)代码格式:OPCODE D W MOD REG R/M 000001 0 0 00 000 000 解读:可从反汇编的结果看出,操作码为 000001 时执行的是立即数加法,仍为 ADD指令,但另一操作数改为立即数,这里的第二字节为 00,立即数为 00。寄存器操作数还是AL. 不过这个指令结果无意义。-e 100 05-u 100 105解读:相对于上一条的指令,这条指令变化的只有 W 位,REG 相应变化为 AX,其余5无变化。不过此条反汇编结果无意义-e 100 06-u 100 101-e 100 07-u 100

14、 101得到四条新的记录,出现了第 1 个 3 字节指令 050000(ADD AX,0000) ,还捕获了两条新的单字节指令:指令码 汇编指令-0AE9:0100 0000 ADD BX+SI,AL0AE9:0100 0100 ADD BX+SI,AX0AE9:0100 0200 ADD AL,BX+SI0AE9:0100 0300 ADD AX,BX+SI0AE9:0100 0400 ADD AL,000AE9:0100 050000 ADD AX,00000AE9:0100 06 PUSH ES0AE9:0100 07 POP ES解读:可以看出操作码为 000001 的都是对立即数进行操作。二、256 条指令反汇编结果。256 条指令反汇编结果可按照以上解读分析。不过我对于什么时候是立即数操作和什么时候是寄存器操作数操作弄得不是很清楚。不过这都是操作码规定好了的。从基本要求的结果可以看出,一开始有 ADD,OR,ADC,SBB,AND,SUB,XOR,INC,DEC等基本按照前 1-6 条字操作与字节操作选择,目的操作数与源操作数位置互换,寄存器操作数与立即数操作数选择,第七条入栈,第八条出栈这样

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号