我想将以下几行从AT& T转换为英特尔(nasm):
这是我的AT& T-Code:
.equ BUFFEREND, 1
.lcomm buffer, BUFFEREND
cmpb $97, buffer
这是我的英特尔代码:
BUFFEREND EQU 1
buffer db BUFFEREND
cmp BYTE [buffer], 97
我的翻译有什么问题?我有以下代码中的行。 AT& T-Code工作正常。它以大写字符转换一个文件中的所有大写字符,并将其保存在新文件中。 :
.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
确切的问题是我的intel文件没有创建输出文件
答案 0 :(得分:1)
.lcomm
在.bss
部分中创建给定大小的零初始化变量。因此,根据汇编程序的语法,应相应地修改buffer db BUFFEREND
。很遗憾,您忘记指定使用哪一个。对于nasm
,等价物可以是:
section .bss
buffer resb BUFFEREND
你也忘了提到确切的问题。