https://github.com/cfenollosa/os-tutorial/tree/master/05-bootsector-functions-stringsから学んで、私は自分自身のブートセクタを書くことを試みてきました。NASM命令シーケンス
現在、指定された文字列を印刷しようとしています。
これらは私の二つのファイルです:
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
は今、これは画面の上で完全に、版画 "HI" で動作します。しかし、私が命令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
これがすべてで何かを印刷することができません。私は2つの違いを理解しようとしています。どんな助け?
あなたの例では、ケーキのアイシングが美しく、ありがとう! :) –
@KarthikNayak:うれしかったよ!興味深いことに、データを混在させないようにするコードは、位置に依存しないコードを生成する際に実際には「実生活で」使用されますが、小さなデータではあるが即時性はありませんが、それを使用している寒さと一緒にキャッシュに入っています。 –
オフトピック、あなたのプロフィールのジョークを説明できますか? –