打印数组中的值

时间:2014-03-04 20:23:50

标签: assembly x86

我正在尝试打印我声明的数组中的第一个值:

global _main
extern _printf

section .data
array db "1","2","3","4","5","6","7","8","9"    

fmt db "%d",0

section .text
_main:

    push ebp
    mov ebp, esp

    mov ebx, array
    mov eax, [ebx]
    push eax
    push fmt
    call _printf
    add esp, 4
    pop eax

    mov esp, ebp
    pop ebp

    ret

但是,输出不是1,而是一些非常大的数字。我想通过在每个整数周围加上引号,我会打印符号,而不是等效的ASCII。

1 个答案:

答案 0 :(得分:1)

您使用db,这意味着定义字节,单个字符,而您似乎期望格式为%d的整数。

您应该使用dd代替并删除引号:

array dd 1, 2, 3, 4, 5, 6, 7, 8, 9
fmt db "%d", 0

如果要打印字符,请使用%c

array dd "1","2","3","4","5","6","7","8","9"
fmt db "%c", 0

加上,在这里:

add esp, 4

应该是:

add esp, 8
你推了两个论点。