汇编指令与机器码的相互转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编指令与机器码的相互转换

机器语言我们只要重点理解一下几个概念:

1. 机器语言指令有操作码(OP)和地址码两部分组成

|_____________OP_______________|__d__|__w__|

|_____________OP_______________|__s__|__w__| <--此格式用于立即寻址方式

在多数操作码中,常使用某些位来指示某些信息:

如图上结构里的:w=1 时对字来操作

w=0 时对字节来操作

d值在双操作数指令中才有效

当d=1 时有且只有一个寄存器用于目的操作数

d=0 时有且只有一个寄存器用于源操作数

s=1 时立即数为8位,但要求扩展成16位数

s=0 时当指令作字节操作/有16位立即数

由于汇编的指令格式很多,这里我只作一些基本情况介绍,必要时读者可以下载/查阅80x86汇编小站提供的OPCODES手册来查阅。

2. 寻址方式的机器语言表示:

| mod | reg | r/m |

|_____|_____|_____|_____|_____|_____|_____|

reg 表示寄存器方式,在不包括立即数的双操作数指令的情况下,规定必须有一个操作数在寄存器中,该寄存器由reg字段指定,并与操作码字节中的w位相组合确定的寄存器

mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式现在你们下载了80x86汇编小站()提供的OPCODES 手册了吗?

下载好了,请解压后打开里面的:opcodes.html 文件,然后熟悉里面的表格:

现在熟悉简单的:

____________________________________________________________________________ __

表1 rrr : W=0 : W=1 : reg32

000 : AL : AX : EAX

001 : CL : CX : ECX

010 : DL : DX : EDX

011 : BL : BX : EBX

100 : AH : SP : ESP

101 : CH : BP : EBP

110 : DH : SI : ESI

111 : BH : DI : EDI

____________________________________________________________________________ __

表2 rrr : Index Register

000 : EAX

001 : ECX

010 : EDX

011 : EBX

100 : No Index

101 : EBP

110 : ES I

111 : EDI

____________________________________________________________________________ __

表3 mmm : Function 11

w=1

000 : DS:[BX+S I]

001 : DS:[BX+DI]

010 : SS:[BP+S I]

011 : SS:[BP+DI] BX

100 : DS:[SI]

101 : DS:[DI]

110 : SS:[BP]

111 : DS:[BX]

____________________________________________________________________________ __

表4

oo : Function

00 : If mmm = 110, then a displacement follows the operation; otherwise, no displacement is used

01 : An 8-bit signed displacement follows the opcode

10 : A 16-bit signed displacement follows the opcode

11 : mmm specifies a register, instead of an addressing mode

____________________________________________________________________________ __

上面的表,你都看明白了吗?现在我就教你们如何利用这样的表格来把汇编指令翻译机器码

3.指令格式简介

8086所用的16位指令格式:

________ _____________ ________ ________

|操作码| + |mod-reg-r/m| + |位移量| + |立即数|

1~2字节0~1字节0~2字节0~2字节

OK!以上就是基本知识,下面我们来实践吧:

———————————————————————————————————————

问题:

MOV AX,1234H 对应的机器码为:B83412

MOV EBX,0 对应的机器码为:66BB00000000

MOV CL,55H 对应的机器码为: B155

MOV AX,BX 对应的机器码为:8BC3

我在问一下,机器码的数据格式是什么?好像是机器指令+操作数(高位存放在地址高位,低位存放在地址低位),但是前面MOV AX,怎么就变成了B8,弄不明白,请指教。

相关文档
最新文档