8086指令的机器码表示

合集下载

一条指令的机器码通常包含操作码(OP)和操作数两部分指...

一条指令的机器码通常包含操作码(OP)和操作数两部分指...

例如: 例如:设DS=3000H, BX=2000H, SI=1000H, MASK=0250H MOV AX,MASK[BX][SI]或MOV AX,MASK[BX+SI]或 , 或 , 或 MOV AX, [MASK+BX+SI] , BX 20H 00H 0H SI 10H
OP 50H 02H
⑵寄存器间接寻址 操作数的有效地址由基址寄存器BX、BP或变址寄存器 操作数的有效地址由基址寄存器BX、BP或变址寄存器 SI、DI提供。 SI、DI提供 提供。 BX BP SI BP
EA=
例如: 例如:设DS=2000H, AX=7850H ,BX=1000H MOV AX,[BX]; , ;
例如: 而指令如下: 例如:设DS=2000H, AX=7850H ,而指令如下: 而指令如下 MOV AX,[3000H]; , ;
CS→ 操作码 操作: 操作:2000×10H × +EA= PA= 3000H 23000H 23000H 23001H AX 30H 78H 50H 50H 30H 数据段 00H 10H 代码段
寻找操作数存放地址的方式称为寻址方式 寻找操作数存放地址的方式称为寻址方式 8086的寻址方式分为两类: 8086的寻址方式分为两类: 的寻址方式分为两类 数据寻址方式
√本节
转移地址寻址方式
2.4.1 立即寻址 该寻址方式中,指令直接给出 位或16位的操作数 直接给出8 该寻址方式中,指令直接给出8位或16位的操作数 立即数)。该数紧跟在操作码之后, )。该数紧跟在操作码之后 (立即数)。该数紧跟在操作码之后,作为指令的操 作数字段存放在指令代码中 如果是16位立即数, 如果是16位立即数,那么低位字节数存放在低地址 位立即数 单元中,高位字节数存放在高地址单元中。 单元中,高位字节数存放在高地址单元中。机器码存 放形式如图

第6章 8086指令系统与汇编基础

第6章 8086指令系统与汇编基础

第13页
2013年8月1日星期四
第6章
8086指令系统与汇编基础 3.段地址寄存器
有 CS、DS、ES、SS 四 个 , 分 别 表 示 程 序 码 ( code segment register)、 数 据 ( data segment register)、附加(extra segment register)、堆栈 (stack segment register)段地址用。在 DOS 系统 中,每一个段地址容量只有 64KBytes。 当数据段地址不够用时,就可以用附加数据段地址 来补足,例如想要将一个段地址的某些内容复制到 另一段地址中,就可以同时指定 DS、ES 分别表示 这两个段地址。
第17页 2013年8月1日星期四
第6章
6.2.4
8086指令系统与汇编基础
寄存器间接寻址(Register Indirect Addressing) 寄存器间接寻址方式中,操作数存放在存储器 中,但操作数的有效地址EA在基址寄存器BX、BP或 变址寄存器SI、DI中。操作数的物理地址为: 物理地址=16(段寄存器)+(寄存器)
执行结果为:(AX)=8060H 指令中也可指定段跨越前缀以取得其它段中的 数据。如:MOV AX,ES:[BX]指令,则从附加段中 取得数据。
操作码
DS 3000 0 BX + 200 0
代 码

30000 32000 AH AL
60 80
3200 0
数 据

图 6- 2- 2
例 6 - 5 的执行过程
第3页 2013年8月1日星期四
第6章
8086指令系统与汇编基础
计算机只能识别二进制代码,因此计算机能执行 的指令必须以二进制代码的形式表示,这种以二进制 代码形式表示的指令称为指令的机器码(Machine Code)。 2.汇编指令格式 一条指令一般包含操作码和操作数两部分。

汇编语言上机实验一DEBUG常用命令及8086指令使用

汇编语言上机实验一DEBUG常用命令及8086指令使用

汇编语⾔上机实验⼀DEBUG常⽤命令及8086指令使⽤实验⼀DEBUG常⽤命令及8086指令使⽤实验⽬的:通过实验掌握下列知识:1、8086指令: M OV,ADD,SUB,XCHG等2、DEBUG命令: A,D,E,F,H,R,T,U。

3、ASCII码及⽤16进制数表⽰⼆进制码的⽅法。

内容及步骤:⼀、DEBUG 命令使⽤:1、打 DEBUG 进⼊ DEBUG 控制,显⽰提⽰符 '_ '。

2、⽤命令 F100 10F 'A' 将'A'的ASCII码填⼊内存。

3、⽤命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、⽤命令F110 11F 41 重复上⼆项实验,观察结果并⽐较。

5、⽤命令 E100 30 31 32 …… 3F将30H-3FH写⼊地址为100开始的内存单元中,再⽤D命令观察结果,看键⼊的16进制数是什么字符的ASCII码?6、⽤H命令检查下列各组16进制数加减结果并和你的⼿算结果⽐较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、⽤R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

8、⽤R命令将AX,BX内容改写为1050H及23A8H。

⼆、8086常⽤指令练习1、传送指令1)⽤A命令在内存100H处键⼊下列内容: MOV AX,1234MOV BX,5678XCHG A X,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG A X,DX2)⽤U命令检查键⼊的程序并记录,特别注意左边的机器码。

3)⽤T命令逐条运⾏这些指令,每运⾏⼀⾏检查并记录有关寄存器及IP的变化情况。

并注意标志位有⽆变化。

2、加减法指令:1)⽤A命令在内存100H处键⼊下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX图略。

控制转移指令

控制转移指令
下面是一个含有无条件转移指令的简单程序的列表文件,它是由汇编语言源程序翻译后产生的。即:
;行号偏移量机器码程序
1 0000 CODE SEGMENT
2 ASSUME CS:CODE
3 0000 0405 PROG_S:ADD AL, 05H
4 0002 90 NOP
5 0003 EBFB JMP SHORT PROG_S
段内间接转移指令
这类指令转向的16位有效地址存放在一个16位寄存器或字存储单元中
用寄存器间接寻址的段内转移指令,要转向的有效地址存放在寄存器中,执行的操作是寄存器的内容送到IP中

JMP BX
若该指令执行前BX=4500H,则指令执行时,将当前IP修改成4500H,程序转到段内偏移地址为4500H处执行
返回地址的IP入栈
由于存放CALL指令的内存首地址为CS:IP=2000:1050H,该指令占3个字节,所以返回地址为2000:1053H,即IP=1053H.于是1053H被推入堆栈
根据当前IP值和位移量DISP计算出新的IP值,作为子程序的入口地址,即:
IP=IP+DISP=1053H+1234H=2287H
中断:INT—中断、INTO—溢出中断、IRET—中断返回
1、无条件转移和过程调用指令
1)JMP无条件转移指令
指令格式:JMP目的
指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:
第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
JMP DWORD PTR[SI+0125H]
设指令执行前,CS=1200H,IP=05H,DS=2500H,SI=1300H,内存单元(26425H)=4500H,(26427H)=32F0H.而指令中的位移量DISP=0125H,其中高位部分为DISP_H=01H,低位部分DISP_L=25H

3.1-3.28086寻址方式与指令机器码

3.1-3.28086寻址方式与指令机器码

执行结果 BX=5678H,执行过程如图3.4。
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
寄存器相对寻址
上述指令也可用MOV 式来表示。
BX,[COUNT+SI]这种形
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
§3.1 8086的寻址方式
3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 立即数寻址方式 寄存器寻址方式 直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 相对基址变址寻址方式 其它寻址方式
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
§3.1 8086的寻址方式
3.1.1 立即数寻址方式 3.1.2 寄存器寻址方式 3.1.3 直接寻址方式 3.1.4 寄存器间接寻址方式 3.1.5 寄存器相对寻址方式 3.1.6 基址变址寻址方式 3.1.7 相对基址变址寻址方式 3.1.8 其它寻址方式
中国科学技术大学
3.1 8086寻址方式
第3章 8086 指令系统
3.1.6 基址变址寻址方式
Based Indexed Addressing
有效地址是一个基址寄存器 (BX 或 BP) 和一个变 址寄存器(SI或DI)的内容之和,两个寄存器均由 指令指定。
若基址寄存器为BX时,段址寄存器用DS,则: 物理地址 = 16×DS+BX+SI
约定 1:如果指令中指定的寄存器是 BX、 SI或 DI,则 默认操作数存放在数据段中,
物理地址=16×DS+BX 或=16×DS+SI 或=16×DS+DI

8086汇编和机器码的对应表

8086汇编和机器码的对应表

8086汇编和机器码的对应表
单⽚机指令功能⼀览表
助记符代码说明
MOV A,Rn E8~EF
寄存器A
MOV A,direct E5 dircet 直接字节送A
MOV A,@Ri ER~E7
间接RAM送A
MOV A,#data 74 data ⽴即数送A
MOV Rn,A F8~FF
A送寄存器
MOV Rn,dircet A8~AF dircet 直接字节送寄存器
MOV Rn,#data 78~7F data ⽴即数送寄存器
MOV dircet,A F5 dircet A送直接字节
MOV dircet,Rn 88~8F dircet 寄存器送直接字节
MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节MOV dircet,@Ro 86~87
间接RAM送直接字节
MOV dircet,#data 75 dircet data ⽴即数送直接字节MOV @Ri,A F6~F7
A送间接RAM
MOV @Ri,#data 76~77 data 直接字节送间接RAM MOV @Ri,#data 76~77 data ⽴即数送间接RAM
MOV DPTR,#data16 90 data 15~8 16位常数送数据指针data7~0
MOVC A,@A+DPTR 93
由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC 83
由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3
送外部数据(8位地址)送A
MOVX A,@DPTR E0
送外部数据(16位地址)送A。

8086汇编中jmp指令详解

8086汇编中jmp指令详解

8086汇编中jmp指令详解jmp指令解释:⏹jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP;⏹jmp指令要给出两种信息:⏹转移的目的地址⏹转移的距离(段间转移、段内短转移,段内近转移)格式:一.Jump short 标号这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。

示例:assume cs:codesgcodesg segmentstart:mov ax,0jmp short sadd ax,1s:inc axcodesg endsend start说明:上面的程序执行后, ax中的值为 1 ,因为执行 jmp short s 后,越过了add ax,1 ,IP 指向了标号 s处的 inc ax。

也就是说,程序只进行了一次ax加1操作。

注意:⏹汇编指令jmp short s 对应的机器指令应该是什么样的呢?⏹我们先看一下别的汇编指令和其对应的机器指令可以看到,在一般的汇编指令中,汇编指令中的idata(立即数),不论它是表示一个数据还是内存单元的偏移地址,都会在对应的机器指令中出现,因为CPU执行的是机器指令,它必须要处理这些数据或地址。

⏹但是:当我们查看jmp short s或jmp 0008所对应的机器码,却发现了问题。

看到了吗?机器码中并不含有立即数。

为什么呢,解释如下⏹在“jmp short 标号”指令所对应的机器码中,并不包含转移的目的地址,而包含的是转移的位移。

⏹这个位移,使编译器根据汇编指令中的“标号”计算出来的。

如果我们在第一行程序后加上Mov bx,0000,你会发器机器码没变,还是EB03,为什么呢?jm p 0008对应的偏移就是0003大家可以回忆一下cpu中指令的执行流程,就会发现当执行完EB03后,ip=ip+2=0005,大家注意看EB03后面有个03,表示再向后三个单位,这样就到了0008这个偏移处了。

【微机原理】3.2-指令机器码

【微机原理】3.2-指令机器码
1.机器语言指令
• 计算机只能识别二进制表示的机器语言指令, 也称为机器码。 • 编程时,一般可不必了解指令的机器码。
• 若要透彻了解计算机的工作原理,看懂包含 机器码的程序清单,对程序进行正确的调试、 排错等,就要了解机器语言。
2.机器语言指令的编码特点
• 对8086 指令进行二进制编码时,可以对每种基本 类型给出一个编码格式,对照格式填入不同的数 字来表示不同的寻址方式、数据类型等,就能求 得每条指令的机器码。
图3.10。
求该指令编码的第1、2字节的方法与例3.18类似,可 通过查表获得; 第3字节存放16位位移量的低字节34H,第4字节存放高 字节12H。所以该指令的编码为8A 8F 34 12H。
4.立即数寻址指令的编码
• 对于立即数寻址的指令,除操作码外,还要有1~2个字节存放立即数。 例3.21 求指令MOV [BX+2100H],0FA50H 的机器码 • 指令功能是将16位立即数FA50H送到有效地址为(BX+2100H)的字单元
中。 • 它是一个6字节指令,指令中不但有16 位立即数,而且还有16位位移
量。指令编码如图3.11。
求指令MOV [BX+2100H],0FA50H 的机器码
操作码第1字节1100011W,第2字节MOD 000 R/M。 传送16位立即数,W=1;存储器寻址方式的编码为[BX]+D16,由
表3.2,MOD=10,R/M=111,第2字节中还有3位为000。可得指令的 前2字节为11000111 10000111,即C7 87H。 第3和第4字节为16位位移量的低字节(disp-L)00H和高字节(disp-H)21H。 第5和第6字节存放立即数低字节(data-L)50H和高字节(data-H)FAH。 因此,该指令的编码为C7 87 00 21 50 FA,在内存中按从低地址到高 地址的次序存放。 若立即数仅8位,例如MOV [BX+3200H],86H,可省去第6字节 data-H。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
§3-2 指令的机器码表示方法
一、机器语言指令的编码目的和特点
1、零操作数指令 、
CLC ;机器码为F8H 机器码为
2、单操作数指令 、
INC AX INC BX ;机器码为40H 机器码为 ;机器码为43H 机器码为
3、双操作数指令 、
MOV AL, 04 ;机器码为B004H 机器码为
4、三操作数指令 、
10
§3-2 指令的机器码表示方法
例:求指令MOV SP,BX的机器码 求指码表示方法
3、寄存器与存储器间传送指令的编码 、
例:求指令MOV CL, [BX+l234H]的机器码 求指令 , 的机器码 解:指令的功能是将有效地址为(BX+1234H)存储单元中的数据字 指令的功能是将有效地址为 存储单元中的数据字 节传送到CL中 节传送到 中。 该指令的编码格式为: 数据. 该指令的编码格式为:100010DW MOD REG R/M 数据. 第1、2字节可通过查表得到;第3字节存放 位位移量的低字节 、 字节可通过查表得到; 字节存放16位位移量的低字节 字节可通过查表得到 字节存放 34H; 第4字节存放高字节 ; 字节存放高字节12H 。 字节存放高字节 所以该指令的4字节编码为8A 所以该指令的 字节编码为 8F 34 12H 。 字节编码为
ADC AX, BX ;该指令完成操作数AX、BX和CF位相加。 位相加。 该指令完成操作数 、 和 位相加
4
§3-2 指令的机器码表示方法
二、机器语言指令代码的编制
1、编码格式说明: 编码格式说明:
以寄存器之间或寄存器与存储器之间交换数据的MOV指 指 以寄存器之间或寄存器与存储器之间交换数据的 令,来说明指令的编码格式。 来说明指令的编码格式。
12
§3-2 指令的机器码表示方法
例:求指令MOV CL, [BX+l234H]的机器码 求指令 , 的机器码
13
§3-2 指令的机器码表示方法
4、立即数寻址指令的编码 、
例:求指令MOV [BX+2100H], 0FA50H的机器码 求指令 , 的机器码 解:指令的功能是将16位立即数送到指定有效地址的字存储单元 指令的功能是将 位立即数送到指定有效地址的字存储单元 送列[BX+2100H]单元,高字节 单元, 中;其中低字节50H送列 其中低字节 送列 单元 高字节FAH送到 送到 (BX+2101H)单元。 单元。 单元 该指令的编码格式为: 该指令的编码格式为:110011W MOD 000 R/M 数据 数据 (若W=1). ) 指令中不但有16位立即数,还有 位位移量 位位移量; 指令中不但有 位立即数,还有16位位移量; 位立即数 字节编码为 所以,该指令的 字节编码为C7 87 00 21 50 FA H。 所以,该指令的6字节编码为 。
8
§3-2 指令的机器码表示方法
MOD和R/M的编码( 见表 -2:24种不同的编码格式,D8表示 位位移量, 和 的编码( 种不同的编码格式, 表示 位位移量, 表示8位位移量 的编码 见表3- : 种不同的编码格式 D16为16位位移量) 为 位位移量 位位移量)
MOD(右) ( R/M(下) 下 000 001 010 011 100 101 110 111 [BX]+[SI] [BX]+[DI] [BP]+[SI] [BP]+[DI] [SI] [DI] D16(直接地址) 直接地址) 直接地址 [BX] [BX]+[SI]+D8 [BX]+[DI]+D8 [BP]+[SI]+D8 [BP]+[DI]+D8 [SI]+D8 [DI]+D8 [BP]+D8 [BX]+D8 [BX]+[SI]+D16 [BX]+[DI]+D16 [BP]+[SI]+D16 [BP]+[DI]+D16 [SI]+D16 [DI]+D16 [BP]+D16 [BX]+D16 00 01 10 W=0 AL CL DL BL AH CH DH BH 11 W=1 AX CX DX BX SP BP SI DI
16
§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, 在指令代码前加一个 位的段超越的缀代码,代码的格式为 的代码为01,所以指令的第1个字 中××位表明段超越寄存器。由于段寄存器CS的代码为 ,所以指令的第 个字 ××位表明段超越寄存器。由于段寄存器 的代码为 位表明段超越寄存器 节的编码为00101110,即 2EH. , 节的编码为 所以,该指令的机器码为 所以,该指令的机器码为2E 88 17H。 。
微型计算机原理与接口技术
第三讲 佘青山
86919130 qsshe@
There’s always more to learn, and there are always better ways to do what you’ve done before. —DONANLD E. KNUTH
第三章 8086的寻址方式和指令系统 8086的寻址方式和指令系统
内容提要
8086的寻址方式 的寻址方式 微机系统指令的机器码表示方法(自学) 微机系统指令的机器码表示方法(自学) 8086的指令系统 的指令系统
2
§3-2 指令的机器码表示方法(自学) 指令的机器码表示方法(自学)
一、机器语言指令的编码目的和特点
9
§3-2 指令的机器码表示方法
2、寄存器间传送指令的编码
例:求指令MOV SP,BX的机器码 求指令 , 的机器码 寄存器的内容送到SP寄存器中 解:指令的功能是将BX寄存器的内容送到 寄存器中。 指令的功能是将 寄存器的内容送到 寄存器中。 该指令的编码格式为: 该指令的编码格式为:100010DW MOD REG R/M. W=1:表示传送的是字数据; = :表示传送的是字数据; REG字段:选择SP,则REG字段编码=100; 字段:选择 , 字段编码= ; 字段 字段编码 D位=1:表示数据传至所选的寄存器 位 :表示数据传至所选的寄存器(SP); ; MOD=11:因另一个操作数 也是寄存器。 = :因另一个操作数BX也是寄存器 也是寄存器。 根据W= 及寄存器名称为 及寄存器名称为BX,从表3-2查得 查得R/M=011。 根据 =1及寄存器名称为 ,从表 查得 = 。 所以,该指令的 字节编码为8B 字节编码为 所以,该指令的2字节编码为 E3H。 。
REG 000 011 001 010 100 111 101 110 W=1( W=1(字) AX BX CX DX SP DI BP SI W=0(字节) W=0(字节) AL BL CL DL AH BH CH DH
7
REG 01 11 00 10
段寄存器 CS DS ES SS
§3-2 指令的机器码表示方法
17
第三章待续 谢谢大家!
There’s always more to learn, and there are always better ways to do what you’ve done before. —DONANLD E. KNUTH
汇编语言源程序: 汇编语言源程序:
即主要由指令系统组成的语言)编写的程序。 用汇编语言 (即主要由指令系统组成的语言)编写的程序。
编译程序 执行
源程序 编码特点: 编码特点:
机器码
运算结果
8086指令的二进制编码非常多,很难以一张表实现指令与机器语言的对照。 8086指令的二进制编码非常多,很难以一张表实现指令与机器语言的对照。 指令的二进制编码非常多 为每种基本指令类型给出一个编码格式, 为每种基本指令类型给出一个编码格式,对照格式填上不同的数字表示不同 的寻址方式、数据类型,即可求得每条指令的机器码。 的寻址方式、数据类型,即可求得每条指令的机器码。 8086指令系统采用变长指令,指令的长度可由1 8086指令系统采用变长指令,指令的长度可由1~6字节组成。 指令系统采用变长指令 字节组成。 8086机器指令有零个或多个操作数。 8086机器指令有零个或多个操作数。 机器指令有零个或多个操作数
14
§3-2 指令的机器码表示方法
例:求指令MOV [BX+2100H], 0FA50H的机器码 求指令 , 的机器码
15
§3-2 指令的机器码表示方法
5、包含段寄存器的指令的编码 、
例:求指令MOV DS, AX的机器码 求指令 , 的机器码 寄存器的内容传送到数据段寄存器DS。 解:指令的功能是将AX寄存器的内容传送到数据段寄存器 。 指令的功能是将 寄存器的内容传送到数据段寄存器 该指令的编码格式为: 该指令的编码格式为:10001110 MOD 0 REG R/M . 段寄存器DS的编码为 ,即REG字段为 ;另一个操作数也是 字段为11; 段寄存器 的编码为11, 的编码为 字段为 寄存器,所以MOD=11,而R/M字段应填上AX的三位代码 寄存器,所以 = , 字段应填上 的三位代码000 . 字段应填上 的三位代码 所以,该指令的 字节编码为8E 字节编码为 所以,该指令的2字节编码为 D8H。 。
相关文档
最新文档