intmain(void){__asm{moval,0xffmovdl,0x01addal,dladcal,dl}return0;}還是用內(nèi)斂匯編的形式來(lái)說明。這里想AL給了一個(gè)" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

C++/Debug模式查看EFL(標(biāo)志寄存器)祥解

系統(tǒng) 2984 0

在比如使用匯編指令如:ADC, SBB等指令時(shí),我們?yōu)榱诵睦锬欠莺闷娓芯筒坏貌蝗チ私庀翭LAG寄存器(EFL)里面的東西。通過二進(jìn)制詳細(xì)的查看各標(biāo)志位的值。然后這些需要用到標(biāo)志寄存器的指令等就一目了然了。 - -

迫不及待寫了段測(cè)試代碼來(lái)看看其中的秘密:

#include <iostream>

int main( void )
{
__asm
{
mov al, 0xff
mov dl, 0x01

add al, dl
adc al, dl
}

return 0;

}

還是用內(nèi)斂匯編的形式來(lái)說明。 這里想AL給了一個(gè)0xff,為什么給AL為0xff是為了能夠進(jìn)位,我覺得這個(gè)數(shù)很方便,當(dāng)然你可以弄成其它數(shù)字,只要兩個(gè)數(shù)之和發(fā)生進(jìn)位就行(這里為了測(cè)試進(jìn)位的CF位)。DL我給了個(gè)0x01之和剛好進(jìn)位且可以測(cè)試奇偶和零值。

我們?cè)谏线吋t色的代碼出打下斷點(diǎn),然后運(yùn)行程序斷到這里,然后打開VC的寄存器窗口,我們可以看到各個(gè)寄存器的值。這里著重看EFL = ? 標(biāo)志寄存器的值。

這里查看標(biāo)志寄存器各標(biāo)志位的值有兩種查看方法:

第一: 把EFL的值轉(zhuǎn)成二進(jìn)制,通過二進(jìn)制位來(lái)查看個(gè)標(biāo)志位的值。

第二: 如果你的寄存器窗口里面沒有顯示標(biāo)志的話,可以在寄存器窗口里面點(diǎn)鼠標(biāo)右鍵,選擇“標(biāo)志”就會(huì)顯示個(gè)標(biāo)志位的值了,形如:

OV =? UP =? EI =? PL =? ZR =? AC =? PE =? CY =?

這里有個(gè)對(duì)照表:

asm

可以根據(jù)EFL的二進(jìn)制數(shù)據(jù)進(jìn)行位對(duì)照就知道各個(gè)標(biāo)志位的值了。

我們?cè)陂_始的斷點(diǎn)那里看到標(biāo)志的各值:

OV = 0 UP = 0 EI = 1 PL = 0 ZR = 0 AC = 0 PE = 0 CY = 0

這里EI = 1表示處于中斷狀態(tài) - -。。

再看EFL = 0x00000202(1000000010) 對(duì)號(hào)入座:

1 0 0 0 0 0 0 0 1 0

IF TF SF ZF AF PFCF

只有IF(EI|DI)為1, VC寄存器窗口里邊只用括號(hào)中的一種來(lái)表示。。。

好!看完了各標(biāo)志位,下面按F10執(zhí)行完ADD AL, DL這句。

看看各標(biāo)志位的值:OV = 0 UP = 0 EI = 1 PL = 0 ZR = 1 AC = 1 PE = 1 CY = 1

再來(lái)看看標(biāo)志寄存器的值: EFL = 0x00000257(1001010111)

1 0 0 1 0 1 0 1 1 1

IF TF SF ZF AF PF CF

這里IF表示已經(jīng)中斷, ZF表示目的操作數(shù)結(jié)果為零, AF表示(AL為一個(gè)字節(jié))相加進(jìn)行到一半(低4位)有沒有向另一半(高4位)進(jìn)位,也可以表示是否借位(減法)。 PF表示為偶數(shù), CF表示已經(jīng)發(fā)生進(jìn)位,也可以表示借位。

再按F10執(zhí)行完 ADC AL, DL 這句, ADC是帶進(jìn)位的加法, 結(jié)果為: AL = AL + DL + CF。

這時(shí)AL: 0 + 0x1 + 1 = 0x02。

標(biāo)志位值: OV = 0 UP = 0 EI = 1 PL = 0 ZR = 0 AC = 0 PE = 0 CY = 0 這里就不做解釋了吧 - -

這里特別說下:

DF:是控制標(biāo)志位為方向標(biāo)志,在串處理指令中控制處理信息的方向用。當(dāng)DF為1時(shí),每次操作后使變址寄存器SI和DI減小,這樣就使串處理從高地址向低地址方向處理。當(dāng)DF為0時(shí)相反。。

TF:當(dāng)TF被置為1時(shí),CPU進(jìn)入單步執(zhí)行方式,即每執(zhí)行一條指令,產(chǎn)生一個(gè)單步中斷請(qǐng)求。這種方式主要用于程序的調(diào)試。

在這里我們要獲得標(biāo)志寄存器的值的話有以下這些指令:

LAHF 標(biāo)志寄存器傳送,把標(biāo)志裝入AH.
SAHF 標(biāo)志寄存器傳送,把AH內(nèi)容裝入標(biāo)志寄存器.
PUSHF 標(biāo)志入棧.
POPF 標(biāo)志出棧.
PUSHD 32位標(biāo)志入棧.
POPD 32位標(biāo)志出棧.

在上邊的AF位讓我想到用ADC或者SBB來(lái)進(jìn)行進(jìn)位或借位的一個(gè)常用方法就是,我們可以在加/減兩個(gè)4字節(jié)的數(shù)據(jù)是可以高2字節(jié)、低2字節(jié)分別相加。通過ADC/SBB可以在計(jì)算高2字節(jié)想加/減時(shí)獲得CF值,用來(lái)進(jìn)行進(jìn)位或借位。

例如:

mov ax, low1

addax, low2

mov sumLow, ax

mov ax, high1

adc ax, high2

mov sumHigh, ax

這樣就實(shí)現(xiàn)了進(jìn)位, low1, low2分別表示第一個(gè)數(shù)和第二個(gè)數(shù)的低2字節(jié), high1, high2分別表示第一個(gè)數(shù)和第二個(gè)數(shù)的高2字節(jié)。 當(dāng) addax, low2 產(chǎn)生了進(jìn)位時(shí), CF = 1。 后邊在執(zhí)行高2字節(jié)相加時(shí)用ADC會(huì)去獲取CF的值。 sumHigh = high1 + high2 + CF。 最后得到的數(shù)就是高2字節(jié)之和(sumHigh)與低2字節(jié)之和(sumLow)的合并。形如:

DWORDvar = 0;

WORD sumHigh = 0;

WORD sumLow = 0;

C++:

var |= sumHigh;

var <<= 16;

var |= sumLow;

ASM:

movzx eax, word ptr[ sumHigh ]
shl eax, 10h
or eax, dword ptr[ sumLow ]
mov var, eax

這便實(shí)現(xiàn)了進(jìn)位。 借位的道理是一樣的, 這里就不闡述了。。 - -

終于寫完了~~累死了。。 有什么錯(cuò)誤希望大家?guī)臀壹m正 - -

C++/Debug模式查看EFL(標(biāo)志寄存器)祥解


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 葫芦娃短视频下载 | 欧美一区二区在线播放 | 欧美精品在线视频观看 | 日本高清中文字幕一区二区三区 | av免费网站在线观看 | 色五月丁香五月综合五月 | 欧美日韩免费在线观看 | 国产无圣光高清一区二区 | 日韩高清成人 | 国产成人精品免费影视大全 | 黄色小视频在线看 | 国产欧美在线视频 | 波多野结衣综合 | 久久久九九精品国产毛片A片 | 国产精品xxxav免费视频 | 日韩在线观看网站 | 新91| 中国欧美日韩一区二区三区 | 中文字幕一区二区视频 | 久久se精品一区精品二区 | 99这里只有精品66视频 | 日韩国产欧美在线观看一区二区 | 国产欧美一区二区三区久久人妖 | 国产一区二区精品在线观看 | 草草影院地址 | 超级碰97 | 福利视频一区二区三区 | 很黄很粗很湿很刺激的视频 | 91热久久免费频精品黑人99 | 午夜精品久久久久久久90蜜桃 | 国产人成精品综合欧美成人 | 欧美高潮 | 久久久久久亚洲 | 欧美成人在线免费观看 | 999成人网| 在线国产一区二区 | 欧美福利视频一区二区三区 | 亚洲精品久久久久中文字幕欢迎你 | 激情婷婷小说 | 亚洲无吗在线视频 | 日本夜爽爽一区二区三区 |