为什么程序仅将数组的最后一个值打印10倍?

时间:2019-04-15 20:17:06

标签: assembly x86-64 nasm

我是NASM的初学者,我想编写一个显示最大数据量的程序。数组的值。但是现在我想获取值并打印所有数组,但是我不能,因为即使我将esi加到32位,程序也会打印最后值的10倍。我究竟做错了什么?我应该将esi移至寄存器r12或更高版本吗? 这是我的第一个在Assembly中使用数组的程序,非常抱歉。

default rel
extern scanf,printf
global main
section .data
    tab times 40 dd 0
    format db "%d",2ch
    najw dd 0
section .text
main:
    push rbp
    mov rbp,rsp

    mov r12d,10
    mov r13d,10

_petla1:
    dec r12d
    cmp r12d,0
    je _petla2

    mov rdi,format
    mov esi,tab
    add esi,4   
    xor rax,rax
    call scanf wrt ..plt
    jmp _petla1
_petla2:
    cmp r13d,0
    je _exit
    mov rdi,format
    mov esi,[tab]
    add esi,4
    xor rax,rax
    call printf wrt ..plt
    dec r13d
    jmp _petla2
_exit:
    mov rsp,rbp
    pop rbp
    ret

0 个答案:

没有答案