「オペレーティングシステム」の版間の差分
削除された内容 追加された内容
Lチカ |
編集の要約なし |
||
1,008 行
そして、「je」とは条件つきジャンプで、直前の条件判定が「真」なら、指定したラベルにジャンプする命令である。
;その他の例
次のようlodsb 命令とsiレジスタを使っても良。lodsbは使用後に自動的にsiレジスタの指し示す位置を1だけインクリメントしてくれるので、手間が省ける。
;コード例1
<source lang="asm">
org 0x7c00
mov ah, 0x0e ; 1文字出力を設定
mov si, msg
LOOP:
lodsb
cmp al, 0x00
je Loop_break
int 0x10
jmp LOOP
Loop_break:
msg:
db 'Hello, World!', 13, 10, 0
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</source>
解説
lodsb の内容は
<source lang="asm">
mov al, [ai]
inc si
</source>
と同じである。
;その他の例2
cmp al, 0x00
je Loop_break
の代わりに
test al, al
jz Loop_break
でも良い。
また test の代わりに
or al, al
jz Loop_break
でも良い。
;コード例2
<source lang="asm">
org 0x7c00
mov ah, 0x0e ; 1文字出力を設定
mov si, msg
LOOP:
lodsb
test al, al
jz Loop_break
int 0x10
jmp LOOP
Loop_break:
msg:
db 'Hello, World!', 13, 10, 0
times 510 - ($ - $$ ) db 0
db 0x55 , 0xaa
</source>
この他、lodsb を他の命令に書き換える方法もあるが、説明がメンドウなので省略。
=== メモリ直書き ===
|