当前位置:文档之家› 8086/8088指令系统

8086/8088指令系统

8086/8088指令系统
8086/8088指令系统

CH02 8086/8088指令系统

习题与思考题

1.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?源操作数在哪里?如在存储器中请写出其物理地址是多少?

(1)MOV AX,0ABH (2)MOV AX,[100H]

(3)MOV AX,V AL (4)MOV BX,[SI]

(5)MOV AL,V AL[BX] (6)MOV CL,[BX][SI]

(7)MOV V AL[SI],BX (8)MOV [BP][SI],100

解答:

(1)MOV AX,0ABH

寻址方式:立即寻址;物理地址:无

(2)MOV AX,[100H]

寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+100H=2000H*16+100H=20100H

(3)MOV AX,V AL

寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+V AL=2000H*16+0050H=20050H

(4)MOV BX,[SI]

寻址方式:寄存器间接寻址;源操作数在存储器中;物理地址:DS*16+SI=2000H*16+00A0H=200A0H

(5)MOV AL,V AL[BX]

寻址方式:变址寻址;源操作数在存储器中;物理地址:DS*16+V AL+BX=2000H*16+0050H+0100

=20150H

(6)MOV CL,[BX][SI]

寻址方式:基址加变址寻址;源操作数在存储器中;物理地址:DS*16+BX+SI=2000H*16+0100H+00A0H

=201A0H

(7)MOV V AL[SI],BX

寻址方式:寄存器寻址;源操作数在寄存器中;物理地址:无

(8)MOV [BP][SI],100

寻址方式:立即寻址;物理地址:无

2.设有关寄存器及存储单元的内容如下:

DS=2000H,BX=0100H,AX=1200H,SI=0002H,[20100H]=12H,[20101H]=34H,

[20102H]=56H,[20103]=78H,[21200]=2AH,[21201H]=4CH,[21202H]=0B7H,[21203H]=65H。

试说明下列各条指令单独执行后相关寄存器或存储单元的内容。

(1)MOV AX,1800H (2)MOV AX,BX

(3)MOV BX,[1200H] (4)MOV DX,1100[BX]

(5)MOV [BX][SI],AL (6)MOV AX,1100[BX][SI]

3.假定BX=0E3H,变量V ALUE=79H,确定下列指令执行后的结果(操作数均为无符号数。对3、6,写出相应标志位的状态)。

(1)ADD V ALUE,BX (2)AND BX,V ALUE

(3)CMP BX,V ALUE (4)XOR BX,0FFH

(5)DEC BX (6)TEST BX,01H

4.已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。(标出存储单元的地址)

解答:

00AD H 00AEH 00AF H

0F F A0:00B0H

···

F F AACH F F AAD H F F AAEH F F AAF H F F AB0H

···

00ACH X F F AABH 00AD H 00AEH 00AF H

0F F A0:00B0H

···

57H 80H F F AACH F F AAD H F F AAEH F F AAF H F F AB0H

···

00ACH X F F AABH ①初始状态;S P =00B0H

②P US H AX ;(AX =8057H )S P =00AEH

00AD H 00AEH 00AF H

0F F A0:00B0H

···

79H 0F H 57H 80H F F AACH F F AAD H F F AAEH F F AAF H F F AB0H

···00ACH X F F AABH 00AD H 00AEH 00AF H

0F F A0:00B0H

···

57H 80H F F AACH F F AAD H F F AAEH F F AAF H F F AB0H

···

00ACH X F F AABH ③P US H BX ;(BX =0F 79H )S P =00ACH ④P O P BX ;S P =00AEH

堆栈段S S =0F F A 0H 堆栈段S S =0F FA0H

堆栈段S S =0F F A 0H 堆栈段S S =0F FA0H

5.已知程序段如下: MOV AX ,1234H MOV CL ,4

ROL

AX ,CL

DEC AX MOV CX ,4 MUL CX 试问:(1)每条指令执行后,AX 寄存器的内容是什么?(2)每条指令执行后,CF ,SF 及ZF

6.写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为字变量)(1)Z=W+(Z+X)(2)Z=W-(X+6)-(R+9)

(3)Z=(W*X)/(R+6)(4)Z=((W-X)/5*Y)*2

7.假定DX=1100100110111001B,CL=3,CF=1,试确定下列各条指令单独执行后DX的值。

(1)SHR DX,1 (2)SHL DL,1

(3)SAL DH,1 (4)SAR DX,CL

(5)ROR DX,CL (6)ROL DL,CL

(7)RCR DL,1 (8)RCL DX,CL

8.已知DX=1234H ,AX=5678H ,试分析下列程序执行后DX 、AX 的值各是什么?该程序完成了什么功能? MOV CL ,4 SHL DX ,CL MOV BL ,AH SHL BL ,CL SHR BL ,CL

OR

DL ,BL

解答:DX=2345H ,AX=6780H 。该程序完成的功能如图所示,将DX ,AX 拼装成双字后,左移四位。

DX DX AX 1

2

34

5

6

7

8

DX AX 2

340

6

7

8

02

34

5

6

78

AX

9.试分析下列程序段: ADD AX ,BX JNC L2

SUB

AX ,BX

JNC L3 JMP SHORTL5

如果AX 、BX 的内容给定如下: AX

BX

(1)14C6H

80DCH

(2)B568H 54B7H

问该程序在上述情况下执行后,程序转向何处? 解答:(1)AX =AX+BX =14C6H+80DCH =95A2H ;CF =0;无进位,转移至L2;

(2)方法同(1),略

10.编写一段程序,比较两个5字节的字符串OLDS 和NEWS ,如果OLDS 字符串不同于

NEWS 字符串,则执行NEW_LESS ,否则顺序执行。 解答:编程如下,(说明:左测程序为常规编法,两个字符串在一个数据段中;右测的程序

要求OLDS 在数据段中,NEWS 在附加段中,利用串操作的指令是可行的)

LEA SI ,OLDS ; LEA SI ,OLDS

LEA DI,NEWS;LEA DI,NEWS

MOV CX,5;MOV CX,5

NEXT: MOV AL,[SI];CLD

MOV BL,[DI];REPE CMPSB

CMP AL,BL;JNZ NEW_LESS

JNZ NEW_LESS;……

INC SI;JMP EXIT

INC DI;NEW_LESS:

LOOP NEXT;……

……EXIT:……

JMP EXIT

NEW_LESS:

……

EXIT:……

11.若在数据段中从字节变量TABLE相应的单元开始存放了0~15的平方值,试写出包含有XLA T指令的指令序列查找N(0~15)的平方。(设N的值存放在CL中)

解答:

MOV BX,OFFSET TABLE;LEA BX,TABLE

MOV CL,N

MOV AL,CL

XLA T

12.有两个双字数据串分别存放在ASC1和ASC2中(低字放低地址),求它们的差,结果放在ASC3中(低字放低地址)。

ASC1 DW 578,400

ASC2 DW 694,12

ASC3 DW ?,?

解答:编程如下,

LEA SI,ASC1

LEA DI,ASC2

LEA BX,ASC3

MOV CX,2

CLC

NEXT: MOV AX,[SI]

MOV DX,[DI]

SBB AX,DX

MOV [BX],AX

INC SI

INC SI

INC DI

INC DI

INC BX

INC BX

LOOP NEXT

8086 8088指令系统

8086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG 交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLA T(Translate) 换码 这组指令只限于使用累加器AX或AL传送信息. .IN 输入指令 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT 输出指令 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为: OUT DX,AL(字节) OUT DX,AX(字)

计组实验二实验报告-80868088指令系统

HUNAN UNIVERSITY 课程实习报告 题目: 8086/8088指令系统 学生姓名 学生学号 专业班级计算机科学与技术2班 指导老师 完成日期2013年4月21日

一、实验目的 利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作吗编码对应的指令功能,得到8086/8088操作吗从00~FF所对应的的汇编指令的名字。并加以分析总结,形成你的关于8086/8088指令系统操作码编码方法的实验报告。 二、实验过程 1、编写C++程序,生成debug的输入文件(shuru.txt) 2、将shuru.txt复制到debug的根目录下,在debug界面输入如下指令“debug out.txt”,在debug的根目录下,生成了输出文本文件out.txt。 打开out.txt,对256条记录进行整理,如下所示。 3、固定前两位为00,将第二字节从00变为ff,观察汇编指令变化。编写C++程序如下: 4、将shuru2.txt复制到debug的根目录下,在debug界面输入如下指令“debug out2.txt”,在debug的根目录下,生成了输出文本文件out2.txt。

打开out2.txt,对256条记录进行分析。 三、256条记录 指令码汇编指令 ------------------------------------------------------------- 0B76:0100 0000 ADD [BX+SI],AL 0B76:0100 0100 ADD [BX+SI],AX 0B76:0100 0200 ADD AL,[BX+SI] 0B76:0100 0300 ADD AX,[BX+SI] 0B76:0100 0400 ADD AL,00 0B76:0100 050000 ADD AX,0000 0B76:0100 06 PUSH ES 0B76:0100 07 POP ES 0B76:0100 0800 OR [BX+SI],AL 0B76:0100 0900 OR [BX+SI],AX 0B76:0100 0A00 OR AL,[BX+SI] 0B76:0100 0B00 OR AX,[BX+SI] 0B76:0100 0C00 OR AL,00 0B76:0100 0D0000 OR AX,0000 0B76:0100 0E PUSH CS 0B76:0100 0F DB 0F 0B76:0100 1000 ADC [BX+SI],AL 0B76:0100 1100 ADC [BX+SI],AX 0B76:0100 1200 ADC AL,[BX+SI] 0B76:0100 1300 ADC AX,[BX+SI] 0B76:0100 1400 ADC AL,00 0B76:0100 150000 ADC AX,0000 0B76:0100 16 PUSH SS 0B76:0100 17 POP SS 0B76:0100 1800 SBB [BX+SI],AL 0B76:0100 1900 SBB [BX+SI],AX 0B76:0100 1A00 SBB AL,[BX+SI] 0B76:0100 1B00 SBB AX,[BX+SI] 0B76:0100 1C00 SBB AL,00 0B76:0100 1D0000 SBB AX,0000 0B76:0100 1E PUSH DS 0B76:0100 1F POP DS 0B76:0100 2000 AND [BX+SI],AL 0B76:0100 2100 AND [BX+SI],AX 0B76:0100 2200 AND AL,[BX+SI] 0B76:0100 2300 AND AX,[BX+SI] 0B76:0100 2400 AND AL,00 0B76:0100 250000 AND AX,0000

8086与8088的区别

这两种CPU的主要区别,归纳起来有以下几方面: 1.外部数据总线位数的差别:8086CPU的外部数据总线有16位,在一个总线周期内可输入/输出一个字(16位数据),使系统处理数据和对中断响应的速度得以加快;而8088 CPU的外部数据总线为8位,在一个总线周期内只能输入/输出一个字节(8位数据)。也正因为如此,8088被称为准16位处理器。 2.指令队列容量的差别:8086CPU的指令队列可容纳6个字节,且在每个总线周期中从存储器中取出2个字节的指令代码填入指令队列,这可提高取指操作和其它操作的并行率,从而提高系统工作速度;而8088CPU的指令队列只能容纳4个字节,且在每个总线周期中只能取一个字节的指令代码,从而增长了总线取指令的时间,在一定条件下可能影响取指令操作和其它操作的并行率。3.引脚特性的差别:两种CPU的引脚功能是相同的,但有以下几点不同:(1) AD15~AD0的定义不同:在8086中都定义为地址/数据复用总线;而在8088中,由于只需用8条数据总线,因此,对应予8086的AD15~AD8这8条引脚,只作地址线使用。 (2)34号引脚的定义不同:在8086中定义为BHE信号;而在8088中定义为SS0,它与DT/R,IO/M一起用作最小方式下的周期状态信号。 (3)28号引脚的相位不同:在8086中为M/IO;而在8088中被倒相,改为IO/M,以便与8080/8085系统的总线结构兼容。 复用引脚 8086:AD15~AD0,分时用作地址和数据总线; 8088:AD7~AD0,分时用作地址和数据总线; 8086/8088:A19~A16/S6~S3,分时用作地址和状态总线。 8086的最小/最大工作方式 通过CPU的第33条引脚MN/ 来控制。 1.最小工作模式(MN/MX=1):把8086CPU的33引脚接+5V时,系统处于 最小工作模式。最小模式系统适用于单微处理器组成的小系统,系统中通常只有一个微处理器,所有的总线控制信号都直接由8086CPU产生,系统中的总线控制逻辑电路被减到最少。 2.最大工作模式(MN/MX=0):当把8086的33引脚接地时,系统处于最大工 作模式。此时,系统中存在两个或两个以上的微处理器,其中有一个主处理器8086,其他处理器称为协处理器。 8086/8088的存储器系统 1.有关存储器的基本概念 (1)字节与字 字节(Byte)是指一组相邻的8位二进制数码 字(Word)是指两个相邻的字节(16位二进制数码)。

汇编语言指令

8088指令系统总结 一、数据传送指令 1.通用传送指令 (1)传送指令MOV dst, src功能:dst←src (2)堆栈操作指令人W PUSH src作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用:dst←((SP+1)+SP)SP←SP-2 dst(reg seg mem) (3)交换指令XCHG OPR1,OPR2 OPR1←→OPR2 2.累加器传送指令 (1)输入输出指令

256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位口地址输入指令:直接寻址IN AX,PORT IN AL,PORT 间接寻址IN AX,DX IN AL,DX 输出指令:直接寻址OUT AX,PORT OUT AL,PORT 间接寻址OUT AX,DX OUT AL,DX (2)换码指令XLAT AL←(BX+AL)(BX)为mem地址 3.地址传送指令 (1)有效地址传送寄存器 LEA reg16, mem作用:mem的EA→reg16 (2)指针送寄存器和DS指令 LDS reg16, mem32 作用:reg16←mem32的低字高字→DS (3)指针送寄存器和有ES指令 LES reg16, mem32 作用:reg16←mem32的低字高字→ES 4.标志寄存器传送指令 (1)取标志指令:LAHF F的低字节→AH (2)置标志指令:SAHF AH→flag的低字节 (3)标志入栈指令:PUSHF SP-2→SP F→(SP+1):SP (4)标志出栈指令:POPF (SP+1):SP→F SP+2→SP 二、算术运算指令 1.加法类指令(Add)opr-reg mem B/W (1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC (2)带进位加法ADC dst, src dst←dst+src+CF影响OSZAPC (3)加1指令INC opr opr←opr+1影响OSZP (4)组合十进制调整DAA放在ADD后 (5)非组合十进制调整AAA放在ADC后 原理:2个十进制数相加,可能出现非法数(A到F),需用调整指令,进行加6调整变成合法十进制数。十进制=BCD组合=压缩组合BCD占4位非组合BCD占8位 2 . 减法类指令(substract) (1)减法指令SUB dst, src;dst←dst-src影响标志位OSZAPC (2)带借位减法指令SBB dst, src;dst←dst-src-CF影响标志位OSZAPC (3)减1指令DEC src 影响OSZP (4)求补指令NEG src ;negate src←0-src 0-src=FFH-src+1FFH-src=求反

8086指令系统精析解析

8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H

实验报告——找出80868088指令系统所有指令的操作码的编码

实验二 找出8086/8088指令系统所有指令的操作码的编码 一、实验目的 本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能。 二、试验原理: 1、每条指令1~6个字节不等 2、指令的第一字节为操作码,规定指令的操作类型。第二字节规定操作数的寻址方式接着 以后的3~6 字节依据指令的不同取舍。 3、第一个字节的八个二进制位中前六位为操作码的主要部分,之后一位是D字段,然后是 W字段,W指出操作数类型: W=0 为字节, W=1 为字, D指出操作数的传送方向: D=0 寄存器操作数为源操作数, D=1 寄存器操作数为目标操作数。 4、用DOS的输入/输出重定向功能,让debug自动执行一批命令。 三、试验内容和步骤 1、用试探法 (1)打开debug,输入如下内容: -e 100 00 00 00 00 00 00 -u 100 105 0B5D:0100 0000 ADD [BX+SI],AL 0B5D:0102 0000 ADD [BX+SI],AL 0B5D:0104 0000 ADD [BX+SI],AL 可以得到如下结果:

结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。记下来: 指令码汇编指令 --------------------------------------------------------------------- 0B5D:0100 0000 ADD [BX+SI],AL (2)将指令首字节变为01,重复以上实验 -e 100 01 00 -u 100 101 0B5D:0100 0100 ADD [BX+SI],AX 得到以下结果: 结论:第1字节由00(二进制0000 0000)变为01(二进制0000 0001),ADD指令的第二个操作数由AL变为了AX。AL为8位寄存器、AX为16位寄存器,印证了W字段的作用,增加一条有用的记录: 指令码汇编指令 ------------------------------------------------------------------------- 0B5D:0100 0000 ADD [BX+SI],AL 0B5D:0100 0100 ADD [BX+SI],AX (3)将指令首字节变为02,重复以上实验 -e 100 02 00 -u 100 101 0B5D:0100 0200 ADD AL,[BX+SI] 得到以下结果:

8086指令总结

8086指令系统总结 学习微处理器及其程序设计,必须掌握微处理器的指令系统。本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。 下面我们分别进行总结: 一.8086寻址方式 (1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义 (2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX (3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H] MOV AX,ES:[1234H] (4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX] MOV AX,ES:[SI] MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统 1.数据传送指令 (一)通用传送指令 (1)MOV指令 指令格式:MOV 目,源 功能:将源操作数传送给目标操作数。 (2)堆栈操作指令 进栈指令:PUSH 格式:PUSH 源 功能:将源操作数压入堆栈。 例:用堆栈指令完成上例的功能。 MOV AX,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H

机组实验二报告—找出8086 8088指令系统所有指令的操作码的编码

实验二找出8086/8088指令系统所有指令的操作码的编码 实验目的: 本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能,得到8086/8088操作码从00~FF所对应的汇编指令名字。 附:本次实验用到的e和u功能的解释: debug的e命令、u命令的作用及用法:e 100...表示从100号单元开 始编写内容;u 100 105表示将100~105号单元共6个字节反汇编出 来、所谓“反汇编”就是把机器码还原成汇编语句。 每次先用e命令改写100号单元(从00到FF,第一次是00,第二次是 01,第三次是02,第四次是03,……,最后一次是FF),再用u命令反汇编出指令,再记录下来。 第一回合 实验步骤: 一、启动debug程序: 鼠标单击“开始->程序->附件->命令提示符”,打开DOS(其实虚拟DOS)窗口,出现命令提示符 Microsoft Windows XP [版本5.1.2600] 版权所有1985-2001 Microsoft Corp. 输入debug并按回车键,出现一个debug程序的提示符,一个短杆如下图所示: 二、用试探法 -e 100 00 00 00 00 00 00 -u 100 105 1375:0100 0000 ADD [BX+SI],AL 1375:0102 0000 ADD [BX+SI],AL 1375:0104 0000 ADD [BX+SI],AL 结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。 记下来: 指令码汇编指令 ---------------------------------------------------------------------

第三章 80868088的指令系统

3.1 指令的基本格式   一、指令构成 微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。每种指令又由两个字段(Field)构成: l.操作码(OP-Code)字段 该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。 2.操作数(Oprand)字段 该字段则是指出指令执行的操作所需的操作数。在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。 指令的基本格式如下:   二、8086   8086的指令长度可在1~6字节的范围,如图3-1所示。其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。   (1)B1字节各字段定义如下: OP--指令操作码。 D--表示方向。D=1寄存器为目的,D=0寄存器为源。 W--表示字节或字处理方式。W=0为字节指令,W=1为字指令。

(2)B2字节各字段定义如下: MOD--给出指令的寻址方式。8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量; MOD01,只有低8位位移量,需将符号扩展8位,形成16位; MOD=10有16位位移量。当MOD=1l时,为寄存器方式,两个操作数均为寄存器。 REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。 R/M--R/M受MOD制约。当 MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。MOD和R /M字段表示的有效地址 EA计算方法如表3-1所示,共2 4种。   (3) B3~B6字节这四个字节一般是给出存储器操作数地址的位移量(即偏移量)和/或立即操作数。位移量可为8位,也可为16位,这由MOD来决定。8086规定16位的字位移量的低位字节放于低地址单元,高位字节放于高地址单元。 若指令中只有8位位移量, 8086在计算有效地址时,自动用符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。指令中的立即操作数位于位移量的后面。若B3,B4有位移量,立即操作数就位于B5,B6。若指令中无位移量,立即操作数就位于B3,B4字节。总之,指令中缺少的项将由后面存在的项向前顶替,以减少指令长度。 3.2 8086的寻址方式   8086的操作数可隐含在操作码中,也可以是操作数字段中的操作数本身,还可以是存放操作数的地址,如寄存器,I/0端口及存储器。对存储器,给出的或是存储器地址,或是产生存储器地址的信息。从表3

8086-8088指令系统

实验二(找出8086/8088指令系统所有指令的操作码的编码) 一、实验目的 本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能。 二、实验原理 已经知道: 1、每条指令1~6个字节不等 2、指令的第一字节为操作码,规定指令的操作类型。第二字节规定操作数的寻址方式 接着以后的3~6 字节依据指令的不同取舍。 3、第一个字节的八个二进制位中前六位为操作码的主要部分,之后一位是D字段,然 后是W字段,W指出操作数类型: W=0 为字节, W=1 为字, D指出操作数的传送方向: D=0 寄存器操作数为源操作数, D=1 寄存器操作数为目标操作数。 三、实验步骤 (一) 1、用试探法 结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。记下来: 指令码汇编指令 --------------------------------------------------------------------- 037F:0100 0000 ADD [BX+SI],AL 2、将指令首字节变为01,重复以上实验

结论:第1字节由00(二进制0000 0000)变为01(二进制0000 0001),ADD指令的第二个操作数由AL变为了AX。AL为8位寄存器、AX为16位寄存器,印证了W字段的作用,增加一条有用的记录: 指令码汇编指令 ------------------------------------------------------------------------- 037F:0100 0000 ADD [BX+SI],AL 037F:0100 0100 ADD [BX+SI],AX 3、将指令首字节变为02,重复以上实验 第1字节由00(二进制0000 0000)变为02(二进制0000 0010),ADD 操作的传送方向发生转变,印证了D字段的作用。增加一条记录: 指令码汇编指令 ------------------------------------------------------------------------ 037F:0100 0000 ADD [BX+SI],AL 037F:0100 0100 ADD [BX+SI],AX 037F:0100 0200 ADD AL,[BX+SI] 4、将指令首字节变为03,重复以上实验 D和W同时变化,记下: 指令码汇编指令 ----------------------------------------------------------------------- 037F:0100 0000 ADD [BX+SI],AL 037F:0100 0100 ADD [BX+SI],AX 037F:0100 0200 ADD AL,[BX+SI] 037F:0100 0300 ADD AX,[BX+SI]

8088[8086]指令格式(有用)

附录:8086/8088 指令码格式 我们用汇编语言写的汇编程序输入计算机后,由机器提供的汇编程序将其翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行,因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不需要人为干预。我们在这里只介绍一下基本原理,以便在必要时也可以用手工的方式完成类似的工作。 8086/8088 指令系统的指令程序类型很多,功能很强,各种指令由于功能不同,需要指令码提供的信息也不同。为了满足不同用户的功能的要求又要减少指令所占的空间,8086/8088 指令系统采用了一种灵活的,由1~6 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数3 部分,如图2所示。 通常指令的第一字节为操作码,规定指令的操作类型。第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。 操作码(第一字节)及寻址方式字节(MOD字段)格式如下。 图1 8086/8088操作码及寻址方式字段格式 第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。 第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA 的计算方法。 图2 8086/8088 不同字长的指令码格式 REG 字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。由REG 字段选择寄存器的具体规定见表1。 表1 REG 字段编码表

习题3-8086指令系统

习题三8086指令系统 主要内容:8086指令系统。主要介绍8086的基本数据类型、寻址方式和指令系统,重点掌握8086指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。 1.单选题: (1)执行下面指令序列后,结果是(A)。 MOV AL,82H CBW A、(AX)=0FF82H B、(AX)=8082H C、(AX)=0082H D、(AX)=0F82H (2)与MOV BX,OFFSET VAR指令完全等效的指令是(D )。 A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR (3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有(D )。 A、CMP B、SUB C、AND D、MOV (4)下面指令执行后,改变AL寄存器内容的指令是(D )。 A、TEST AL,02H B、OR AL,AL C、CMP AL,B D、AND AL,BL (5)设DH=10H,执行NEG DH指令后,正确的结果是(D )。 A、(DH)=10H,CF=1 B、(DH)=0F0H,CF=0 C、(DH)=10H,CF=0 D、(DH=0F0H,CF=1 (6)设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是(A )。 A、85B92H B、86192H C、BB690H D、12169H (7)下列指令中,执行速度最快的是(C )。 A、MOV AX,100 B、MOV AX,[BX] C、MOV AX,BX D、MOV AX,[BX+BP] 2.8086 CPU执行如下指令后的结果,以及标志SF、AF、CF、OF的值。 (1)MOV AL,0110 0100B SUB AL,58H ;(AL)=0CH,AF=1 DAS ;(AL)=06H, AF=1 ADD AL,89H ;(AL)=8FH, AF=0 DAA ;(AL)=95H,AF=1,SF=1 结果: (AL)=95H, SF=1, AF=1, CF=0, OF=0 (2)MOV AL,05H MOV BL,09H MUL BL ;(AX)=002DH, SF、AF、CF、OF=0 AAA ; (AX)=0103H ;AAM ; ; (AX)=0405H 结果: (AX)=0103H, CF=1 , SF=0、AF=1、OF=0 3.分析执行下列指令序列后的结果: MOV AL,10110101B AND AL,00011111B ;(AL)=0001 0101B OR AL,11000000B ;(AL)=1101 0101B XOR AL,00001111B ;(AL)=1101 1010B NOT AL ;(AL)=0010 0101B 4.假设(AL)=10101111B,CF=0,CL=2,写出分别执行下列指令后的结果以及标志位CF、ZF、OF的值。 (1)SHL AL,CL ;(AL)=1011 1100B, CF=0、ZF=0、OF=1 (2)SHR AL,CL ;(AL)=0010 1011B, CF=1、ZF=0、OF=0 (3)SAR AL,CL ;(AL)=1110 1011B, CF=1、ZF=0、OF=0 (4)ROL AL,CL ;(AL)=1011 1110B, CF=0、ZF=0、OF=1 (5)RCR AL,CL ;(AL)=1011 1101B, CF=0、ZF=0、OF=1 5.设(IP)= 3D8FH,(CS)=4050H,(SP)=0F17CH,当执行CALL 2000:0094H后,试求出IP、CS、SP的

APDU指令集合

1GP APDU 指令参考(GlobalPlatform 第九章)1.1State Returned Sw1 sw2 meaning 62 00 Logical Channel already closed 62 83 Card Life Cycle State is CARD_LOCKED 63 10 More data available 64 00 No specific diagnosis 65 81 Memory failure 67 00 Wrong length in Lc 68 81 Logical channel not supported or is not active 68 82 Secure messaging not supported 69 82 Security status not satisfied 69 85 Conditions of use not satisfied 6A 80 Incorrect values in command data 6A 81 Function not supported e.g. card Life Cycle State is CARD_LOCKED 6A 82 Selected Application / file not found 6A 84 Not enough memory space 6A 86 Incorrect P1 P2 6A 88 Referenced data not found 6D 00 Invalid instruction 6E 00 Invalid class 94 84 Algorithm not supported 1.2基本指令 command CLA INF Delete command (80\84) E4 (9.2) GET DATA Command (00\80\84) CA (9.3) GET STATUS Command (80\84)F2 (9.4) INSTALL Command (80\84)E6 (9.5) LOAD Command (80\84)E8 (9.6) MANAGE CHANNEL Command 00 70 (9.7) PUT KEY Command (80\84)D8 (9.8) SELECT Command 00 A4 (9.9) SET STATUS Command (80\84)F0 (9.10) STORE DATA Command (80\84)E2 (9.11)

8086指令系统记忆表

数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令

8086 8088指令系统记忆表

8086/8088指令系统记忆表 来自: [已注销]2011-10-21 22:44:12 在这之前,先说一下寄存器: 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag)

CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器; ES(Extra Segment):附加段寄存器。 第一部分:指令助记符: 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换

80X86汇编语言程序设计第二章⑤.80868088指令.

80X86汇编语言程序设计 第二章 8086/8088寻址方式和指令系统 (二加减运算指令 1. 加法指令 ADD 格式:ADD OPRD1,OPRD2 执行的操作:(OPRD1 ← (OPRD1 +(OPRD2 例如 :MOV AX,7896H ; (AX =7896H 即(AH =78H (AL =96H ; 各标志位保持不变 ADD AL,AH ;AL=AL+AH=96H+78H(=10EH=0EH 前面的 1给了进位标志CF 。 即(AH =78H (AX =780EH CF=1PF=0AF=0ZF=0SF=0OF=0 例如 :ADD DX,0F0F0H 执行前(DX =4652H 执行后(DX =4652H+F0F0H(=13742H=3742H 前面的 1给了进位标志 CF 。ZF=0 SF=0 CF=1 OF=0 这里 4的二进制码是 0100, F 是 1111, 一个正数一个负数相加肯定 OF 是 0。 例如 :ADD AX,4321 执行前(AX =62A0H

执行后(AX =62A0+4321=A5C1H 这里要注意, A 的二进制数是 1010,最高有效位为 1, 所以 SF 为 1。 两个正数相加,结果为负的就溢出;两个负数相加,结果为正的就溢出。 SF=1 ZF=0 CF=0 OF=1 这里 6的二进制码是 0110,而 4的二进制码是 0100,两个正数相加,结果 A 为1010为负,所以 OF 为 1。 从上面例子可看出:加法指令影响标志位。 OF 位根据操作数的符号及其变化情况来设置:若两个操作数的符号相同而结果的符号与之相反时 OF=1,否则 OF=0。 CF 位可以用来表示无符号数的溢出。由于无符号数的最高有效位只有数值意义而无符号意义, 所以从该位产生的进位应该是结果的实际进位值,但在有限数的范围内就说明了结果。 2. 带进位加指令 ADC (Add with Carry 格式:ADC OPRD1,OPRD2 执行的操作:(OPRD1 ← (OPRD1 +(OPRD2 +(CF 例如 :下列指令序列执行两个双精度(32位的加法。设目的操作数放在 DX 和AX 寄存器中, 其中 DX 存放高位字,源操作数存放在 BX 、 CX 中,其中 BX 存放高位字。 (双精度的数高位和高位相加,低位和低位相加,首先加低位。 如指令执行前:(DX =0002H (AX =0F365H (BX =0005H (CX =0E024H指令序列为:ADD AX,CX ADC DX,BX

8086/8088指令系统

CH02 8086/8088指令系统 习题与思考题 1.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?源操作数在哪里?如在存储器中请写出其物理地址是多少? (1)MOV AX,0ABH (2)MOV AX,[100H] (3)MOV AX,V AL (4)MOV BX,[SI] (5)MOV AL,V AL[BX] (6)MOV CL,[BX][SI] (7)MOV V AL[SI],BX (8)MOV [BP][SI],100 解答: (1)MOV AX,0ABH 寻址方式:立即寻址;物理地址:无 (2)MOV AX,[100H] 寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+100H=2000H*16+100H=20100H (3)MOV AX,V AL 寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+V AL=2000H*16+0050H=20050H (4)MOV BX,[SI] 寻址方式:寄存器间接寻址;源操作数在存储器中;物理地址:DS*16+SI=2000H*16+00A0H=200A0H (5)MOV AL,V AL[BX] 寻址方式:变址寻址;源操作数在存储器中;物理地址:DS*16+V AL+BX=2000H*16+0050H+0100 =20150H (6)MOV CL,[BX][SI] 寻址方式:基址加变址寻址;源操作数在存储器中;物理地址:DS*16+BX+SI=2000H*16+0100H+00A0H =201A0H (7)MOV V AL[SI],BX 寻址方式:寄存器寻址;源操作数在寄存器中;物理地址:无 (8)MOV [BP][SI],100 寻址方式:立即寻址;物理地址:无 2.设有关寄存器及存储单元的内容如下: DS=2000H,BX=0100H,AX=1200H,SI=0002H,[20100H]=12H,[20101H]=34H,

相关主题
文本预览
相关文档 最新文档