我正在尝试在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)