我在 Stack Overflow 上找到了代码来获取字符串的长度。这是代码:
HELLO_MSG: db 'Hello, world!', 0
mov ebx, HELLO_MSG
call print_string
print_string:
call str_len
mov ecx, eax ; puts the length of the called string into ecx register
cdq ; clear the direction flag; not sure if this is needed
mov ah, 0x0e ; scrolling teleype BIOS routine
printing:
mov al, byte bl
int 0x10
inc ebx
loop printing
ret
str_len:
mov eax,ebx
l00p:
cmp byte[eax], 0
jz lpend
inc eax
jmp l00p
lpend:
sub eax, ebx ; puts the length of the string into eax register
ret
问题是当函数调用时str_len
,它只循环 3 次,有时它会循环 2 次。当它打印时,它不会打印实际的字符串,而是一些随机字母。有谁知道为什么它不起作用?我试图在引导扇区中运行它,所以我真的没有任何调试工具。