首页 > 解决方案 > 如何将此汇编代码转换为十六进制形式?

问题描述

什么是,

        MOV AX, 4512H
        MOV BX, 23AFH
        JMP NEXT
        ADD BH,AH
NEXT:   NOP

十六进制,我怎么去那里?

标签: assemblyx86hexmachine-code

解决方案


你的六行代码看起来像汇编语言的源代码。如果将文本写入一个名为 instance 的文本文件,"turtle.asm"则可以通过名为“汇编程序”的程序将其转换为十六进制代码。

R:\>type turtle.asm
        MOV AX, 4512H
        MOV BX, 23AFH
        JMP NEXT
        ADD BH,AH
NEXT:   NOP

R:\>euroasm turtle.asm
I0010 EuroAssembler version 20191104 started.
I0020 Current directory is "R:\".
I0180 Assembling source file "turtle.asm".
I0270 Assembling source "turtle".
I0310 Assembling source pass 1.
I0310 Assembling source pass 2.
I0330 Assembling source pass 3 - final.
I0760 16bit TINY BIN file "turtle.bin" created from source, size=11.
I0750 Source "turtle" (5 lines) assembled in 3 passes with errorlevel 0.
I0860 Listing file "turtle.asm.lst" created, size=705.
I0980 Memory allocation 320 KB. 21 statements assembled in 1 s.
I0990 EuroAssembler terminated with errorlevel 0.

此命令将您的源代码转换"turtle.asm"为 file 中 11 个字节的二进制代码"turtle.bin"。您可以在列表文件中看到它们的十六进制值"turtle.asm.lst"

R:\>type turtle.asm.lst
|                           turtle: PROGRAM
|[BIN]                     ::::Section changed.
|0000:B81245               |        MOV AX, 4512H
|0003:BBAF23               |        MOV BX, 23AFH
|0006:EB02                 |        JMP NEXT
|0008:00E7                 |        ADD BH,AH
|000A:90                   |NEXT:   NOP
|                           ENDPROGRAM turtle:
|        **** ListMap "turtle.bin",groups=1,segments=1,entry=,stack=[BIN]:0000FFFEh
|        [BIN],VA=00000000h,size=0000000Bh=11,group [BIN]
|          [BIN],VA=00000000h,size=0000000Bh=11,width=16,align=0010h,purpose=CODE+DATA+BSS+STACK
|        **** ListGlobals "turtle.bin",Global=0,Public=0,Extern=0,eXport=0,Import=0

如果您将文件扩展名从 更改".bin"".com",DOS 或 DosBox 或 32 位 Windows 将尝试执行您的指令。在这种情况下,您的程序会失败,因为您没有正确终止它。将最后一行从 NEXT: NOP to更改为NEXT: RET 正常运行(尽管它没有做任何有用的事情),正如您在 Borland TurboDebugger 中看到的那样:

R:\td turtle.com

推荐阅读