標(biāo)志寄存器
標(biāo)志寄存器有以下3種作用:
- 用來(lái)存儲(chǔ)相關(guān)指令的某些執(zhí)行結(jié)果
- 用來(lái)為CPU執(zhí)行相關(guān)指令提供行為依據(jù)
- 用來(lái)控制CPU的相關(guān)工作方式
note : 標(biāo)志寄存器與其他寄存器不一樣祭椰,它是按位起作用的泻轰,也就是說(shuō)它每一位都有專(zhuān)門(mén)的含義,記錄特定信息担租。
ZF標(biāo)志
標(biāo)志寄存器的第6位是ZF,零標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為0佩番。結(jié)果為0的話,那么zf = 1罢杉,不為零的話趟畏,zf = 0
note : 有的指令不影響標(biāo)志寄存器,比如:mov滩租、push赋秀、pop等傳送指令。
PF標(biāo)志
標(biāo)志寄存器的第2位是PF律想,奇偶標(biāo)志位猎莲。它記錄相關(guān)指令執(zhí)行后,其結(jié)果的所有bit位中1的個(gè)數(shù)是否為偶數(shù)技即。如果1的個(gè)數(shù)是偶數(shù)著洼,PF = 1,奇數(shù)則為0而叼。
SF標(biāo)志
標(biāo)志寄存器的第7位是SF身笤,符號(hào)標(biāo)志位。它記錄相關(guān)指令執(zhí)行后葵陵,其結(jié)果是否為負(fù)液荸。如果為負(fù),SF = 1埃难,否則為0莹弊。
CF標(biāo)志
標(biāo)志寄存器的第0位是CF涤久,進(jìn)位標(biāo)志位。在做無(wú)符號(hào)運(yùn)算時(shí)忍弛,它記錄了最高有效位向更高位的進(jìn)位制响迂,或從更高位的借位值。
OF標(biāo)志
標(biāo)志寄存器的第11位是OF细疚,溢出標(biāo)志位蔗彤。一般情況下,OF記錄了有符號(hào)運(yùn)算的結(jié)果是否發(fā)生了溢出疯兼。如果發(fā)生了溢出然遏,OF=1,否則為0吧彪。
adc指令
adc是帶進(jìn)位的加法指令待侵,它利用了CF位上記錄的進(jìn)位值。
指令格式:adc 操作對(duì)象1 + 操作對(duì)象2 + CF
# 示例
# 計(jì)算 1EF000H + 201000H姨裸,結(jié)果放在ax(高16位)和bx中(低16位)
mov ax, 001EH
mov bx, 0F000H
add bx, 1000H
adc ax, 0020H
sbb指令
sbb指令是帶借位的錯(cuò)位減法指令秧倾,它利用了CF位上記錄的借位值
指令格式:sbb 操作對(duì)象1, 操作對(duì)象2
功能:操作對(duì)象1 = 操作對(duì)象1 - 操作對(duì)象2 - CF
# 示例
# 計(jì)算003E1000H - 00202000H,結(jié)果放在ax, bx中
mov bx, 1000H
mov ax, 003EH
sub bx, 2000H
sbb ax, 0020H
cmp指令
cmp是比較指令傀缩,cmp功能相當(dāng)于減法指令那先,只是不保存結(jié)果。cmp指令執(zhí)行后赡艰,將對(duì)標(biāo)志寄存器產(chǎn)生影響售淡。其他指令通過(guò)識(shí)別被影響的標(biāo)志寄存器來(lái)得知比較結(jié)果
cmp指令格式:cmp 操作對(duì)象1, 操作對(duì)象2
檢測(cè)比較結(jié)果的轉(zhuǎn)移指令
下面是無(wú)符號(hào)數(shù)的比較結(jié)果進(jìn)行轉(zhuǎn)移的條件轉(zhuǎn)移指令。
DF標(biāo)志和串傳送指令
標(biāo)志寄存器的第10位是DF慷垮,方向標(biāo)志位揖闸。在串處理指令中,控制每次操作后si料身、di的遞減楔壤。
movsb和movsw
movsw和movsb相似,只是把內(nèi)存單元還成了以字為單位惯驼。
movsb和movsw一般都是和rep配合來(lái)使用,格式如下:
rep movsb
用匯編語(yǔ)法來(lái)描述就是:
s: movsb
loop s
8086CU提供下面兩條指令對(duì)df位進(jìn)行設(shè)置递瑰。
cld指令:將標(biāo)志寄存器df位置0
std指令:將標(biāo)志寄存器df位置1
下面是示例:
pushf和popf
pushf是將標(biāo)志寄存器的值壓棧祟牲,popf是從棧中彈出數(shù)據(jù),送入標(biāo)志寄存器中抖部。
這里是我的博客