汇编指令与机器码的相互转换(来自80x86汇编小站)

汇编代码转成机器码mips-code-to-machine-code 汇编代码转成机器码——对输入有几点要求:指令是小写;一行只能有一条指令;每行开头不能有空格,必须一上来就是操作符,后面可以有空格;立即数只处理十进制数;输入-1代表程序结束 立即下载

作者:HSLY 

网站:http://www.x86asm.com 

E-MAIL: pliceman_110@163.com

HI,欢迎进入Assembly Language into Mechine Code 教程。首先你得从80x86汇编小站下载<Intel 80x86 OPCODES手册>

下载地址:Soft_Show.asp?SoftID=8

   机器语言我们只要重点理解一下几个概念:
  
   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汇编小站http://www.x86asm.com提供的OPCODES手册来查阅。

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

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

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

    mod字段与r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式现在你们下载了80x86汇编小站(http://www.x86asm.com)提供的OPCODES 手册了吗?
下载好了,请解压后打开里面的:opcodes.html  文件,然后熟悉里面的表格:
 
现在熟悉简单的:
______________________________________________________________________________
表1 <PS:部分资料>        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 <PS:部分资料>        rrr : Index Register
                         000 : EAX

                         001 : ECX

                         010 : EDX

                         011 : EBX

                         100 : No Index

                         101 : EBP

                         110 : ESI

                         111 : EDI
______________________________________________________________________________
表3 <PS:部分资料>        mmm : Function              11
                                                          w=1
                         000 : DS:[BX+SI]         

                         001 : DS:[BX+DI]

                         010 : SS:[BP+SI]

                         011 : SS:[BP+DI]                  BX              

                         100 : DS:[SI]

                         101 : DS:[DI]

                         110 : SS:[BP]

                         111 : DS:[BX]
______________________________________________________________________________
表4 <PS:部分资料>
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,弄不明白,请指教。

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

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

解法: 判断-> 这个是8086汇编16位汇编指令格式,并且是立即寻址方式
       查表-> 打开opcodes.html文件,找到标题为“Main Instructions”,单击“M”字母,然后对应查看 “MOV Reg,Imm”格式的“OpCode”项为:1011wrrr
     再判断-> 由于寄存器是AX, 立即数是1234H,明显是“对字操作”,所以w=1
               在查看本文章上面的“表1”,对应的查到rrr的值为000
   组合结果-> w=1
               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 明显是“对字操作”,所以w=1
               在查看本文章上面的“表4”,对应查到oo=11 因为是寄存器寻址方式
               在查看本文章上面的“表1”,对应查到rrr的值为000 ,因为当两个操

作数都是寄存器,那么一般要以目的操作数为准
               在查看本文章上面的“表3”, 对应查到mmm的值为011 ,因为当两个操作数都是寄存器,那么一般要以源操作数为准
    组合结果-> w=1
               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汇编语言书籍的机器语言部分,应该有解释的。

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

                                                           ----待续

STM32F103移植NuttX实战:从零搭建最小系统到串口Shell(附完整配置文件) 本文详细介绍了在STM32F103C8T6开发板上移植NuttX实时操作系统的完整过程,包括环境搭建、BSP配置、系统时钟初始化、驱动裁剪、编译烧录及串口Shell交互。通过实战指南帮助开发者快速掌握NuttX移植技巧,解决典型问题,适用于嵌入式系统开发。 阅读详情

相关推荐

【Python学习日记:PySide6】【持续更新】

说明:PySide6 是 Qt for Python 的一部分,是一个 Python 绑定库,可以用来创建跨平台的 GUI 应用程序。它将 Qt 框架的丰富功能带到了 Python 环境中,允许开发者使用 Python 编写 GUI 应用程序。

XLQ的博客 8045

x86/x64软件逆向分析【提高篇】

本课程为《x86/x64软件逆向分析》系列课程之“提高篇”,在“入门篇”的基础上,补充了更多深入和复杂的逆向分析内容。本课程可以作为逆向工程师的参考教程,也可以作为对软件逆向分析充满兴趣的朋友们的“提高”教程。 如果你看到某个exe程序能够实现某种特殊的功能,但你却不知道如何实现,这时候,你通过反汇编、反编译和动态跟踪等方法分析出其具体的实现过程,进而“参考”这个过程自己实现这个特殊的功能,这种行为就是逆向工程。逆向不仅仅是反编译,而且还要推倒出设计,并且能够文档化,从而使软件得以更好的维护。 在工作中,发现现用软件中有BUG,但软件开发商已经不存在了,怎么办?掌握软件逆向分析技术,给它“修”一下。 传说中的神秘的“黑客”、“大神”,无非是掌握了你还没掌握的某些技能而已,知道了你所不知道的某些特殊知识而已。掌握《x86/x64软件逆向分析》,你离这些神秘的“黑客”、“大神”只有一步之遥。 “天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣!” 逆向分析,如同玩猜谜游戏,当你看到一个个谜底慢慢浮现的时候,只有身在其中的人,才能享受其中的刺激和乐趣。作为看客,永远无缘体验这份乐趣。

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 742

汇编指令和机器码在线转换工具

汇编指令和机器码在线转换工具

someby的博客 3万+

ESP32 STA AP模式下,设备连接 ESP的AP 后无法上网,无法访问域名上网(或者Failed to enable NAPT)

ESP32 STA AP模式下,设备连接 ESP的AP 后无法上网,无法访问域名上网(或者Failed to enable NAPT)1.可能是ESP STA模式未成功连接到路由器,确保 STA 成功连接到外部网络。2.检查 STA 和 AP 的网络配置是否正确,避免子网冲突。3.ESP32的NAPT功能未正确启用,确保 menuconfig 中已启用 IP_NAPT。4.DNS服务器未正确配置。

qq_34885669的博客 1540

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

《Vue3+OpenLayers实现多边形绘制与区域处理》摘要:本文介绍如何基于Vue3+OpenLayers+ol-ext实现地图多边形交互功能。核心功能包括:鼠标绘制任意多边形、拖动顶点编辑边界、遮罩显示(非选区变红)、选区剪切显示及功能重置。技术方案采用OpenLayers处理地图渲染,ol-ext实现高级遮罩/剪切效果,ElementPlus提供UI控件。该方案适用于城市规划、园区展示等需要区域标记的场景,完整代码展示了从初始化、绘制、编辑到特效处理的全流程实现。

小彭的博客 962

X64(64位)汇编指令与机器码转换原理

REX.W说明需要REX前缀,REX格式为0100WRXB,W表示操作数宽度,W=1表示64位,X位默认为0,因此REX=01001001=49h。REX.W说明需要REX前缀,REX格式为0100WRXB,W表示操作数宽度,W=1表示64位,X位默认为0,因此REX=01001001=49h。REX.W说明需要REX前缀,REX格式为0100WRXB,W表示操作数宽度,W=1表示64位,X位默认为0,因此REX=01001001=49h。第二步,以寄存器操作数,反推ModRM.reg与REX.R。

百里杨的博客 7219

Trae的付费之路还挺艰难,茫茫多的人想付付不了(附解决办法)

不得不说,Trae国际版这个付费其实整的挺复杂的,但没办法,毕竟有政策限制,付费成功后,你就是尊贵的Pro用户啦,使用Claude 4不排队还是挺爽的,而且600次其实不算少了,有一个小技巧,简单的问题就把模型切到Gemini-2.5-flag,因为使用这个模型是没有次数限制的。其次付费的时候有个ZIP Code,这东西也是个迷之存在,有的地区节点需要填,有的不需要,如果你选到了不需要填的节点,那很好,付费就行了,如果需要填,可以填一个51800试试。

cpp加油站的专栏 5881

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

信息来源:80x86汇编小站原始连接:http://www.x86asm.com/DisplayArticle.asp?BoardID=3&ArticleID=32文章作者:HSLY作者:HSLY 网站:http://www.x86asm.com E-MAIL: pliceman_110@163.comHI,欢迎进入Assembly Language into Mechine Code 教程。 

|游梦空间| 3948

手把手教你学Simulink--四翼无人机滑模控制器设计与仿真

四翼无人机(Quadcopter)滑模控制(Sliding Mode Control, SMC)是一种鲁棒性很强的非线性控制方法,特别适用于存在模型不确定性和外部扰动的情况。滑模控制器通过强制系统状态进入并保持在一个预定义的滑模面上,从而实现对期望轨迹或姿态的精确跟踪。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个基于滑模控制策略的四翼无人机系统。

MHD0815的博客 184

3、深入了解响应式扩展(Reactive Extensions)

本文深入探讨了响应式扩展(Reactive Extensions,Rx)的起源、核心概念及其在客户端和服务器端的应用。从Volta项目谈起,解析了Rx如何解决事件传输问题,并介绍了可观察对象(IObservable)和观察者(IObserver)的设计与实现机制。文章还详细讲解了Rx操作符、弹珠图的使用、拉模型与推模型的对偶性原理,并通过代码示例展示了如何将枚举转换为可观察对象。最后总结了Rx的优势,并展望其在未来软件开发中的广泛应用前景。

m2n3b4v5c6的博客 113

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

机器语言我们只要重点理解一下几个概念:1. 机器语言指令有操作码(OP)和地址码两部分组成 |_____________OP_______________|__d__|__w__||_____________OP_______________|__s__|__w__| 在多数操作码中,常使用某些位来指示某些信息:如图上结构里的: w=1 时 对字来操作w=0 时 对字节来操作d

jiangyuanfu的专栏 2057

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

汇编指令与机器码的相互转换 贴子发表于:2008-10-28 12:48:03 机器语言我们只要重点理解一下几个概念:1. 机器语言指令有操作码(OP)和地址码两部分组成 |_____________OP_______________|__d__|__w__||_____________OP_______________|__s__|__w__| 在多数操作码中,常使用某些位来

gooogleman#foxmail.com 4927

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

80x86 opcodes : http://www.aogosoft.com/download/opcodes.rar

okmnji79513的专栏 1131

8086(16位)汇编指令与机器码转换原理

在上一节,我们讲了X86指令基本格式。在8086架构下,是不存在SIB字节的,因此,我们重点关注ModR/M。

百里杨的博客 6597

X86(32位)汇编指令与机器码转换原理

本文属于《》之一,欢迎查看其它文章。在X86 32位架构下,指令格式定义中,新增了SIB字节。SIB(Scale, Index, Base)字节的意义是用于指定一种复杂的寻址方式(按比例变址寻址),在中已经介绍过了。

百里杨的博客 2951

汇编指令转机器码

等指令,它们后面都有一个在寄存器或存储器中的字节长的操作数和一个立即数,每条指令使用的操作码都为80。通过汇编和链接,设置改状态位为1,则说明是32位操作数,否则是16位操作数。在16位模式中使用前缀,则会修改为32位,若在32位模式中使用前缀,则会修改为16位,具有反转当前默认操作数大小的作用。reg域要满足有且仅有一个操作数为寄存器或存储器,另外一个操作数必须是立即数。表示该指令是一个寄存器到寄存器的操作,或一个立即数到寄存器的操作。,机器码只有一个字节,这很方便。...

XiaoLing 一直摆烂哇! 5890

如何将机器码转换为汇编代码

在linux内核里面有很多脚本工具,位于linux/scripts/。里面有一个decodecode工具可以用来转换机器码,用法如下: 比如有一行armv8的机器码:f2a800e8,将其翻译成汇编。 :$ echo "f2a800e8" > code :$ ./decodecode < code Code starting with the faulting instruction =========================================== 0: f2a8

wujianyongw4的博客 4486

汇编指令机器码对应列表

指令集依照机器操作码、汇编助记符和汇编操作数来描述指令,遵循下列约定: l reg8: 8位寄存器。 l reg16: 16位寄存器。 l mem8: 8位内存数值。 l mem16: 16位内存数值。 l immed8: 8位立即数值。 l immed16: 16位立即数值。 l immed32: 32位立即数值。 l segReg...

weixin_43708844的博客 9268

汇编指令和机器码的对应表_一、汇编基础

1、汇编语言的产生早期我们编程是用机器可以执行的机器码编程的,但是这样太复杂,于是人们就想办法,于是汇编语言就产生了。汇编工作过程如下图2、汇编语言的组成汇编语言由(1)汇编指令:机器码的助记符,有对应的机器码(2)伪指令:没有对应的机器码,由编译器执行,计算机并不执行(3)其他符号:+,-,*,/等,由编译器识别,没有对应的机器码汇编语言的核心是汇编指令,它绝对了汇编语言的特性,就像我们每一种构...

weixin_28756281的博客 4662

计算机结构之X86指令集编码

在学习了解计算机结构时,针对X86指令从汇编码到机器码的转换过程详解。除开SUB 操作码针对4Byte立即操作数时,适用Mod R/M 模型来处理;当Src.1 和Src.2都是寄存器时,属于寄存器直接寻址,Mod 为11,此时Reg和R/M的数据要进行互换一下,参考上面的例子;如果是Src.1是寄存器,Src.2表示存储的是地址且无偏移量的情况下,那么就是非直接寻址,Mod 为00,如果在非直接寻址情况下,有偏移量,那么Mod就需要根据偏移量的大小参考表格[2]去选择是01还是10。

weixin_44078173的博客 1862

汇编指令和机器码的对应表

一、汇编速查          MOV   AA,BB         将   BB   放到   AA   里          CALL                   调用子程序   (相当于   BASIC   的   GOSUB)          RET   与   RETF     返回程序       (相当于   BASIC   的   RETURN)       

it技术学习 2万+

【MFC X86常用汇编指令转十六进制机器码】

MFC X86常用汇编指令转十六进制机器码 X86常量宏.h #pragma once #define CALL 1 #define RETN 2 #define PUSHAD 3 #define POPAD 4 #define CALLEAX 5 #define CALLECX

lwqamm的博客 2988
上一篇: Bjarne Stroustrup言论翻译
下一篇: ML.EXE常用汇编器参数
mmstnet
博客等级 码龄19年 3粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值