2014-04-06 5 views
-2

에 나는 인텔 (NASM)에 & T AT에서 선 다음 번역 할 :AT & T 인텔 구문

이것은 내 & 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 

정확한 probleme 내 인텔 파일이 더 OUTPUTFILE

답변

1

.lcomm를 생성하지 않는 .bss 섹션에서 주어진 크기의 0으로 초기화 변수를 생성하는 것입니다. 따라서 어셈블러의 구문에 따라 buffer db BUFFEREND을 수정해야합니다. 불행히도 당신이 사용하는 것을 잊어 버렸습니다. nasm의 경우 상당 수 :

section .bss 
buffer resb BUFFEREND 

또한 당신이 잊어 버린

정확한 문제가 무엇인지 언급.

+0

오, 죄송 합니다만, AT & T 문법에 대해'nasm'을 사용하고 있습니다. – Shibumi

+2

두 번째 열어보기 매개 변수를 확인하십시오. 나는 그들이 8 진수이어야한다고 생각하니? Nasm을위한'mov ecx, 3031q'? –

+0

고맙습니다. 프랭크 코 틀러. 문제 해결됨. – Shibumi