首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在汇编80386中将值插入数组?

如何在汇编80386中将值插入数组?
EN

Stack Overflow用户
提问于 2016-05-02 12:44:43
回答 1查看 821关注 0票数 0

我必须将空的5整数数组xarr替换为数字1-5。代码编译完成了,除了最后这部分之外,我相信它是正确的。我的输出现在是12345,这就是我需要的。但是,我应该只在最后使用一次打印功能,并且输出12345应该是垂直的(一次一个),而不是水平的。

代码语言:javascript
运行
复制
.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
EN

回答 1

Stack Overflow用户

发布于 2016-05-02 14:36:40

根据最后一条mov指令,它应该是:

代码语言:javascript
运行
复制
movl from_where, to_where

这是因为一个人不能从%eax移到零。

因此,您的操作数到其他mov的顺序是错误的。

代码语言:javascript
运行
复制
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语言编写此程序,仔细测试它,让编译器将其转换为汇编程序,然后查看生成的代码。

顺便说一下,在汇编语言中,注释通常是这样写的,即它们都在同一列中开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36975135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档