Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1074967
  • 博文数量: 242
  • 博客积分: 10209
  • 博客等级: 上将
  • 技术积分: 3028
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 09:27
文章分类

全部博文(242)

文章存档

2014年(1)

2013年(1)

2010年(51)

2009年(65)

2008年(124)

我的朋友

分类: 网络与安全

2009-03-10 20:32:32

指令格式简介

8086所用的16位指令格式:


|
操作码| + |mod-reg-r/m| + |位移量| + |立即数|
1~2
字节    0~1字节         0~2字节   0~2字节

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

问题:

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

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

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

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

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

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

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

PS: "+" 符号不为加号

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

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

指令4 > MOV AX,BX 对应的机器码为:8BC3

解法: 判断-> 这个是8086汇编16位汇编指令格式,并且是寄存器寻址方式
查表-> 打开opcodes.html文件,找到标题为“Main Instructions”,单击“M ”字母,然后对应查看 “MOV Reg,Reg”格式的“OpCode”项为:1000101woorrrmmm
再判断-> 由于寄存器是AX, BX 明显是对字操作,所以w1
在查看本文章上面的4”,对应查到oo11 因为是寄存器寻址方式
在查看本文章上面的1”,对应查到rrr的值为000 ,因为当两个操作数都是寄存器,那么一般要以目的操作数为准
在查看本文章上面的3”, 对应查到mmm的值为011 ,因为当两个操作数都是寄存器,那么一般要以源操作数为准
组合结果-> w1
oo
11
rrr
000
mmm
011
1000101woorrrmmm
1000 1011 1100 0011B ->8BC3H

好了,已经解完第二题了,机器码为8BC3H
——————————————————————————————————

呵呵,不错吧,很简单吧,有了80X86 OPCODES 查询表一切都是那么简单,如果还有什么问题,大家都来这里提问!

剩下的:

指令2 > MOV EBX,0 对应的机器码为:66BB00000000

指令3 > MOV CL,55H 对应的机器码为: B155 大家来练练手,注意指令2 需要用到32位指令格式,请查阅相关的80x86汇编语言书籍的机器语言部分,应该有解释的。Phontol.com

指令2的解法,请大家等待,或者大家研究一下,把解法贴出来,给大家参考哦!

附带上传了opcodes.html文件。

文件:opcodes.rar
大小:8KB
下载:下载
阅读(1326) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~