Assembly 在Mac上执行程序集文件

Assembly 在Mac上执行程序集文件,assembly,Assembly,(顺便说一下,我用的是Mac电脑) 所以我刚开始学习汇编,我尝试了以下程序: 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 我试着在终端上运行它: gcc -o sieve sieve.s

(顺便说一下,我用的是Mac电脑)

所以我刚开始学习汇编,我尝试了以下程序:

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
我试着在终端上运行它:

gcc -o sieve sieve.s
但这给了我这些错误:

sieve.s:1:no such instruction: `section .text'
sieve.s:2:no such instruction: `global _start'
sieve.s:6:too many memory references for `mov'
sieve.s:7:too many memory references for `mov'
sieve.s:8:too many memory references for `mov'
sieve.s:9:too many memory references for `mov'
sieve.s:10:suffix or operands invalid for `int'
sieve.s:12:too many memory references for `mov'
sieve.s:13:suffix or operands invalid for `int'
sieve.s:15:no such instruction: `section .data'
sieve.s:17:no such instruction: `msg db (72)ello,world!(44)0xa'
sieve.s:18:no such instruction: `len equ $-msg'

我猜这与用汇编语言的错误版本写东西有关,但我对汇编语言了解不多,所以我一点线索也没有。有人能帮忙吗?

除了Brett Hale(AT&T语法)给出的提示之外,您还有第二个问题:

每个操作系统都有其他机制来调用操作系统的功能

寄存器中带有参数的中断“int 0x80”是32位Linux中调用操作系统函数的方式。即使64位Linux也使用不同的方法


将程序转换为AT&T语法后(据我所知,新的GCC变体甚至允许在使用额外代码行时使用Intel语法),您的程序将无法在MacOS上运行,因为MacOS使用的机制与Linux中使用的“int 0x80”不同。

GNU汇编程序默认使用AT&T语法。对于独立ASM编程来说,它也不太“友好”。你可能看起来像。或者调整。@BrettHale感谢您的回复,我尝试了这个示例,但我得到了以下错误:ld:
库未找到-lcrt1.10.6。o collect2:ld返回了1个退出状态
将所有
\u start
替换为
main