簡體   English   中英

AT&T 到 Intel 語法

[英]AT&T to Intel Syntax

我想將以下幾行從 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

確切的問題是我的英特爾文件沒有創建輸出文件

.lcomm.bss部分創建一個給定大小的零初始化變量。 因此,您的buffer db BUFFEREND應根據您的匯編程序的語法進行相應修改。 不幸的是,您忘記指定您使用的是哪一種。 對於nasm ,等效項可能是:

section .bss
buffer resb BUFFEREND

你也忘了提到確切的問題是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM