32位装配 - 正确使用lodsb

时间:2015-05-21 16:58:41

标签: assembly

我正在尝试在32位汇编中编写一个函数,该函数接受一个字符串并使用LODSB指令逐个字符地打印它。

我做错了,因为我总是遇到分段错误,但实际上我不明白我犯了什么错误,我只知道这是在使用LODSB。

这是我的代码:

CPU X64

extern printf,putchar
global main

SECTION .data
    str1    DB  10h,0Dh,'Stampata in un solo colpo',10,0
    str2    DD  10h,0Dh,'Stampata byte per byte',10,0
    fine    DB  10h,0Dh,'Programma terminato',10,0

SECTION .text
main:   
    PUSH    str1
    CALL    printf
    POP EAX

    MOV ESI,str2     ;changed the register
    CLD         ;direction flag=0

stampa: LODSB
    CMP AX,0        ;at the end of string jump to end
    JE  end
    PUSH    AX
    CALL    putchar
    JMP     stampa

end:    PUSH    fine
    CALL    printf
    POP     EAX

现在输出是这样的:

Stampata in un solo colpo
Programma terminato
Errore di segmentazione (core dump creato)

0 个答案:

没有答案