【发布时间】:2018-10-15 22:18:19
【问题描述】:
作为课程的一部分,我需要编写具有特定格式的汇编代码。老师称之为“Intel syntax x86-64”。我尝试使用给定的命令 (gcc -O3 -o op sc.s) 编译它,尽管在 linux PC 上运行良好,但在 Mac 上却失败了。经过一些研究,我发现 Mac OS 不支持这种语法,并按照老师的建议,我尝试从可启动的 USB 密钥和虚拟机(使用 VirtualBox)上运行 Linux,但由于键盘兼容性问题,两者都失败了。我搜索了一些在线解决方案,但没有一个可以毫无问题地编译源代码。如何在不购买新计算机的情况下运行它?如果可能的话,我想运行这个确切的语法。
感谢您阅读我!
这是他给我们的代码示例:
.intel_syntax noprefix
.data
msg: .asciz "Hello, world!\n"
.text
.global main
.type main, @function
main: PUSH RBP
MOV RBP, RSP
MOV RDI, offset flat:msg
CALL printf
MOV EAX, 0
POP RBP
RET
With 可以用 gcc 编译(现场显示)但用 gcc -o hw1 hw.s 或 gcc -o hw1 -masm=intel hw.s 编译它会给我以下错误:
hw.s:6:9: error: unknown directive
.type main, @function
^
hw.s:9:29: error: unknown token in expression
MOV RDI, offset flat:msg
编辑:在虚拟机上设置 ssh 服务器并通过主机终端连接到虚拟机使 VirtualBox 的操作变得更加容易,请参阅 https://stackoverflow.com/a/10532299/5770818
【问题讨论】:
-
macOS 使用不支持此语法的不同汇编程序。你可以安装 GNU assembler gas 来让它工作。但即便如此,您也必须注意其他差异(例如符号装饰)。
-
附带说明,“键盘兼容性问题”不相关。任何操作系统都可以安装在任何键盘布局上
-
@PaulR 我尝试使用自制软件安装 nasm,但是我收到其他错误,让我认为预期的语法和我的文件写入的语法之间可能存在一些语法差异。
-
@fuz 不是 gcc 的 GNU 部分吗?难道没有办法编译这个确切的语法吗?
-
@LưuVĩnhPhúc 我使用了 linux 无法很好识别的 MacOS-Belgian 键盘,因此无法在 VM 中写入某些基本字符(即使使用可视键盘)并且可启动安装无法识别键盘或触控板。我写这个是为了暗示经典引导或模拟效果不佳。
标签: macos assembly x86-64 intel-syntax