如何初始化GNU x86中的变量?你如何编译和运行它们?我到处搜索,但我找不到合适的教程。这是我的代码。我也不能肯定我的语法是否正确与否,因为我仍然无法在.data
部分测试他们如何初始化变量,编译并运行GNU汇编程序
section .data
number db 'Enter ten numbers: ', 10
numberLen equ $-number
i dw 0
section .bss
digits resw 10
section .text
global _start
_start:
movw $0, %esi
movl $4, %eax
movl $1, %ebx
movl $number, %ecx
movl $32, %edx
int $0x80
for:
cmpsw $10, (%i)
jge skip
movl $3, %eax
movl $0, %ebx
lea digits(%esi), %ecx
movl $2, %edx
int $0x80
subw $0x30, digits(%esi)
incw %esi
incw %i
jmp for
skip:
pushw %digits
pushw %i
call sort
movb $0, %esi
movw $0, %i
print:
cmpsw $10, (%i)
jge exit
addw $0x30, digits(%esi)
movl $4, %eax
movl $1, %ebx
lea digits(%esi), %ecx
movl $1, %edx
int $0x80
incw %esi
incw %i
jmp print
exit:
movl $1, %eax
movl $0, %ebx
int $0x80
sort:
movw %esp, %ebp
movb $0, %esi
for2:
movw $0, %edi
cmpsw $10, (%esi)
jge after
for3:
movw digits(%edi), %al
cmpsw (%edi), (%esi)
jl cmp2
cmp1:
cmpsw (%al), digits(%esi)
jmp continue
cmp2:
cmpsw digits(%esi), (%al)
continue:
jge next
movw digits(%esi), %bl
movw digits(%edi), %al
movw %al, digits(%esi)
movw %bl, digits(%edi)
next:
cmpsw $10, (%esi)
jge next2
incw %edi
jmp for3
next2:
incw %esi
jmp for2
after:
ret 6
_“你如何初始化GNU x86中的变量?以及如何编译和运行它们?”_你不编译或运行变量。将汇编代码组装到目标代码中,然后将其链接到可运行的可执行文件中。你能指出你不确定的具体行吗? – Michael 2014-11-24 08:13:20
如果你可以评论你的代码(每条评论通常被认为是最好的),我们将有一个更容易理解和帮助你的时间。目前,我无法确定你的代码试图做什么。 – 2014-11-24 08:55:15