「オペレーティングシステム」の版間の差分

削除された内容 追加された内容
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 を他の命令に書き換える方法もあるが、説明がメンドウなので省略。
 
=== メモリ直書き ===