AT&T 到 Intel 语法
Posted
技术标签:
【中文标题】AT&T 到 Intel 语法【英文标题】:AT&T to Intel Syntax 【发布时间】:2014-04-06 00:42:15 【问题描述】:我想将以下几行从 AT&T 翻译成 Intel (nasm):
这是我的 AT&T 代码:
.equ BUFFEREND, 1
.lcomm buffer, BUFFEREND
cmpb $97, buffer
这是我的英特尔代码:
BUFFEREND EQU 1
buffer db BUFFEREND
cmp BYTE [buffer], 97
我的翻译有什么问题?我有以下代码中的行。 AT&T 代码有效。它将一个文件中的所有小写字符转换为大写字符并将其保存在一个新文件中。 :
.global _start
.equ BUFFEREND, 1
.lcomm buffer, BUFFEREND
_start:
movl %esp, %ebp
movl $5, %eax
movl 8(%ebp), %ebx
movl $0, %ecx
int $0x80
pushl %eax
movl $5, %eax
movl 12(%ebp), %ebx
movl $03101, %ecx
movl $0666, %edx
int $128
pushl %eax
loop:
movl -4(%ebp), %ebx
movl $3, %eax
movl $buffer, %ecx
movl $BUFFEREND, %edx
int $128
pushl %eax
cmpb $97, buffer
jl next_byte
cmpb $122, buffer
jg next_byte
subb $32, buffer
next_byte:
movl %eax, %edx
movl $4, %eax
movl -8(%ebp), %ebx
movl $buffer, %ecx
int $0x80
popl %eax
cmpl $BUFFEREND, %eax
jne loopexit
jmp loop
loopexit:
movl $1, %eax
movl $0, %ebx
int $0x80
确切的问题是我的英特尔文件没有创建输出文件
【问题讨论】:
【参考方案1】:.lcomm
在.bss
部分中创建一个给定大小的零初始化变量。因此,您的buffer db BUFFEREND
应该根据您的汇编程序的语法进行相应的修改。不幸的是,您忘记指定使用哪一个。对于nasm
,等价的可能是:
section .bss
buffer resb BUFFEREND
你也忘了提到确切的问题是什么。
【讨论】:
抱歉,我使用nasm
表示英特尔,as
表示 AT&T 语法
检查第二次打开的参数。我认为它们应该是八进制的? mov ecx, 3031q
代表 Nasm?以上是关于AT&T 到 Intel 语法的主要内容,如果未能解决你的问题,请参考以下文章
Linux下AT&T汇编语法格式与Intel汇编语法格式异同
在 TextMate 中突出显示 Intel 和 AT&T 汇编语法