我必须将空的5整数数组xarr替换为数字1-5。代码编译完成了,除了最后这部分之外,我相信它是正确的。我的输出现在是12345,这就是我需要的。但是,我应该只在最后使用一次打印功能,并且输出12345应该是垂直的(一次一个),而不是水平的。
.globl _asm_main
.section .data, ""
.section .bss, ""
xarr: .fill 5, 4, 0
.section .text, ""
_asm_main:
enter $0, $0 # set up stack frame
pusha # save registers
movl $1, %edi
movl %edi, xarr(, %edi, 4)
movl xarr(, %edi, 4), %eax
call print_int
incl %edi
movl %edi, xarr(, %edi, 4)
movl xarr(, %edi, 4), %eax
call print_int
incl %edi
movl %edi, xarr(, %edi, 4)
movl xarr(, %edi, 4), %eax
call print_int
incl %edi
movl %edi, xarr(, %edi, 4)
movl xarr(, %edi, 4), %eax
call print_int
incl %edi
movl %edi, xarr(, %edi, 4)
movl xarr(, %edi, 4), %eax
call print_int
popa # restore registers
movl $0, %eax # return program status in eax
leave # restore stack frame
ret发布于 2016-05-02 14:36:40
根据最后一条mov指令,它应该是:
movl from_where, to_where这是因为一个人不能从%eax移到零。
因此,您的操作数到其他mov的顺序是错误的。
movl xarr(, %edi, 4), %eax # read from the array
movl %edi, xarr(, %edi, 4) # write into the array; note the %edi instead of the %eax并注意每个寄存器在每个点上包含的内容。您似乎没有初始化%eax,而是将它的值写入数组。
您可能应该先用C语言编写此程序,仔细测试它,让编译器将其转换为汇编程序,然后查看生成的代码。
顺便说一下,在汇编语言中,注释通常是这样写的,即它们都在同一列中开始。
https://stackoverflow.com/questions/36975135
复制相似问题