乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      匯編語(yǔ)言:標(biāo)志寄存器

       just_person 2012-04-22

      CPU內(nèi)部的寄存器中,有一種特殊的寄存器(對(duì)于不同的處理機(jī),個(gè)數(shù)和結(jié)構(gòu)都可能不同),具有三種作用:
      1) 用來(lái)存儲(chǔ)相關(guān)指令的某些執(zhí)行結(jié)果;
      2) 用來(lái)為CPU執(zhí)行相關(guān)指令提供行為依據(jù);
      3) 用來(lái)控制CPU的相關(guān)工作方式。

      這種特殊的寄存器在8086CPU中,被稱(chēng)為標(biāo)志寄存器(簡(jiǎn)稱(chēng)為flag)。8086CPU的標(biāo)志寄存器有16位,其中存儲(chǔ)的信息通常被稱(chēng)為程序狀態(tài)字(PSW)。

      flag和其他寄存器不一樣,其他寄存器是用來(lái)存放數(shù)據(jù)的,都是整個(gè)寄存器具有一個(gè)含義。而flag寄存器是按位起作用的,也就是說(shuō),它的每一位獨(dú)有專(zhuān)門(mén)的含義,記錄特定的信息。

      8086CPU的flag寄存器的結(jié)構(gòu)如下:

      flag的1、3、5、12、13、14、15位在8086CPU中沒(méi)有使用,不具有任何含義。
      而0、2、4、6、7、8、9、10、11位都具有特殊的含義。


      zero 零
      parity 奇偶性

      標(biāo)志寄存器(flag)的第六位是ZF,零標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為0。如果結(jié)果為0,那么ZF =1,如果結(jié)果不為0,那么ZF =0。


      比如:
      mov ax, 1
      sub ax, 1
      執(zhí)行后,結(jié)果為0,則ZF =1。

      mov ax, 2
      sub ax, 1
      執(zhí)行后,結(jié)果為1,則ZF =0。

      對(duì)于ZF的值,我們可以這樣來(lái)看,zf標(biāo)記相關(guān)指令的計(jì)算結(jié)果是否為0,如果為0,則ZF要記錄下"是0"的這樣的肯定信息。在計(jì)算機(jī)中1表示邏輯真,表示肯定,所以當(dāng)結(jié)果為0的時(shí)候ZF =1,表示"結(jié)果是0"。如果結(jié)果不為0,則ZF要記錄下"不是0"這樣的否定信息。在計(jì)算機(jī)中0表示邏輯假,表示否定,所以當(dāng)結(jié)果不為0的時(shí)候ZF =0,表示"結(jié)果不是0"。

      比如:
      mov ax, 1
      and ax, 0
      執(zhí)行后,結(jié)果為0,則ZF =1,表示"結(jié)果是0"。

      mov ax, 1
      or ax, 0
      執(zhí)行后,結(jié)果為1,則ZF =0,表示"結(jié)果非0"。

      在8086CPU的指令集中,有的指令的執(zhí)行會(huì)影響標(biāo)志寄存器的,比如:add、sub、mul、div、inc、dec、or、and等,它們大都是運(yùn)算指令(進(jìn)行邏輯或算術(shù)運(yùn)算);有的指令的執(zhí)行對(duì)標(biāo)志寄存器沒(méi)有影響,比如:mov、push、pop等,它們大都是傳送指令。


      PF標(biāo)志
      flag的第二位是PF,奇偶標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果的所有二進(jìn)制位中1的個(gè)數(shù)是否為偶數(shù)。如果1的個(gè)數(shù)為偶數(shù),PF =1,如果為奇數(shù),那么PF =0。


      比如:
      mov al, 1
      add al, 10
      執(zhí)行后,結(jié)果為00001011b,其中有3個(gè)(奇數(shù))1,則PF =0;

      mov al, 1
      or al, 2
      執(zhí)行后,結(jié)果為00000011b,其中有2個(gè)(偶數(shù))1,則PF =1。

      sub al, al
      執(zhí)行后,結(jié)果為00000000b,其中有0個(gè)(偶數(shù))1,則PF =1。

       

       

      sign 符號(hào)

      flag的第7位是SF,符號(hào)標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為負(fù)。如果結(jié)果為負(fù),SF =1,如果結(jié)果為非負(fù),SF =0。

      在計(jì)算機(jī)中通常用補(bǔ)碼來(lái)表示有符號(hào)數(shù)據(jù)。計(jì)算機(jī)中的一個(gè)數(shù)據(jù)可以看作是有符號(hào)數(shù),也可以看成是無(wú)符號(hào)數(shù)。
      如:
      00000001b,可以看作為無(wú)符號(hào)數(shù)1,或有符號(hào)數(shù)+1;10000000b可以看作為無(wú)符號(hào)數(shù)129,也可以看作有符號(hào)數(shù)-127。

      這也就是說(shuō),對(duì)于同一個(gè)二進(jìn)制數(shù)據(jù),計(jì)算機(jī)可以將它當(dāng)作無(wú)符號(hào)數(shù)據(jù)來(lái)運(yùn)算,也可以當(dāng)作有符號(hào)數(shù)據(jù)來(lái)運(yùn)算。
      如:
      mov al, 10000001b
      add al, 1
      結(jié)果:(al) =10000010b
      如果我們將add指令的運(yùn)算當(dāng)作無(wú)符號(hào)數(shù)的運(yùn)算,那么結(jié)果為130(10000001b);如果我們將它當(dāng)作有符號(hào)數(shù)的運(yùn)算,那么結(jié)果為-126(10000010b)。

      不管我們?nèi)绾慰创?,CPU在執(zhí)行add等指令的時(shí)候,就已經(jīng)包含了2種定義,也將得到同一種信息來(lái)記錄的2中結(jié)果。關(guān)鍵在于我們的程序需要哪一種結(jié)果。

      SF標(biāo)志,就是CPU對(duì)有符號(hào)數(shù)運(yùn)算結(jié)果的一種記錄,它記錄數(shù)據(jù)的正負(fù)。在我們將數(shù)據(jù)當(dāng)作有符號(hào)數(shù)來(lái)運(yùn)算的時(shí)候,可以通過(guò)它來(lái)得知結(jié)果的正負(fù)。如果我們將數(shù)據(jù)當(dāng)作無(wú)符號(hào)數(shù)來(lái)奇數(shù),SF的值則沒(méi)有意義,雖然相關(guān)的指令影響了它的值。


      也就是說(shuō),CPU在執(zhí)行add等指令時(shí),是必然要影響到SF標(biāo)志的值的。至于我們需不需要這種影響,那就看我們?nèi)绾慰创噶钏M(jìn)行的運(yùn)算了。
      如:
      mov al, 10000001b
      add al, 1
      執(zhí)行后,結(jié)果為10000010b,SF =1,表示:如果指令進(jìn)行的是有符號(hào)數(shù)運(yùn)算,那么結(jié)果為負(fù)。

      mov al, 10000001b
      add al, 01111111b
      執(zhí)行后,結(jié)果為0,SF =0,表示:如果指令進(jìn)行的是有符號(hào)數(shù)運(yùn)算,那么結(jié)果為非負(fù)。

      carry 進(jìn)位
      CF標(biāo)志
      flag的第0位是CF,進(jìn)位標(biāo)志位。一般情況下,在進(jìn)行無(wú)符號(hào)數(shù)運(yùn)算的時(shí)候,它記錄了運(yùn)算結(jié)果的最高有效位向更高位的進(jìn)位值,或從更高位的借位值。


      對(duì)于位數(shù)為N的無(wú)符號(hào)數(shù)來(lái)說(shuō),其對(duì)于的二進(jìn)制信息的最高位,即第N-1位,就是它的最高有效位,而假想存在的第N位,就是相對(duì)于最高有效位的更高位。

      當(dāng)兩個(gè)數(shù)據(jù)相加的時(shí)候,有可能產(chǎn)生從最高有效位向更高位的進(jìn)位。比如,2個(gè)8位數(shù)據(jù):98H+98H,將產(chǎn)生進(jìn)位。由于這個(gè)進(jìn)位值在8位數(shù)中無(wú)法保存,我們之前認(rèn)為是這個(gè)進(jìn)位值被丟棄了。其實(shí),CPU在運(yùn)算的時(shí)候,并不丟棄這個(gè)進(jìn)位值,而是記錄在一個(gè)特殊的寄存器的某一位上。8086CPU就用flag的CF位來(lái)記錄這個(gè)進(jìn)位值。
      比如:
      mov al, 98h
      add al, al                        ;執(zhí)行后:(al) =30h,CF =1;CF記錄了從最高有效位向更高位的進(jìn)位值
      add al, al                        ;執(zhí)行后:(al) =60h,CF =0,CF記錄了從最高有效位向更高位的進(jìn)為值


      而當(dāng)兩個(gè)數(shù)據(jù)做減法時(shí),有可能向更高位借位。比如:兩個(gè)8位數(shù)據(jù):97H -98H,將產(chǎn)生借位,借位后,相當(dāng)于計(jì)算197H-98H。而flag的CF位也可以用來(lái)記錄這個(gè)借位值。
      比如:
      mov al, 97H
      sub al, 98H                 ;執(zhí)行后:(al) =FFH, CF =1,CF記錄了向更高位的借位值
      sub al, al                     ;執(zhí)行后:(al) =0, CF =0,CF記錄了向更高位的借位值

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多