计组8086指令格式实验报告.doc

上传人:jian****018 文档编号:7979563 上传时间:2020-03-26 格式:DOC 页数:9 大小:100.50KB
返回 下载 相关 举报
计组8086指令格式实验报告.doc_第1页
第1页 / 共9页
计组8086指令格式实验报告.doc_第2页
第2页 / 共9页
计组8086指令格式实验报告.doc_第3页
第3页 / 共9页
点击查看更多>>
资源描述
实验二(基本要求)(第一回合)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 8086/8088 不同字长的指令码格式通常指令的第一字节为操作码,规定指令的操作类型;第二字节规定操作数的寻址方式;接着以后的36字节依据指令的不同取舍,可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。图2 8086/8088操作码及寻址方式字段格式第一字节中,W指出操作数类型:W=0为字节,W=1为字。D指出操作数的传送方向:D=0寄存器操作数为源操作数,D=1寄存器操作数为目标操作数。第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA的计算方法。MOD字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。MOD字段编码表见表1。(注:若第二操作数为立即数,则指令格式中无MOD字段,从第二字节起直接就是该操作数,且操作码另行编码。)表1 MOD 字段编码表及寻址方式选择MOD16位地址模式下32位地址模式下00存储器寻址,没有位移量存储器寻址,没有位移量01存储器寻址,有8位位移量存储器寻址,有8位位移量10存储器寻址,有16位位移量存储器寻址,有32位位移量11寄存器寻址,没有位移量寄存器寻址,没有位移量REG字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。由REG字段选择寄存器的具体规定见表2。表2 REG 字段编码表REG域编码W=1(字操作)W=0(字节操作)16位模式32位模式000AXEAXAL001CXECXCL010DXEDXDL011BXEBXBL100SPESPAH101BPEBPCH110SIESIDH111DIEDIBHR/M字段受MOD字段控制。若MOD=11,为寄存器方式,R/M字段将指出第二操作数所在寄存器编号。MOD=00,01,10为存储器方式,R/M则指出如何计算存储器中操作数地址。MOD与R/M字段组合的寻址方式见表3。表3 各种MOD与R/M字段组合编码及有关地址的计算(16位地址模式下)MOD=11寄存器寻址MOD11存储寻址、有效地址的计算公式R/MW=1W=0R/M不带位移l量MOD=00带8位位移量MOD=01带16位位移量MOD=10000AXAL000BX+SIBX+SI+D8BX+SI+D16001CXCL001BX+DIBX+DI+D8BX+SI+D16010DXDL010BP+SIBP+SI+D8BP+SI+D16011BXBL011BP+DIBP+DI+D8BP+DI+D16100SPAH100SISI+D8SI+D16101BPCH101DIDI+D8DI+D16110SIDH110(直接寻址)BP+D8BP+D16111DIBH111BXBX+D8BX+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 01000101指令码为:01 91 23 45H。一、用试探法-e 100 00 00 00 00 00 00(或用F命令填充100105单元内容都为0)-u 100 105个字节结论:操作码字节前六位为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,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,AL 印证了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位寄存器、AX为16位寄存器,印证了W字段的作用。三、将指令首字节变为02,重复以上实验 解读:跟第一条指令对比,第1字节由00(二进制0000 0000)变为02(二进制0000 0010),操作码还是一样,仍为ADD指令,另一个操作数的寻址方式仍为BX+SI;变化的只有第一字节的指出操作数的传送方向的D:D由0变为1,寄存器操作数由源操作数变为目标操作数,放在第一操作数的位置上,仍是第一条指令的AL。这条指令印证了D字段的作用。再来,变为03, 解读:跟第一条指令对比,第1字节由00(二进制0000 0000)变为02(二进制0000 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 ADD 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 100 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,其余无变化。不过此条反汇编结果无意义-e 100 06-u 100 101-e 100 07-u 100 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条字操作与字节操作选择,目的操作数与源操作数位置互换,寄存器操作数与立即数操作数选择,第七条入栈,第八条出栈这样子的规律。不过后期很多都不是这样的。具体看结果吧。1. 根据你的判断或查找有关资料,将实验中找出的8086/8088所有指令按以下类别进行合理归类(仅罗列指令助记符即可):数据传送类、算术运算类、逻辑运算类、程序控制类。例如:(1) 数据传送类:MOV、PUSH、POP(2) 算术运算类:ADD、ADC、CMP、INC、SUB、SBB(3) 逻辑运算类:OR、AND、XOR、TEST(4) 程序控制类:JMP、LOOP、CALL、JZ、INT信安一班 吴淑珍 201208060122实验二(较高要求)寻找80x86指令格式中寻址方式字段的编码规律本实验提供给已提前自行完成基本要求实验,并较好地理解了8086/8088指令操作码字段编码格式和规律的同学选做。必须先验收基本实验,才可进入本实验,如能较好地完成本实验任务,可获满分甚至附加分,并只需提交较高要求实验报告。建议同学在自己机器上提前完成基本实验。进入实验室先验收基本要求,然后开始本实验。实验任务:如前所述,8086/8088每条指令长16个字节,指令第1个字节为操作码主体加D位W位,第2个字节为寻址方式字段。在基本实验过程中,我们将第26字节全部固定为00。实际上,除单字节指令外,其余指令在寻址方式字段变化时,指令功能应该有变化。一、当第2字节变化时,指令功能有何不同?应该如何研究?怎样才能形成一张包含寻址方式字段的完整指令表?请你自行设计实验方案并完成实验,并提交简洁明了,条例清晰的实验报告。1、 分析总结寻址方式字段的规律; 答:1.。当MOD不变时,R、M按000到111顺次的选择地址计算方式,当MOD值变化时再按存储器无位移量,8为位移量,16位位移量和寄存器无位移量改;最后当MOD为111时,相应的2. 。根据W, REG依次按000到111选择的寄存器操作是是什么 3. 。MOD, 00到11依次选择字段编码表及寻址方式选择,先存储器,位移量由0到8,16,32,再到寄存器无位移量,从而影响RM的地址计算方式。2、 在你得到的指令全集中,有哪些是无意义的信息? 答: ADD al,00 和ADD ax,00,DB oF等; 凡是根据逻辑算得原来的寄存器里的数据没有发生改变,都相当于结果无意义。与立即数0(十进制)相加ADD 0,减去立即数0 SUB 0,与立即数1与 AND 1,与立即数0相或 OR 0, 与立即数0异或XOR 0等。 3、 找出源操作数为立即寻址方式时的指令编码规律; 当操作码最后一位为1时。这个可以从基本要求里的256条反汇编结果看出来。 二、为了得到寻址方式字段的完整指令表,你一定使用了DOS的输入输出重定向功能,该输入文件的内容是完全人工输入的,其实这个.txt文件的内容是一些很有规律的debug命令,你能尝试编程序自动生成这个文件吗?(用任何你熟悉的语言编程) 答:我使用了VISUAL C+,用c语言写入文件。以操作码00 00 00为例,固定D为0,W为0,单看寻址方式的部分。嵌套两个for循环,将指令的第二字节依次由变化为,相当于寻址方式字段由变化为,将写得的txt文件在debug运行一下,可看到反汇编结果,再分析寻址方式的改变。结果证明跟第一题的第一小问分析的一样。源程序:#includestdio.h#includestdlib.hvoid main()FILE*f;f=fopen(in.txt,w);int i,j;for(i=0;i16;i+)for(j=0;j16;j+)fprintf(f,e100 00);fprintf(f,%x%x ,i,j);fprintf(f,u 100 101n);fprintf(f,q);这里展示前16条指令反汇编结果,可以看出是在MOD和REG都没有变化时,指令依次根据RM变化,另一操作数形象地从表格上到下。-e100 00 00 -u100 1011403:0100 0000 ADDBX+SI,AL -e100 00 01 -u100 1011403:0100 0001 ADDBX+DI,AL -e100 00 02 -u100 1011403:0100 0002 ADDBP+SI,AL -e100 00 03 -u100 1011403:0100 0003 ADDBP+DI,AL -e100 00 04 -u100 1011403:0100 0004 ADDSI,AL -e100 00 05 -u100 1011403:0100 0005 ADDDI,AL -e100 00 06 -u100 1011403:0100 00060000 ADD0000,AL -e100 00 07 -u100 1011403:0100 0007 ADDBX,AL -e100 00 08 -u100 1011403:0100 0008 ADDBX+SI,CL -e100 00 09 -u100 1011403:0100 0009 ADDBX+DI,CL -e100 00 0a -u100 1011403:0100 000A ADDBP+SI,CL -e100 00 0b -u100 1011403:0100 000B ADDBP+DI,CL -e100 00 0c -u100 1011403:0100 000C ADDSI,CL -e100 00 0d -u100 1011403:0100 000D ADDDI,CL -e100 00 0e -u100 1011403:0100 000E0000 ADD0000,CL -e100 00 0f -u100 1011403:0100 000F ADDBX,CL 同时也可从第一条跟第九条指令,第二条跟第十条指令,.,看出当REG变化时,寄存器操作数形象地从表格的上到下移动,纵向变化。现在对比以下指令,只有MOD变化了, -e100 00 00 -u100 1011403:0100 0000 ADDBX+SI,AL 寻址字节编码为() -e100 00 40 -u100 1011403:0100 004000 ADDBX+SI+00,AL 寻址字节编码为() -e100 00 80 -u100 1011403:0100 00800000 ADDBX+SI+0000,AL 寻址字节编码为()-e100 00 c0 -u100 1011403:0100 00C0 ADDAL,AL 寻址字节编码为() 在REG和RM不变的情况下,MOD的变化改变了寻找另一操作数的存储位置方式,跟RM结合起来,就是另一操作数的地址计算方式在RM表格3上横向变化。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!