AT& T到英特尔语法

时间:2014-04-06 00:42:16

标签: assembly intel att

我想将以下几行从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文件没有创建输出文件

1 个答案:

答案 0 :(得分:1)

.lcomm.bss部分中创建给定大小的零初始化变量。因此,根据汇编程序的语法,应相应地修改buffer db BUFFEREND。很遗憾,您忘记指定使用哪一个。对于nasm,等价物可以是:

section .bss
buffer resb BUFFEREND

你也忘了提到确切的问题。