如何在Ubuntu 18.04中编译和运行程序集?


16

所以最近我想学习汇编,所以学到了一些东西。我将其放入nano并将其保存为parker.asm。现在我想知道如何编译和运行它?我已经到处搜索,仍然找不到它。我真的很好奇,即使您不能使用它,也没有必要学习一种语言。


4
很高兴在千兆字节大小的框架中解决所有问题时提出这样的问题:-)
PerlDuck

4
请注意,有两种具有不同语法的主要程序集“样式”:AT&T(gas)和Intel(nasm)。在选择汇编器之前,您应该确定要学习和使用的语法。在此处查看详细的比较表。如果仍然不确定,请使用Intel / nasm。
猫猫为莫妮卡(Monica)

2
您可以使用默认情况下应安装在标准Ubuntu计算机上的gcc。文件扩展名为,.s并且编译命令应该为gcc myprog.s
FedonKadifeli '19

有人想结束有关如何在Ubuntu中编译汇编语言程序的问题。😢为什么要关闭它作为主题?它与来自默认Ubuntu存储库的软件包以及Ubuntu中的汇编代码有关,而不是与如何编写汇编代码有关。
karel

Answers:


17

在当前所有受支持的Ubuntu版本中,打开终端并输入:

sudo apt install as31 nasm  

as31:Intel 8031/8051汇编器
这是一个快速,简单,易于使用的Intel 8031/8051汇编器。

nasm:通用x86汇编程序
Netwide汇编程序。NASM当前将输出平面二进制文件,a.out,COFF和ELF Unix目标文件以及Microsoft 16位DOS和Win32目标文件。

这是打印Hello world的汇编语言程序的代码。

section     .text
global      _start 
_start: 
    mov     edx,len   
    mov     ecx,msg   
    mov     ebx,1   
    mov     eax,4   
    int     0x80   
    mov     eax,1  
    int     0x80   
section     .data
msg     db  'Hello world',0xa  
len     equ $ - msg   

如果在Ubuntu 18.04中使用NASM,则用于编译和运行名为hello.asm的.asm文件的命令为:

nasm -f elf64 hello.asm # assemble the program  
ld -s -o hello hello.o # link the object file nasm produced into an executable file  
./hello # hello is an executable file

1
为什么需要as31包装?从问题和软件包的描述来看,听起来并没有达到目的。
kasperd

4
@kasperd实际上as31是不需要的。受这个问题的启发,我在汇编程序中用Google搜索了一个Hello World,仅安装了nasm它即可。:-)我认为karel只是提到了它。
PerlDuck

1
如果您还想学习as31的汇编语言,请使用as31。
karel

2
@kasperd:OP既没有指定他正在编写的ISA,也没有指定他正在使用的汇编语法,所以有意义的是包括尽可能多的选项。
约尔格W¯¯米塔格

1
通过将安装命令分为nasm和针对8051汇编器+仿真器的命令(似乎至少有一个),该答案将受益。由于目的是学习汇编,因此为x(86)架构运行简单的模拟器可能很有意义。
海德

2

Ubuntu随附(便携式GNU汇编器)

as file.s -o file.out
ld file.out -e main -o file
./file

-o:告诉将输出发送到哪里
-e:告诉ld起始符号

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.