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

时间:2007-06-15 来源: 作者: 【字体: 减小 增大收藏 | 投稿
  
机器语言我们只要重点理解一下几个概念:

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


|_____________OP_______________|__d__|__w__| 财软联盟 fs119.net

|_____________OP_______________|__s__|__w__|<--此格式用于立即寻址方式
财管家 园 fs119.net

在多数操作码中,常使用某些位来指示某些信息:
如图上结构里的:w=1时对字来操作
w=0时对字节来操作 财管家.园.fs119.net

d值在双操作数指令中才有效
当d=1时有且只有一个寄存器用于目的操作数
d=0时有且只有一个寄存器用于源操作数

财管家园 fs119.net

s=1时立即数为8位,但要求扩展成16位数
s=0时当指令作字节操作/有16位立即数 财软 联盟 fs119.net

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

财,软联盟,fs119.net

2.寻址方式的机器语言表示: 财 管家园 fs119.net

|mod|reg|r/m|
|_____|_____|_____|_____|_____|_____|_____|

财 管家园 fs119.net

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

财软联盟.fs119.net

mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式现在你们下载了80x86汇编小站(http://www.x86asm.com)提供的OPCODES手册了吗?
下载好了,请解压后打开里面的:opcodes.html文件,然后熟悉里面的表格:

现在熟悉简单的:
______________________________________________________________________________
表1<PS:部分资料>rrr:W=0:W=1:reg32

财管家 园 fs119.net

000:AL:AX:EAX 财管 家园 fs119.net

001:CL:CX:ECX 财软联,盟,fs119.net

010:DL:DX:EDX

财管,家园,fs119.net

011:BL:BX:EBX 财软联盟.fs119.net

100:AH:SP:ESP 财软 联盟 fs119.net

101:CH:BP:EBP

财管,家园,fs119.net

110:DH:SI:ESI 财管 家园 fs119.net

111:BH:DI:EDI
______________________________________________________________________________
表2<PS:部分资料>rrr:IndexRegister
000:EAX

财管家,园,fs119.net

001:ECX 财软联盟,fs119.net

010:EDX

财,软联盟,fs119.net

011:EBX

财软.联盟.fs119.net

100:NoIndex

财软联.盟.fs119.net

101:EBP 财管.家园.fs119.net

110:ESI 财管家 园 fs119.net

111:EDI
______________________________________________________________________________
表3<PS:部分资料>mmm:Function11
w=1
000:DS:[BXSI] 财管家.园.fs119.net

001:DS:[BXDI]

财.管家园.fs119.net

010:SS:[BPSI] 财 管家园 fs119.net

011:SS:[BPDI]BX 财.管家园.fs119.net

100:DS:[SI]

财管家.园.fs119.net

101:DS:[DI] 财,管家园,fs119.net

110:SS:[BP]

财管家,园,fs119.net

111:DS:[BX]
______________________________________________________________________________
表4<PS:部分资料>
oo:Function

财管家.园.fs119.net

00:Ifmmm=110,thenadisplacementfollowstheoperation;otherwise,nodisplacementisused 财软联盟 fs119.net

01:An8-bitsigneddisplacementfollowstheopcode

财软,联盟,fs119.net

10:A16-bitsigneddisplacementfollowstheopcode 财管家 园 fs119.net

11:mmmspecifiesaregister,insteadofanaddressingmode
______________________________________________________________________________
上面的表,你都看明白了吗?现在我就教你们如何利用这样的表格来把汇编指令翻译机器码 财管家园,fs119.net

财软,联盟,fs119.net

财软联 盟 fs119.net

财,软联盟,fs119.net


财软联盟 fs119.net

财软联盟.fs119.net

3.指令格式简介 财 管家园 fs119.net

8086所用的16位指令格式:

财软联盟,fs119.net

_____________________________________
|操作码||mod-reg-r/m||位移量||立即数|
1~2字节0~1字节0~2字节0~2字节
财管.家园.fs119.net

OK!以上就是基本知识,下面我们来实践吧: 财管家 园 fs119.net

———————————————————————————————————————
问题: 财管家 园 fs119.net

MOVAX,1234H对应的机器码为:B83412 财管家,园,fs119.net

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

财管家园 fs119.net

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

MOVAX,BX对应的机器码为:8BC3
财软联盟.fs119.net

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

财管.家园.fs119.net

PS:上面的题目是一个网友问的,现在我来实践一遍给你们看。
———————————————————————————————————————

财软联盟,fs119.net

指令1->MOVAX,1234H对应的机器码为:B83412

财软,联盟,fs119.net

解法:判断->这个是8086汇编16位汇编指令格式,并且是立即寻址方式
查表->打开opcodes.html文件,找到标题为“MainInstructions”,单击“M”字母,然后对应查看“MOVReg,Imm”格式的“OpCode”项为:1011wrrr
再判断->由于寄存器是AX,立即数是1234H,明显是“对字操作”,所以w=1
在查看本文章上面的“表1”,对应的查到rrr的值为000
组合结果->w=1
rrr=000
1011wrrr=10111000B->B8H
根据“3.指令格式简介”->B8H|立即数(低位在前高位在后)|=B83412H

财,软联盟,fs119.net

PS:""符号不为“加号”

财.管家园.fs119.net

好了,已经解完第一题了,机器码为B83412H

财软联.盟.fs119.net

——————————————————————————————————————— 财管.家园.fs119.net

指令4->MOVAX,BX对应的机器码为:8BC3 财管家园.fs119.net

解法:判断->这个是8086汇编16位汇编指令格式,并且是寄存器寻址方式
查表->打开opcodes.html文件,找到标题为“MainInstructions”,单击“M 财管家园.fs119.net

”字母,然后对应查看“MOVReg,Reg”格式的“OpCode”项为:1000101woorrrmmm
再判断->由于寄存器是AX,BX明显是“对字操作”,所以w=1
在查看本文章上面的“表4”,对应查到oo=11因为是寄存器寻址方式
在查看本文章上面的“表1”,对应查到rrr的值为000,因为当两个操

财软.联盟.fs119.net

作数都是寄存器,那么一般要以目的操作数为准
在查看本文章上面的“表3”,对应查到mmm的值为011,因为当两个操作数都是寄存器,那么一般要以源操作数为准
组合结果->w=1
oo=11
rrr=000
mmm=011
1000101woorrrmmm=1000101111000011B->8BC3H

财软,联盟,fs119.net

好了,已经解完第二题了,机器码为8BC3H
——————————————————————————————————————— 财,软联盟,fs119.net

呵呵,不错吧,很简单吧,有了80X86OPCODES查询表一切都是那么简单,如果还有什么问题,大家都来这里提问! 财 软联盟 fs119.net

剩下的: 财管家园 fs119.net

指令2->MOVEBX,0对应的机器码为:66BB00000000 财.软联盟.fs119.net

指令3->MOVCL,55H对应的机器码为:B155 财.软联盟.fs119.net

大家来练练手,注意指令2需要用到32位指令格式,请查阅相关的80x86汇编语言书籍的机器语言部分,应该有解释的。 财软联.盟.fs119.net

指令2的解法,请大家等待,或者大家研究一下,把解法贴出来,给大家参考哦! 财软联盟.fs119.net

财软联盟 fs119.net

财软联.盟.fs119.net


上一篇:举例说明在汇编语言中,"[]"的用法
下一篇:汇编与C语言配合

精品课程推荐