過去:
ディレクトリ
ブランチプログラムの構造
転送指示
命令アドレッシング
命令相対アドレッシング
命令の直接アドレッシング
命令の間接アドレス指定
支配権の移転
セグメント内転送
セグメント間転送
無条件転送命令(JMP)
JMPプログラム
; eg0404.asm in Windows Console
include io32.inc
.data
nvar dword ?
.code
start:
jmp labl1 ;相对寻址
nop
labl1: jmp near ptr labl2 ;相对近转移
nop
labl2: mov eax,offset labl3
jmp eax ;寄存器间接寻址
nop
labl3: mov eax,offset labl4
mov nvar,eax
jmp nvar ;存储器间接寻址
nop
labl4:
exit 0
end start
条件付き転送命令(Jcc)
ゼロフラグZFを使用した条件付き分岐命令
キャリーフラグCFを使用した条件付き分岐命令
オーバーフローフラグOFを使用した条件付き分岐命令
シンボルフラグSFを使用した条件付き分岐命令
パリティフラグPFを使用した条件付き分岐命令
2つの符号なし整数の条件付き分岐命令
2つの符号付き整数を使用した条件付き分岐命令
条件付き命令
比較コマンドCMP
テスト命令TEST
番号分割手順
; eg0405.asm in Windows Console
include io32.inc
.data
.code
start:
mov eax,885 ;假设一个数据
shr eax,1 ;数据右移进行折半
jnc goeven ;余数为0,即CF=0条件成立,不需要处理,转移
add eax,1 ;否则余数为1,即CF=1,进行加1操作
goeven: call dispuid ;显示结果
exit 0
end start
フローチャート
ビットテスト
JZ命令を使用して
; eg0406.asm in Windows Console
include io32.inc
.data
no_msg byte 'Not Ready!',0
yes_msg byte 'Ready to Go!',0
.code
start:
mov eax,56h ;假设一个数据
test eax,02h ;测试D1位(使用D1=1,其他位为0的数据)
jz nom ;D1=0条件成立,转移
mov eax,offset yes_msg ;D1=1,显示准备好
jmp done ;跳转过另一个分支体!
nom: mov eax,offset no_msg ;显示没有准备好
done: call dispmsg
exit 0
end start
JNZ命令を使用する
; eg0406a.asm in Windows Console
include io32.inc
.data
no_msg byte 'Not Ready!',0
yes_msg byte 'Ready to Go!',0
.code
start:
mov eax,58h ;假设一个数据
test eax,02h ;测试D1位(使用D1=1,其他位为0的数据)
jnz yesm ;D1=1条件成立,转移
mov eax,offset no_msg ;D1=0,显示没有准备好
jmp done ;跳转过另一个分支体!
yesm: mov eax,offset yes_msg ;显示准备好
done: call dispmsg
exit 0
end start
単枝構造
絶対値プログラム
; eg0409.asm in Windows Console
include io32.inc
.data
.code
start:
call readsid ;输入一个有符号数,从EAX返回值
cmp eax,0 ;比较EAX与0
jge nonneg ;条件满足:EAX≥0,转移
neg eax ;条件不满足:EAX<0,为负数,需求补得正值
nonneg: call dispuid ;分支结束,显示结果
exit 0
end start
アルファベット判定プログラム
; eg0410.asm in Windows Console
include io32.inc
.data
.code
start:
call readc ;输入一个字符,从AL返回值
cmp al,'A' ;与大写字母A比较
jb done ;比大写字母A小,不是大写字母,转移
cmp al,'Z' ;与大写字母Z比较
ja done ;比大写字母Z大,不是大写字母,转移
or al,20h ;转换为小写
call dispcrlf ;回车换行(用于分隔)
call dispc ;显示小写字母
done:
exit 0
end start
二重分岐構造
最高データ表示プログラム
; eg0411.asm in Windows Console
include io32.inc
.data
dvar dword 0bd630422h ;假设一个数据
.code
start:
mov ebx,dvar
shl ebx,1 ;EBX最高位移入CF标志
jc one ;CF=1,即最高位为1,转移
mov al,'0' ;CF=0,即最高位为0:AL='0'
jmp two ;一定要跳过另一个分支体
one: mov al,'1' ;AL='1'
two: call dispc ;显示
exit 0
end start
符号付き加算および減算演算オーバーフロープログラム
; eg0412.asm in Windows Console
include io32.inc
.data
dvar1 dword 1234567890 ;假设两个数据
dvar2 dword -999999999
dvar3 dword ?
okmsg byte 'Correct!',0 ;正确信息
errmsg byte 'ERROR ! Overflow!',0 ;错误信息
.code
start:
mov eax,dvar1
sub eax,dvar2 ;求差
jo error ;有溢出,转移
mov dvar3,eax ;无溢出,保存差值
mov eax,offset okmsg ;显示正确
jmp disp
error: mov eax,offset errmsg ;显示错误
disp: call dispmsg
exit 0
end start