일부 어셈블리 코드에 문제가 있습니다. 다른 어셈블리 파일의 함수를 사용하여 문자열을 출력하려고합니다. 그러나 문자열을 출력하는 것이 아니라 "S"를 출력합니다. 이 문제를 어떻게 해결할 수 있습니까? NASM 어셈블러를 사용하고 있다고 덧붙이고 싶습니다. 코드 : string.asm인쇄 기능을 % i에 포함 시키면 부팅 섹터가 잘못 인쇄됩니다.
print_string:
pusha
mov ah, 0x0e
loop:
mov al, [bx]
cmp al, 0
je return
int 0x10
inc bx
jmp loop
return:
popa
ret
boot_sector.asm - 부트 섹터의
[org 0x7c00]
%include "string.asm"
mov bx, [my_string]
call print_string
my_string:
db 'hello world', 0
times 510 - ($ - $$) db 0
dw 0xaa55
어떤 어셈블러를 사용합니까? – fuz
'cmp al, 0' 대신'test al, al'을 시도하십시오. 여러분의 어셈블리 언어가'offset'이나 그와 비슷한 것을 쓰지 않는다면 메모리 피연산자로'0'을 해석 할 수 있습니다. – fuz
NASM을 어셈블러로 사용하고 내가 제안한 것을 시도했지만 잘못하지 않는 한 작동하지 않는 것 같습니다. – pgrafhamster