IM汤姆凯特 2022-04-03 17:49 采纳率: 50%
浏览 51
已结题

arm汇编语言 如何实现 数组中数据累加 然后用printf输出

问题遇到的现象和发生背景

练习ARM汇编语言,可以实现,循环输出数组中的数据,
想问,应该如何才能通过循环累加,把数组中的和求出,然后用输出显示出来

问题相关代码,请勿粘贴截图
.data
    fmt:.asciz "%10d\n"
    ary:.word 0,1,2,3,4,5,6,7,8,9
    .equ counter,( . - ary)/4
.text
.globl main
 main:
    stmfd sp!,{lr}
    mov r4,#0
    mov r6,#0
    ldr r5, =ary
    b testfor
loop:
        ldr r0,=fmt
        ldr r1,[r5],#4
        bl printf
        add r4,#1
testfor:cmp r4,#counter
        blt loop
    mov r0, #0
    ldmfd sp!,{lr}
    mov pc, lr
.end

交叉编译后输出的结果是:

arm-linux-gnueabi-gcc array.s -o array -static
qemu-arm-static ./array
0
1
2
3
4
5
6
7
8
9

我想要达到的结果,向下面这个C语言一样输出 ,sum
#include<stdio.h>
int main(){
    int ary[10] = {0,1,2,3,4,5,6,7,8,9};
    int sum, i;
    sum = 0;
    for ( i = 0; i < 10; i++)
    {
        sum =sum +ary[i];
    }
    printf("%10d\n",sum);
    return 0; 
}

  • 写回答

1条回答 默认 最新

  • 卡尔曼的BD SLAMer 计算机视觉领域新星创作者 2022-04-03 18:19
    关注

    .386
    .model flat, stdcall
    .stack 4096
    ExitProcess proto dwExitWord:DWORD
    .data
    intarray DWORD 10000h,20000h,30000h,40000h
    .code
    main proc
    mov edi, OFFSET intarray ;// EDI = 数组地址
    mov ecx, LENGTHOF intarray ;// 循环计数器
    mov eax, 0 ;// sum = 0
    ;// LOOP 类似C语言的 do{...}while(--eax);
    L1:
    add eax, [edi] ;// 间接寻址,类似于C语言用指针遍历数组
    add edi, TYPE intarray
    loop L1

    invoke ExitProcess, 0
    main endp
    end main

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月6日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 微软硬件驱动认证账号申请
  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 如何在cst中建立这种螺旋扇叶结构
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥20 想写一个文件管理器,加载全部子文件夹后,要一级一级返回
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?
  • ¥15 请问GPT语言模型怎么训练?