第11章(標(biāo)志寄存器):
標(biāo)志寄存器都是16位? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
flag:按位起作用(其他寄存器是整個(gè)起作用)
1,3,5,12,13,14,15為保留位,不具有意義? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? debug中的對應(yīng)
零位標(biāo)志位ZF:(6)上一次指令執(zhí)行后結(jié)果為0則為1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (0)NZ (1) ZR
奇偶標(biāo)志位PF:(2)二進(jìn)制1的個(gè)數(shù)為偶數(shù)為1纲刀,為奇數(shù)為0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PO? ? PE
符號標(biāo)志位SF:(7)結(jié)果為負(fù)為1,為正為0(對于有符號數(shù))? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PL? ? ? NG
進(jìn)位標(biāo)志位CF:(0)無符號運(yùn)算時(shí)記錄進(jìn)位和借位(都為1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NC? ? ? CY
溢出標(biāo)志位OF(11)有符號數(shù)運(yùn)算時(shí)的進(jìn)位和錯(cuò)位(只要最高位改變)? ? ? ? ? ? ? ? NV?
方向標(biāo)志位DF(10)控制每次操作后si,di的遞增遞減
CF的運(yùn)用:置0方法:sub ax,ax
? ? ? inc,loop不影響CF? ? ? ? ? ? ? ? add會(huì)影響丰滑,所以使用inc改變數(shù)值而不是add
adc:adc ax,bx==>(ax)=(ax)+(bx)+CF(先算低位后高位)
帶進(jìn)位的加法指令:利用CF位,把上一次的進(jìn)位加到本次稍走,adc也會(huì)影響CF,可以達(dá)到任意位相加
sbb:sbb ax,bx==>(ax)-(bx)-CF(先算高位后低位)
cmp:功能相當(dāng)于減法,但不保存值誊役,只作為判斷依據(jù)(操作寄存器不變化,只影響flag寄存器中標(biāo)志)
? ? ? ? ? ? ? 考慮結(jié)果正負(fù)需要考慮SF和OF
? ? ? ? ? ? ? 檢測比較結(jié)果的條件轉(zhuǎn)移
? ? ? ? ? 1.無符號考慮ZF谷市,CF? ? 有符號考慮SF,OF,ZF
(以下指令都是無符號蛔垢,且都是根據(jù)flag寄存器判斷,也就是不配合cmp也可以用)
je:等于則轉(zhuǎn)移? ? ? ? ZF
jne:不等于則轉(zhuǎn)移?
jb:低于則轉(zhuǎn)移? ? CF
jnb:不低于則轉(zhuǎn)移
ja:高于則轉(zhuǎn)移? ? ? ? CF和ZF
jna:不高于則轉(zhuǎn)移
DF的運(yùn)用:
串傳宗指令:movsb(以字節(jié)為單位傳送)movsw(以字為單位)
將ds:si中的字節(jié)送入es:di中并對1si歌懒,di遞增(DF=0)或遞減(DF=1)
配合rep(根據(jù)cx值執(zhí)行多次串傳送指令)使用
DF設(shè)置指令:cld(設(shè)為0)啦桌,std(設(shè)為1)
pushf:將標(biāo)志寄存器結(jié)果入棧
popf:將出棧結(jié)果傳入標(biāo)志寄存器
另:1.mov,push,pop等傳送指令不改變標(biāo)志位
問題總結(jié):1.10H這種代表十進(jìn)制,對應(yīng)1的個(gè)數(shù)為16
實(shí)際操作的問題:
? ? ? ? 1.call調(diào)用子程序用結(jié)束程序隔開,je等跳轉(zhuǎn)用jmp隔開
? ? ? 2.cmp也要注意操作對象位數(shù)相同
? ? ? 3.注意混合使用跳轉(zhuǎn)命令提高效率