https://github.com/cfenollosa/os-tutorial/tree/master/05-bootsector-functions-strings에서 배우면서, 나는 나 자신의 부트 섹터를 작성하려고 노력해왔다.NASM 인스트럭션 시퀀스
현재 주어진 문자열을 인쇄하려고합니다.
boot_main.asm
print:
pusha
start:
mov al, [bx]
cmp al, 0
je done
mov ah, 0x0e
int 0x10
add bx, 1
jmp start
done:
popa
ret
print_nl:
pusha
mov ah, 0x0e
mov al, 0x0a
int 0x10
mov al, 0x0d
int 0x10
jmp done
지금이 스크린에 완벽하게 인쇄합니다 "HI"작동
[org 0x7c00]
mov bx, hello
call print
jmp $
hello db 'HI', 0
%include "boot_print.asm"
times 510 - ($ - $$) db 0
dw 0xaa55
boot_print.asm :
이
내 두 개의 파일입니다. 하지만 지시문을 처음으로 옮기면hello db 'HI', 0
이됩니다. boot_main.asm
[org 0x7c00]
hello db 'HI', 0
mov bx, hello
call print
jmp $
%include "boot_print.asm"
times 510 - ($ - $$) db 0
dw 0xaa55
이 전혀 아무것도 인쇄하지
즉. 저는이 둘의 차이를 이해하려고 노력하고 있습니다. 어떤 도움이 필요합니까?
귀하의 예를 들어, 회피와 케이크에 입힌, 감사합니다, 감사합니다! :) –
@KarthikNayak : 다행스럽게 도와 줬어! 흥미롭게도, 위치 데이터와 혼합 된 데이터를 가로 지르는 코드는 위치 독립적 코드를 생성 할 때 실제로 "실제 상황"에서 사용됩니다. 그러나 작지만 크기는 작지만 즉각적인 결과를 얻을 수는 없지만 여전히 혜택을 누릴 수있는 데이터가있는 경우 그것을 사용하는 감기와 함께 캐시에 이미 있습니다. –
주제에서 벗어나 프로필에서 농담을 설명해 주시겠습니까? –