【发布时间】: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
确切的问题是我的英特尔文件没有创建输出文件
【问题讨论】: