文字列の長さを取得するためのコードを 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 回ループすることもあります。印刷すると、実際の文字列ではなく、ランダムな文字が印刷されます。なぜ機能しないのか誰か知っていますか?ブート セクタで実行しようとしているので、実際にはデバッグ ツールがありません。