日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言 -第十一章

發(fā)布時(shí)間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言 -第十一章 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第十一章 標(biāo)志寄存器

一、各標(biāo)志位說(shuō)明
1、ZF標(biāo)志
*名稱:零標(biāo)志位
*位置:第6位
*作用:記錄相關(guān)指令執(zhí)行后,結(jié)果是否為0.如果結(jié)果為0,則zf位為1;反之為0.
2、PF標(biāo)志
*名稱:奇偶標(biāo)志位
*位置:第2位
*作用:記錄相關(guān)指令執(zhí)行后,結(jié)果所有bit位中為1的個(gè)數(shù)是否為偶數(shù).如果為偶數(shù),則pf位為1;反之為0.
3、SF標(biāo)志
*名稱:符號(hào)標(biāo)志位
*位置:第7位
*作用:記錄相關(guān)指令執(zhí)行后,結(jié)果是否為負(fù).若為負(fù),則sf位為1;反之為0。
4、CF標(biāo)志
*名稱:進(jìn)位標(biāo)志位
*位置:第0位
*作用:記錄相關(guān)指令執(zhí)行后,結(jié)果是否向更高位借位(進(jìn)位)。若有借位(進(jìn)位),則cf位為1;反之為0.
*備注:只相關(guān)于無(wú)符號(hào)數(shù)的運(yùn)算。
5、OF標(biāo)志
*名稱:溢出標(biāo)志位
*位置:第11位
*作用:記錄相關(guān)指令執(zhí)行后,結(jié)果是否溢出.
*備注:(1)溢出是指是否超過(guò)了機(jī)器可以表示的范圍,對(duì)8位來(lái)說(shuō),有符號(hào)數(shù)的表示范圍為-128~127.
?????????? (2)溢出標(biāo)志位只相關(guān)于有符號(hào)數(shù)的運(yùn)算

如何理解CF只針對(duì)無(wú)符號(hào)數(shù),OF只針對(duì)有符號(hào)數(shù)?

首先,以8位數(shù)據(jù)為例,進(jìn)位或借位是表示在這8位數(shù)據(jù)再高一位的位置上借數(shù),也就是說(shuō)此時(shí)這8位全都作為數(shù)字?jǐn)?shù)據(jù)的,最高位并不作為符號(hào)位。

比如mov al,98 ? add al,99之后

(al)=197,即0c5h,沒(méi)有產(chǎn)生進(jìn)位,所以cf=0;若al表示有符號(hào)數(shù),則明顯197超出了8位能表示的有符號(hào)數(shù)范圍(-128~127),所以of=1.

在比如mov al,128 ?add al,129

(al)應(yīng)該等于257,可實(shí)際上al寄存器放不下這個(gè)數(shù)據(jù),需要9位來(lái)表示257:1 0000 0001;此時(shí)產(chǎn)生了進(jìn)位,則cf=1;

若將al看為有符號(hào)數(shù),則開(kāi)始al=-128,加上129表示的有符號(hào)數(shù)為-127.相加后(al)=1,沒(méi)有超出表示范圍,則of=0.

通過(guò)上述,概況:對(duì)于無(wú)符號(hào)數(shù),若cf=1則最終結(jié)果不準(zhǔn)確;對(duì)于有符號(hào)數(shù),若of=1,則最終結(jié)果不準(zhǔn)確。

6、DF標(biāo)志

*名稱:方向標(biāo)志位
*位置:第10位
*作用:如果df=0,每次操作后si/di遞增;
????????? 如果df=1,每次操作后si/di遞減。

二、相關(guān)指令
*adc\sbb:只應(yīng)用于無(wú)符號(hào)數(shù)的計(jì)算。
*cmp
格式:cmp a1,a2
操作:判斷(a1-a2)的值,以影響相關(guān)標(biāo)志位,但該值不保存。
說(shuō)明:cmp相關(guān)的運(yùn)算需要依據(jù)實(shí)際情況來(lái)看是針對(duì)無(wú)符號(hào)數(shù)還是有符號(hào)數(shù)。
引申:
(1)對(duì)無(wú)符號(hào)數(shù)運(yùn)算來(lái)說(shuō),cmp a,b,很容易得出:
if zf=1? ,a=b
if zf=0&cf=0,a>b
if zf=0&cf=1,a<b
(2)對(duì)有符號(hào)數(shù)運(yùn)算來(lái)說(shuō),cmp a,b,則
if zf=1,a=b
if zf=0&of=0:zf=0說(shuō)明a!=b,of=0說(shuō)明未發(fā)生溢出,對(duì)于有符號(hào)數(shù)的運(yùn)算(a-b),結(jié)果未溢出,按以下幾種情況分析:
??????? A、a>=0&b>=0,這種情況下,對(duì)有符號(hào)數(shù)來(lái)說(shuō),a-b永遠(yuǎn)不會(huì)溢出
??????? B、a>=0&b<=0,這種情況下,只有當(dāng)(a+|b|)<=127的情況下才不會(huì)溢出
??????? C、a<0&b>0,這種情況下,只有當(dāng)(b+|a|)<=128的情況下才不會(huì)溢出
??????? D、a<0&b<0,這種情況下,a-b永遠(yuǎn)不會(huì)溢出
if zf=0&of=1:zf=0說(shuō)明a!=b,of=1說(shuō)明發(fā)生溢出,對(duì)于有符號(hào)數(shù)的運(yùn)算(a-b),結(jié)果溢出,情況分析同上步(相反);
可見(jiàn),對(duì)有符號(hào)數(shù)而言,僅僅通過(guò)zf和of的值,無(wú)法判斷兩數(shù)的大小關(guān)系。
若要判斷a,b大小,須再看sf的值,書(shū)上p225有結(jié)論:
T1、如果溢出且實(shí)際結(jié)果為負(fù),那么邏輯上真正結(jié)果為正;
T2、如果溢出且實(shí)際結(jié)果為正,那么邏輯上真正結(jié)果為負(fù);
下面來(lái)具體分析一下:
T1:of=1&sf=1,求證a>b
證明:
1、of=1可得出 -128>(a-b)>=-255 or 255>=(a-b)>127
2、sf=1可得出(a-b)的補(bǔ)碼在第7位(最高位)為1.
3、分析[-255,-128)和(127,255]的補(bǔ)碼表示形式,找出第7位為1的范圍。
???? (-129)補(bǔ)=1111 1111 0111 1111
???? (-130)補(bǔ)=1111 1111 0111 1110
???? (-131)補(bǔ)=1111 1111 0111 1101
????? ...
???? (-255)補(bǔ)=1111 1111 0000 0001
????? 可看出[-255,128)區(qū)段的第7位為0,不符合。因此可以推斷(a-b)只可能屬于區(qū)間(127,255],接下來(lái)再具體分析證實(shí)一下:
???? (128)補(bǔ)=(128)原=0000 0000 1000 0000
???? (129)補(bǔ)=(129)原=0000 0000 1000 0001
????? ...
???? (255)補(bǔ)=(255)原=0000 0000 1111 1111
????? 可看出[-255,128)區(qū)段的第7位為1,符合。
???? 因此255>=(a-b)>127,而對(duì)于8bit位的a-b來(lái)說(shuō),只有在a>0&b<0的情況下才可能發(fā)生;因此a>b.
故而得證。
T2:of=1&sf=0,求證a<b??
?? 同理可證。
總結(jié):
???? 這是這章乃至整本書(shū)里最讓我困惑的問(wèn)題之一,我無(wú)法從王爽書(shū)上那簡(jiǎn)單的話語(yǔ)可以得出相應(yīng)的結(jié)論。
???? 在上述證明t1-t2的時(shí)候我考慮了一個(gè)前提,即:計(jì)算機(jī)并不知道我們要進(jìn)行的是否為無(wú)符號(hào)數(shù)的計(jì)算,但計(jì)算機(jī)提供了補(bǔ)碼這個(gè)機(jī)制,來(lái)應(yīng)對(duì)我們邏輯上所能想的所有情況,來(lái)使得結(jié)果正確。
???? 比如對(duì)(-1)-128這個(gè)運(yùn)算來(lái)說(shuō),邏輯上的結(jié)果為-129。
???? 1、如果我們考慮的是8bit位的運(yùn)算,則產(chǎn)生了溢出,of=1,最終8bit位結(jié)果為0111 1111;而0111 1111表示的是127,邏輯上127這個(gè)結(jié)果明顯是錯(cuò)誤的;可對(duì)于計(jì)算機(jī)運(yùn)算結(jié)果里這8位保存的二進(jìn)制真的是沒(méi)有意義的么?當(dāng)然不是。
???? 2、如果我們考慮的是16bit位的運(yùn)算,則不產(chǎn)生溢出,of=0,最終16bit位結(jié)果為1111 1111 0111 1111,可以看出其低8位的結(jié)果和上述相一致。
???? 也就是說(shuō),對(duì)于情況1來(lái)說(shuō),因?yàn)橐绯隽?#xff0c;真實(shí)的值并不能只通過(guò)這8位來(lái)表示,但這8位保存的又是真實(shí)值的一部分組成。
???? 對(duì)于上面的證明過(guò)程也是應(yīng)用了這一點(diǎn),對(duì)于8bit位的有符號(hào)數(shù)運(yùn)算,其8位溢出則必然可以用16位補(bǔ)碼表示,而這8位又是16位補(bǔ)碼的低8位。
*je\jne\jb\jnb\ja\jna
*串傳送指令
(1)movsb
源:byte ptr ds:[si]&mdash;&mdash;>目的:byte ptr es:[di]
依據(jù)df值,使得si/di遞增/減1。
(2)movsw
源:word ptr ds:[si]&mdash;&mdash;>目的:word ptr es:[di]
依據(jù)df值,使得si/di遞增/減2。??????
(3) rep
一般和串傳送指令搭配使用,比如:
rep movsb,相當(dāng)于:
s: movsb
??? loop s
(4) cld:將df位置0;std:將df位置1.
(5)pushf:將標(biāo)志寄存器壓棧;popf:取棧內(nèi)數(shù)據(jù)存入標(biāo)志寄存器中

檢測(cè)點(diǎn)11.1

寫(xiě)出下面每條指令執(zhí)行后,ZF,PF,SF標(biāo)志位的值

sub al,al ZF=1,PF=1,SF=0mov al,1 ZF=0,PF=0,SF=0  push ax ZF=0,PF=0,SF=0pop bx ZF=0,PF=0,SF=0add al,bl ZF=0,PF=0,SF=0

檢測(cè)點(diǎn)11.2

寫(xiě)出下面每條指令執(zhí)行后,ZF,PF,SF,CF,OF標(biāo)志位的值

sub al,al    CF=0;OF=0;SF=0;ZF=1;PF=1mov al,10H    CF=0;OF=0;SF=0;ZF=1;PF=1 ;mov不影響標(biāo)志位add al,90h    CF=0;OF=0;SF=1;ZF=0;PF=1mov al,80h    CF=0;OF=0;SF=1;ZF=0;PF=1add al,80h    CF=1;OF=1;SF=0;ZF=1;PF=1mov al,0fch    CF=1;OF=1;SF=0;ZF=1;PF=1add al,05h    CF=1;OF=0;SF=0;ZF=0;PF=0mov al,7dh    CF=1;OF=0;SF=0;ZF=0;PF=0add al,0bh    CF=0;OF=1;SF=1;ZF=0;PF=1


?

檢測(cè)點(diǎn)11.3

(1)補(bǔ)全程序,統(tǒng)計(jì)f000:0處32個(gè)字節(jié)中,大小在[32,128]數(shù)據(jù)的個(gè)數(shù)

mov ax,0f000hmov ds,axmov bx,0mov dx,0mov cx,32s:mov al,[bx]cmp al,32jb s0cmp al,128ja s0inc dxs0:inc bxloop s

轉(zhuǎn)載于:https://www.cnblogs.com/tsembrace/p/3291363.html

總結(jié)

以上是生活随笔為你收集整理的汇编语言 -第十一章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。