Von https://github.com/cfenollosa/os-tutorial/tree/master/05-bootsector-functions-strings lernend, habe ich versucht, meinen eigenen Bootsektor zu schreiben.NASM Befehlssequenz
Ich versuche gerade, eine bestimmte Zeichenfolge zu drucken.
Das sind meine zwei Dateien:
boot_main.asm
[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
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
diese nun perfekt und druckt "HALLO" auf den Bildschirm funktioniert. Aber wenn ich den Befehl hello db 'HI', 0
an den Anfang verschiebe. d.h
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
Dies alles überhaupt nicht gedruckt werden kann. Ich versuche den Unterschied zwischen den beiden zu verstehen. Irgendeine Hilfe?
Ihr Beispiel mit der Sidestep war Sahnehäubchen auf dem Kuchen, schön, danke! :) –
@KarthikNayak: froh, dass es geholfen hat! Interessanterweise wird Code, der mit Daten vermischt ist, tatsächlich "im echten Leben" verwendet, wenn positionsunabhängiger Code erzeugt wird, und/oder wenn Sie kleine Daten haben, die jedoch nicht als unmittelbar gelten, aber trotzdem davon profitieren können im Cache neben der Kälte, die es benutzt. –
Off Topic, könnten Sie den Witz in Ihrem Profil erklären? –