Assembly 写入正在运行的汇编程序

Assembly 写入正在运行的汇编程序,assembly,Assembly,我有一个关于汇编编程的一般性问题 编写高级语言时,编译器接受复杂的高级指令,并将它们分解为一组二进制的机器级指令 程序集不需要它,因为您正在用机器代码编写 但是,你实际上是如何把你写的代码转换成二进制的呢?我的意思是你显然是在一个文本编辑器中写作。您使用什么将这些指令放入二进制程序 程序集不需要它,因为您正在用机器代码编写 实际上,除非您输入十六进制或二进制数字,否则您不是在用机器语言编程。汇编语言是底层机器代码(例如,53 32 01)的符号表示(例如,mov$1,%eax)。程序集到机器代码

我有一个关于汇编编程的一般性问题

编写高级语言时,编译器接受复杂的高级指令,并将它们分解为一组二进制的机器级指令

程序集不需要它,因为您正在用机器代码编写

但是,你实际上是如何把你写的代码转换成二进制的呢?我的意思是你显然是在一个文本编辑器中写作。您使用什么将这些指令放入二进制程序

程序集不需要它,因为您正在用机器代码编写

实际上,除非您输入十六进制或二进制数字,否则您不是在用机器语言编程。汇编语言是底层机器代码(例如,
53 32 01
)的符号表示(例如,
mov$1,%eax
)。程序集到机器代码通常有一对一的映射,但并不总是这样

关于如何将汇编语言转换为CPU可以运行的机器代码,您可以使用汇编语言,它基本上只是汇编语言的“编译器”

例如,您可以查看Microsoft、Netwide汇编器、GNU自己的和


举个例子,这里有一个演示如何组装一个短程序的脚本(可能有错误,我实际上没有尝试链接和运行它,但这与我在这里试图表达的观点无关)。首先,让我们展示程序集源代码:

pax> cat testfile.nasm
section .text
         mov   ah, 09h        ; int 21/09 write string
         mov   dx, msg
         int   21h

         mov   ax, 4c00h      ; int 21/4c exit
         int   21h

section  .data
msg:     db   'Hello, world.'
         db   10, '$'
然后,我们将使用
nasm
组装它,并向您显示生成的对象文件:

pax> nasm -f elf testfile.nasm
pax> objdump -ds testfile.o

testfile.o:     file format elf32-i386

Contents of section .text:
 0000 b40966ba 0000cd21 66b8004c cd21      ..f....!f..L.!
Contents of section .data:
 0000 48656c6c 6f2c2077 6f726c64 2e0a24    Hello, world..$

Disassembly of section .text:

00000000 <.text>:
   0:   b4 09                   mov    $0x9,%ah
   2:   66 ba 00 00             mov    $0x0,%dx
   6:   cd 21                   int    $0x21
   8:   66 b8 00 4c             mov    $0x4c00,%ax
   c:   cd 21                   int    $0x21
b4 09 66 ba 00 00 cd 21 66 b8 00 4c cd 21