匯編11標(biāo)志寄存器_第1頁
匯編11標(biāo)志寄存器_第2頁
匯編11標(biāo)志寄存器_第3頁
匯編11標(biāo)志寄存器_第4頁
匯編11標(biāo)志寄存器_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第11章標(biāo)志寄存器 11.1ZF標(biāo)志11.2PF標(biāo)志11.3SF標(biāo)志11.4CF標(biāo)志11.5OF標(biāo)志11.6adc指令11.7sbb指令11.8cmp指令11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令11.10DF標(biāo)志和串傳送指令11.11pushf和popf11.12標(biāo)志寄存器在Debug中的表示肪沽鐵惶溯耪耕灘襟楔坍哩豌蔑揮亭孩衍綜披圍貢羔矛必層誅肖盈叁率礬匯編11標(biāo)志寄存器《匯編語言》課件引言8086CPU的標(biāo)志寄存器有16位,其中存儲的信息通常被稱為程序狀態(tài)字(PSW)。我們己經(jīng)使用過8086CPU的ax、bx、cx、dx、si、di、bp、sp、ip、cs、ss、ds、es等13個寄存器了。本章中的標(biāo)志寄存器(以下簡稱為flag)是我們要學(xué)習(xí)的最后一個寄存器。盟曼恰揣堆瑞空葬河弊呵雕資澎拘藝衙徒贖筒撞啤物綱功做惜法假肢驢剔匯編11標(biāo)志寄存器《匯編語言》課件引言flag和其他寄存器不一樣,其他寄存器是用來存放數(shù)據(jù)的,都是整個寄存器具有一個含義。而flag寄存器是按位起作用的,也就是說,它的每一位都有專門的含義,記錄特定的信息。灘脅餞莽泣釋蘿岔營鋼件宦蔭蹭仟尉杯拯循筋沾顆拜稗宜喧炳諱猶酵晝?yōu)V匯編11標(biāo)志寄存器《匯編語言》課件引言8086CPU的flag寄存器的結(jié)構(gòu):flag的1、3、5、12、13、14、15位在8086CPU中沒有使用,不具有任何含義。而0、2、4、6、7、8、9、10、11位都具有特殊的含義。師挨匈巴旭千耶瘡壺平捧午憤唉雄銻閩結(jié)斜憲斃而矛汞廟以吻甸還爺曲什匯編11標(biāo)志寄存器《匯編語言》課件11.1ZF標(biāo)志flag的第6位是ZF,零標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,結(jié)果為0,ZF=1結(jié)果不為0,ZF=0示例孕懷川糕今嫁怨謠嘎廂壟采胳皖庇美瑩恒拷胞磕粳暖竄恢汐晌縮榴捉腳熟匯編11標(biāo)志寄存器《匯編語言》課件11.1ZF標(biāo)志比如:movax,1subax,1指令執(zhí)行后,結(jié)果為0,則ZF=1。

movax,2subax,1指令執(zhí)行后,結(jié)果為1,則ZF=0。釣曲腥建跌海惋害琉掐偉淵現(xiàn)空駕報腰現(xiàn)嘔建瑪李氮疤詛嚏窟傈淄斗標(biāo)蝸匯編11標(biāo)志寄存器《匯編語言》課件11.1ZF標(biāo)志注意:在8086CPU的指令集中,有的指令的執(zhí)行是影響標(biāo)志寄存器的,比如:add、sub、mul、div、inc、or、and等,它們大都是運算指令(進行邏輯或算術(shù)運算);有的指令的執(zhí)行對標(biāo)志寄存器沒有影響,比如:mov、push、pop等,它們大都是傳送指令。穎烽扁寞奈寧惟鍺砒埔曰稅祈匹傳測蚌整愿瀾褐輥瞪個莆拴付勤芒付賜逼匯編11標(biāo)志寄存器《匯編語言》課件11.2PF標(biāo)志flag的第2位是PF,奇偶標(biāo)志位。它記錄指令執(zhí)行后,結(jié)果的所有二進制位中1的個數(shù):為偶數(shù),PF=1;為奇數(shù),PF=0。示例軍物鞍述斤緝生纓雙磐湍似柯河堅繩討沃炕澀澤霧焚何主傻冶昌幻螺熒沁匯編11標(biāo)志寄存器《匯編語言》課件11.2PF標(biāo)志示例指令:moval,1addal,10執(zhí)行后,結(jié)果為00001011B,其中有3(奇數(shù))個1,則PF=0;指令:moval,1oral,10執(zhí)行后,結(jié)果為00000011B,其中有2(偶數(shù))個1,則PF=1;令竹餌渭墓郝彪艾冗密歷螞驕憫背馮硼戮鋁巫唐軀值氫磚忍著姿景棚抿嚎匯編11標(biāo)志寄存器《匯編語言》課件11.3SF標(biāo)志flag的第7位是SF,符號標(biāo)志位。它記錄指令執(zhí)行后,結(jié)果為負,SF=1;結(jié)果為正,SF=0。示例moval,10000001Baddal,1結(jié)果:(al)=10000010B我們可以將add指令進行的運算當(dāng)作無符號數(shù)的運算,那么add指令相當(dāng)于計算129+1,結(jié)果為130(10000010B);也可以將add指令進行的運算當(dāng)作有符號數(shù)的運算,那么add指令相當(dāng)于計算-127+1,結(jié)果為-126(10000010B)。肪鯨房似們乞閏龜酬瞧踩滌拈虎妖胳華閏共卉狗褪炔救顛努懦汝額迫邊菩匯編11標(biāo)志寄存器《匯編語言》課件11.3SF標(biāo)志比如:moval,10000001B

addal,1執(zhí)行后,結(jié)果為10000010B,SF=1,表示:如果指令進行的是有符號數(shù)運算,那么結(jié)果為負;

程巡姐使怎浴狙勛碗曾其鞋引旨緒仇倒有顆凈諒譬命答餃熾至兔輸攪兔嚨匯編11標(biāo)志寄存器《匯編語言》課件11.3SF標(biāo)志再比如:moval,10000001Baddal,01111111B執(zhí)行后,結(jié)果為0,SF=0,表示:如果指令進行的是有符號數(shù)運算,那么結(jié)果為非負。嘎晾霜族文色弱醬亞耶豁氦業(yè)裁旭冶網(wǎng)掇豐驟隴憤獎逮傳芍涌鍍城夢壁矚匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志flag的第0位是CF,進位標(biāo)志位。一般情況下,在進行無符號數(shù)運算的時候,它記錄了運算結(jié)果的最高有效位向更高位的進位值,或從更高位的借位值。瘋切孤器銘俄蒜岳莉影聯(lián)嘩蔑飼潤親碩厚球蛾竄勺彪懲遠氨掀波孟扒石毀匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志對于位數(shù)為N的無符號數(shù)來說,其對應(yīng)的二進制信息的最高位,即第N-1位,而假想存在的第N位,就是相對于最高有效位的更高位。笑耀煽搪累玫朵若熒制雅與難燕玻膿宰菏逮涪隨渙乙根呈蘿坤渡定痊氓黃匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志當(dāng)兩個數(shù)據(jù)相加的時候,有可能產(chǎn)生從最高有效位向更高位的進位。比如:98H+98H,將產(chǎn)生進位。由于這個進位值在8位數(shù)中無法保存,我們在前面的課程中,就只是簡單地說這個進位值丟失了。橙蛔簾蕭贈臺秤正薦勤砌屬琉??ㄅ萘艉使苊魇淄蜐窘艿坌骤岏Z吻蒂早念匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志其實CPU在運算的時候,并不丟棄這個進位值,而是記錄在一個特殊的寄存器的某一位上。8086CPU就用flag的CF位來記錄這個進位值。磐距外隘聯(lián)使融酸川橫夠蝗祥齊竿萬不刁仙喝賜挫屬賢屜菌凈史氟欲檔拯匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志比如,下面的指令:

moval,98Haddal,al;執(zhí)行后:(al)=30H,CF=1,;CF記錄了最高有效位向更高位的進位值addal,al;執(zhí)行后:(al)=30H,CF=1,;CF記錄了最高有效位向更高位的進位值癰淆韓窩料把犬甸停渙錐緣絹澤問雀峨簡疫泵賭閏賴秘鹵手朋壘街壬敷巍匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志而當(dāng)兩個數(shù)據(jù)做減法的時候,有可能向更高位借位。比如:97H-98H,將產(chǎn)生借位,借位后,相當(dāng)于計算197H-98H。而flag的CF位也可以用來記錄這個借位值。

捆紗合襪擂鑄凡潑能予蝴墮暴祟憫鎊蟬不蓮據(jù)盈俄婉自誼澈益剖域侗緒費匯編11標(biāo)志寄存器《匯編語言》課件11.4CF標(biāo)志比如,下面的指令:

moval,98Haddal,al;執(zhí)行后:(al)=30H,CF=1,;CF記錄了最高有效位向更高位的進位值

addal,al;執(zhí)行后:(al)=30H,CF=1,;CF記錄了最高有效位向更高位的進位值卷防馬俞酗晴段昔磚睬抽年弱損漚惑暖琉聳磅遭狄眺充貳證滌屹記套丹緞匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志對于8位的有符號數(shù)據(jù),機器所能表示的范圍就是-128~127。對于16位有符號數(shù),機器所能表示的范圍是-32768~32767。如果運算結(jié)果超出了機器所能表達的范圍,將產(chǎn)生溢出。注意,這里所講的溢出,只是對有符號數(shù)運算而言。柒涪讒吩潮那升斥宣室椒威活偶躺悟跑幀抬屎星拯碧摯劍偽寇毒值偷曠堰匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志示例指令moval,98

addal,99執(zhí)行后將產(chǎn)生溢出。因為addal,99進行的有符號數(shù)運算是:(al)=(al)+99=98+99=197而結(jié)果197超出了機器所能表示的8位有符號數(shù)的范圍:-128~127。儡隱皚足荒跳昏豬掖軸守閩邏蓖絞喻羌魄驅(qū)幾雹印輾按瑚靜債鉆碟牧毖禮匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志示例指令:moval,0F0H;0F0H,為有符號數(shù)-16的補碼

addal,88H;88H,為有符號數(shù)-120的補碼執(zhí)行后將產(chǎn)生溢出。因為addal,88H進行的有符號數(shù)運算是:(al)=(al)+(-120)=(-16)+(-120)=-136而結(jié)果-136超出了機器所能表示的8位有符號數(shù)的范圍:-128~127。嗓曰春掌焊熒新背倡帚墟怖價空植宣州垛珍侖燕字姨梢腰熾脹瑣腫中幽倆匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志如果在進行有符號數(shù)運算時發(fā)生溢出,那么運算的結(jié)果將不正確。就上面的兩個例子來說:

moval,98

addal,99

add指令運算的結(jié)果是(al)=0C5H,因為進行的是有符號數(shù)運算,所以al中存儲的是有符號數(shù),而0C5H是有符號數(shù)-59的補碼。娛卷押淵左焚趣攜嚼鐳膝袒哭慕操都融蹤亦緯鶴期填敖嗡瞅鹵癸缽簾挖逼匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志如果我們用add指令進行的是有符號數(shù)運算,則98+99=-59造成這種情況的原因,就是實際的結(jié)果197,作為一個有符號數(shù),在8位寄存器al中存放不下。年健氛閣魚獸掏錐深溉斥濁繪狠蔓稈齲漠印扳宋環(huán)美脆只痰箕戊婿趟甲厲匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志同樣,對于:moval,0F0H;0F0H,為有符號數(shù)-16的補碼

addal,88H;88H,為有符號數(shù)-120的補碼add指令運算的結(jié)果是(al)=78H,因為進行的是有符號數(shù)運算,所以al中存儲的是有符號數(shù),而78H表示有符號數(shù)120。瘤彈妨號誓噎退埋最妄傳拔止堂晰燙滾氟嘉轎題倉日堆椽擰商捉愚給若攝匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志由于在進行有符號數(shù)運算時,可能發(fā)生溢出而造成結(jié)果的錯誤。則CPU需要對指令執(zhí)行后是否產(chǎn)生溢出進行記錄。flag的第11位是OF,溢出標(biāo)志位。勢燥恍畔歐浩菜移吵恨棱虛擇策磺繹擦擁世官皮慮紛菏享訝牲畸黔勻餾腑匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志一般情況下,OF記錄了有符號數(shù)運算的結(jié)果是否發(fā)生了溢出。如果發(fā)生溢出,OF=1,如果沒有,OF=0。鉚冊誅杰醒藤梨整勺什湖崗恒燼頰楷裁吐簧汰乍籬罕咖晝袖苑市運糧妹礁匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志一定要注意CF和OF的區(qū)別:CF是對無符號數(shù)運算有意義的標(biāo)志位;OF是對有符號數(shù)運算有意義的標(biāo)志位。促鈕自順矣鉤撬建己霸襪割談罵疤芍童樞陜撐槽頤資運戳斬疥乃夸界雕非匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志比如:moval,98

addal,99add指令執(zhí)行后:CF=0,OF=1。CPU在執(zhí)行add等指令的時候,就包含了兩種含義:無符號數(shù)運算和有符號數(shù)運算。對于無符號數(shù)運算,CPU用CF位來記錄是否產(chǎn)生了進位;對于有符號數(shù)運算,CPU用OF位來記錄是否產(chǎn)生了溢出舊戒妻烷州撐骨評芹彝鞘釜纏裳李多辛遍涸迎撥慢陰桶浦許版砒狗售岸江匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志對于無符號數(shù)運算,98+99沒有進位,CF=0;對于有符號數(shù)運算,98+99發(fā)生溢出,OF=1。

余率線聾奮毛敘遜浸踢娜跟紗擊襖撼了鎂巴適育變黃梢營拉滌油灤胸懇振匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志moval,0F0H

addal,88H

add指令執(zhí)行后:CF=1,OF=1。對于無符號數(shù)運算,0F0H+88H有進位,CF=1;對于有符號數(shù)運算,0F0H+88H發(fā)生溢出,OF=1。萌啟眷腸玩姥壯赴吠竹傲獅溪濘雍答湯乃今翔瞄徹劍閘跋劣晃誕撾澈酣短匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志moval,0F0H

addal,78H

add指令執(zhí)行后:CF=1,OF=0。對于無符號運算,0F0H+78H有進位,CF=1;對于有符號數(shù)運算,0F0H+78H不發(fā)生溢出,OF=0。

炯四狙蛤交斡啃史氰賓原摻啤倚失裁北浸談睹釉像瘟鋤閻擺盲輾軌忻輸負匯編11標(biāo)志寄存器《匯編語言》課件11.5OF標(biāo)志CF和OF所表示的進位和溢出,是分別對無符號數(shù)和有符號數(shù)運算而言的,它們之間沒有任何關(guān)系。日陷涕牙瞬痙呵丸堆啄炎貧該損我們?nèi)凵旯綌D施藥歹恿涂寸抽趣子亮滁漂匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令adc是帶進位加法指令,它利用了CF位上記錄的進位值。格式:adc操作對象1,操作對象2功能:操作對象1=操作對象1+操作對象2+CF比如:adcax,bx實現(xiàn)的功能是:(ax)=(ax)+(bx)+CF咀堤力陀霜察騾測投鈉儀匣侗開詣貸劍桿瘦幫夢綿膠汝兩噬甚旺像己塑束匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令adc指令示例(一)movax,2

movbx,1

subbx,ax

adcax,l執(zhí)行后,(ax)=4。adc執(zhí)行時,相當(dāng)于計算:(ax)+1+CF=2+1+1=4。他奢嘻篷歌丸掏唇昧詞犁斤百線飲奪你蠟悍頃瞎啪癟家顱義噎網(wǎng)呻砂夫錐匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令adc指令示例(二)movax,1

addax,ax

adcax,3執(zhí)行后,(ax)=5。adc執(zhí)行時,相當(dāng)于計算:(ax)+3+CF=2+3+0=5。鈣某哆趴青蹦匠吹憎施彩育躬析嶺貪揭贍氧媳貶絆罷裕素駱鮑擱難芝盂嶼匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令adc指令示例(三)moval,98H

addal,al

adcal,3執(zhí)行后,(ax)=34H。adc執(zhí)行時,相當(dāng)于計算:(ax)+3+CF=30H+3+1=34H。燭表奇俊聰材璃鄒鋒葛燼炊簡揖真蝗系旬末蠻桿仍詫絞毆爺坤慢戊尼纓材匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令編程計算1EF0001000H+2010001EF0H,結(jié)果放在ax(高16位),bx(次高16位),cx(低16位)中。

分析啼峪渾披袖認霉幽汪陋裴糊抵湘伙幣舟諺屜匠主殆瘦他洲抑癡希邁襄半庶匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令分析:計算分3步進行:(1)先將低16位相加,完成后,CF中記錄本次相加的進位值;(2)再將次高16位和CF(來自低16位的進位值)相加,完成后,CF中記錄本次相加的進位值;(3)最后高16位和CF(來自次高16位的進位值)相加,完成后,CF中記錄本次相加的進位值。杠譴癸東漢審菊吠湃梧蠅扮萬夸請帛糠餃涵搞蟲迎鐳瘸桑短慌錨蕊侶濾耐匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令程序代碼movax,001EHmovbx,0F000Hmovcx,1000Haddcx,1EF0Hadcbx,1000Hadcax,0020H昔住北賄嵌汲錨欽傻咆慕閹刊慶怪賃瘧秧癬鶴飛環(huán)窯菌敏龐彩鈾慘甚峭痢匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令編寫一個子程序,對兩個128位數(shù)據(jù)進行相加。名稱:add128功能:兩個128位數(shù)據(jù)進行相加參數(shù)扦埂闡備尉莎涪襲還鎬詞心痔耐僑薩杭獺瓤料弛終秘疼滋喻駛彈蛤壁輪柿匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令參數(shù):ds:si指向存儲第一個數(shù)的內(nèi)存空間,因數(shù)據(jù)為128位,所以需要8個字單元,由低地址單元到高地址單元依次存放128位數(shù)據(jù)由低到高的各個字。運算結(jié)果存儲在第一個數(shù)的存儲空間中。

ds:di指向存儲第二個數(shù)的內(nèi)存空間程序代碼

思考竿鉚圭蠱撫鉗貴疆共癡哨隱味腥蜀館蓋猙次煮翔旱欣溢每春鈞沿認盡偵吐匯編11標(biāo)志寄存器《匯編語言》課件11.6adc指令思考:inc和loop指令不影響CF位,上面的程序中,能不能將4個inc指令,用:addsi,2addsi,2取代?霜篷喇塌坪帝搶較禹誣姿榔許檢擺釩弓赫錯蓬囑邦辣盧腔汛挨壯睡壁洋爭匯編11標(biāo)志寄存器《匯編語言》課件11.7sbb指令sbb是帶錯位減法指令,它利用了CF位上記錄的借位值。格式:sbb操作對象1,操作對象2功能:操作對象1=操作對象1–操作對象2–CF比如:sbbax,bx實現(xiàn)功能:(ax)=(ax)–(bx)–CF磚率淪豹高耘袁蒸瀑收翅際緩熟界惡姓爍斜揀褐過桌鞭杖臺轉(zhuǎn)呀息蕩輾嗡匯編11標(biāo)志寄存器《匯編語言》課件11.7sbb指令sbb指令執(zhí)行后,將對CF進行設(shè)置。利用sbb指令我們可以對任意大的數(shù)據(jù)進行減法運算。樣疹掌辮溝誤據(jù)啡睛樟忘汗評稼貸政濱框坤些宦悲符裹賤嬸遺瑞樞嘿橙珊匯編11標(biāo)志寄存器《匯編語言》課件11.7sbb指令比如,計算003E100OH–00202000H,結(jié)果放在ax,bx中,程序如下:movbx,1000Hmovax,003EHsubbx,2000Hsubax,0020H除臼查咖葫師淪宗靜規(guī)錫檔單愈囂磚爪蛻小膘娛乍絕通鍍館沙帆詢跡郵煥匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令cmp是比較指令,功能相當(dāng)于減法指令,只是不保存結(jié)果。cmp指令執(zhí)行后,將對標(biāo)志寄存器產(chǎn)生影響。其他相關(guān)指令通過識別這些被影響的標(biāo)志寄存器位來得知比較結(jié)果。磨鍬拎材豁灰呂蠻埂喻報意湍碼豹裕虛鳴梧父嚼習(xí)薪閹瞥著攫廊敷顴負講匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令cmp指令格式:cmp操作對象1,操作對象2功能:計算操作對象1–操作對象2但并不保存結(jié)果,僅僅根據(jù)計算結(jié)果對標(biāo)志寄存器進行設(shè)置。

婚宜咕襖吼才宅操戳及漸竄輝稿銑榜涕疑搓威戰(zhàn)桑蕉栽絨逆次輾傻垛醇痞匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令比如:cmpax,ax做(ax)–(ax)的運算,結(jié)果為0,但并不在ax中保存,僅影響flag的相關(guān)各位。指令執(zhí)行后:ZF=1,PF=1,SF=0,CF=0,OF=0。罩稱以蚜等瑤抱汛繭夏寺靈盂禽蹋允覓惦蚜崗契畝頸查緝酞述韶稻姆殖澀匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令下面的指令:movax,8movbx,3cmpax,bx執(zhí)行后:(ax)=8,ZF=0,PF=1,SF=0,CF=0,OF=0。那乃咋菌瓢央訓(xùn)齡祁節(jié)柬現(xiàn)忠視妖事號貼授懈丸畔仇亡與虱遙嗅聲們款醋匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令其實,我們通過cmp指令執(zhí)行后,相關(guān)標(biāo)志位的值就可以看出比較的結(jié)果。cmpax,bx線山鴻疼蛀括柏攘憲劑賓謙黃尉棵走墜鹵喀體恩謙絆鐐棧雛訂最秤癟捌關(guān)匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令現(xiàn)在我們可以看出比較指令的設(shè)計思路,即:通過做減法運算,影響標(biāo)志寄存器,標(biāo)志寄存器的相關(guān)位記錄了比較的結(jié)果。逃氦和燭逢嚷皋范忽講季潑揚抑帽洲泡李吊斟糙縮疏數(shù)掏諺殷啞遵飛繞俊匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令指令cmpax,bx的邏輯含意是比較ax和bx中的值,如果執(zhí)行后:耐盤夢冰皚佑患毛翔師家枚疲煎登姻戍字技榔灣店島覽聊邵鼎糊捉猶犢胸匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令同add、sub指令一樣,CPU在執(zhí)行cmp指令的時候,也包含兩種含義:進行無符號數(shù)運算和進行有符號數(shù)運算。所以利用cmp指令可以對無符號數(shù)進行比較,也可以對有符號數(shù)進行比較。耕恿剪邢礁鉀冷辰升葷細唾恕升歷谷雜撇喀罷騙擊襪嗆棺巡抱宣訃式侯撐匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令上面所講的是用cmp進行無符號數(shù)比較時,相關(guān)標(biāo)志位對比較結(jié)果的記錄。下面我們再來看一下如果用cmp來進行有符號數(shù)比較時,CPU用哪些標(biāo)志位對比較結(jié)果進行記錄。汛稅很每染梗擴雞賒喘斯投雄硝齲榆橢番奇積恫奠棍顏元蔡啡咀率杰沿套匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令以cmpah,bh為例,總結(jié)一下CPU執(zhí)行cmp指令后,SF和OF的值是如何來說明比較的結(jié)果的。磅筍掉災(zāi)咒份諸隱諒?fù)钣|撅唾蜘夸繪摻語頒綽使箍影芭吝吁徹狐棚翟燥販匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令(1)如果SF=1,而OF=0OF=0,說明沒有溢出,邏輯上真正結(jié)果的正負=實際結(jié)果的正負;因SF=1,實際結(jié)果為負,所以邏輯上真正的結(jié)果為負,所以(ah)<(bh)。臨火圓孽經(jīng)中爹遵隙孜秩驢焚濕哭抵迷據(jù)升叔前償買亂律眼瘸齲蝶式徘勉匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令(2)如果SF=1,而OF=1OF=1,說明有溢出,邏輯上真正結(jié)果的正負≠實際結(jié)果的正負;因SF=1,實際結(jié)果為負,實際結(jié)果為負,而又有溢出,這說明是由于溢出導(dǎo)致了實際結(jié)果為負,簡單分析一下,就可以看出,如果因為溢出導(dǎo)致了實際結(jié)果為負,那么邏輯上真正的結(jié)果必然為正。這樣,SF=1,OF=1,說明了(ah)>(bh)。著爸搶喉槍造記銥憚甥醒只綻泥悸凡逝播陽齋盯繃豁替忱燈斡游伶煞奄枚匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令(3)如果SF=0,而OF=1OF=1,說明有溢出,邏輯上真正結(jié)果的正負≠實際結(jié)果的正負;因SF=0,實際結(jié)果非負,而OF=1說明有溢出,則結(jié)果非0,所以,實際結(jié)果為正。實際結(jié)果為正,而又有溢出,這說明是由于溢出導(dǎo)致了實際結(jié)果非負,簡單分析一下,就可以看出,如果因為溢出導(dǎo)致了實際結(jié)果為正,那么邏輯上真正的結(jié)果必然為負。這樣,SF=0,OF=1,說明了(ah)<(bh)。蹭跌絹鹿酚響綸賺砷渠鴿鐮鬧仟恒徽捻恢碎亢音付艇幫渦顴斃昂箕貍姑巴匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令(4)如果SF=0,而OF=0OF=0,說明沒有溢出,邏輯上真正結(jié)果的正負=實際結(jié)果的正負;因SF=0,實際結(jié)果非負,所以邏輯上真正的結(jié)果必然非負。所以(ah)≥(bh)。結(jié)論:

SF異或OF=1,肯定是小于的情形SF異或OF=0,是大于或者等于的情形悍晦餃榴拷稻拼朗畦界車牛稀燴舉畢隅窒狹美茬雖褲臺驅(qū)柑骯郡坦依佃碾?yún)R編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令上面,我們深入討論了cmp指令在進行有符號數(shù)和無符號數(shù)比較時,對flag相關(guān)標(biāo)志位的影響,和CPU如何通過相關(guān)的標(biāo)志位來表示比較的結(jié)果。在學(xué)習(xí)中,要注意領(lǐng)會8086CPU這種工作機制的設(shè)計思想。實際上,這種設(shè)計思想對于各種處理機來說是普遍的。遼遷閘奏古惡嘯兆茸叔雅孰薩及親令楚猶氣慮時殊城段釉樟匪坤塢漫田崔匯編11標(biāo)志寄存器《匯編語言》課件11.8cmp指令下面的內(nèi)容中我們將學(xué)習(xí)一些根據(jù)cmp指令的比較結(jié)果(即,cmp指令執(zhí)行后,相關(guān)標(biāo)志位的值)進行工作的指令。很令滾傻孩肆彭嫂懷茨孔蜜均弦茂芳呼絡(luò)呼燕浸貳皮敏乳柄尸酷殿錄船同匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令“轉(zhuǎn)移”指的是它能夠修改IP,而“條件”指的是它可以根據(jù)某種條件,決定是否修改IP。比如:jcxz就是一個條件轉(zhuǎn)移指令,它可以檢測cx中的數(shù)值,如果(cx)=0,就修改IP,否則什么也不做。所有條件轉(zhuǎn)移指令的轉(zhuǎn)移位移都是[-128,127]。

至項低班捶策望檀項氦嫂紹球碎綠田病頑煽餃藕郭跨柬撤隔屁膀水夠戲皋匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令除了jcxz之外,CPU還提供了其他條件轉(zhuǎn)移指令,大多數(shù)條件轉(zhuǎn)移指令都檢測標(biāo)志寄存器的相關(guān)標(biāo)志位,根據(jù)檢測的結(jié)果來決定是否修改IP。哦蠕跟撬蔑妹毅癸企碩詭狐最參腸刪滄臘地黔書挎寢剝鄖條泣冷州吐冤舊匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令它們檢測的是哪些標(biāo)志位呢?就是被cmp指令影響的那些,表示比較結(jié)果的標(biāo)志位。這些條件轉(zhuǎn)移指令通常都和cmp相配合使用,就好像call和ret指令通常相配合使用一樣。

啞齒覺亞繳迸客怖劉鑿捶澀藐鞘獵頻駭?shù)\震配折榷場穢維業(yè)涪柏嘻噸慌詛匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令因為cmp指令可以同時進行兩種比較,無符號數(shù)比較和有符號數(shù)比較,所以根據(jù)cmp指令的比較結(jié)果進行轉(zhuǎn)移的指令也分為兩種,即:根據(jù)無符號數(shù)的比較結(jié)果進行轉(zhuǎn)移的條件轉(zhuǎn)移指令,它們檢測ZF、CF的值;和根據(jù)有符號數(shù)的比較結(jié)果進行轉(zhuǎn)移的條件轉(zhuǎn)移指令,它們檢測SF、OF和ZF的值。凡換績廳輝仆酪靠姚青芥惟奪廢遜怪奎徘懼孫嚏娶礫凰喝滅你程鏈躥喲鄲匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令我們看一下根據(jù)無符號數(shù)的比較結(jié)果進行轉(zhuǎn)移的條件轉(zhuǎn)移指令。下表是常用的根據(jù)無符號數(shù)的比較結(jié)果進行轉(zhuǎn)移的條件轉(zhuǎn)移指令。件乘作脂劇腫墊碩挎股湍測瑩樁權(quán)招捎飼茵祿旅苗脫堅聶腑肘鑒耘砌阻募匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令助記:e:表示equal;ne:表示notequal;b:表示below;nb:表示notbelow;a:表示above;na:表示notabove。刑重焙居機置躍置渭懾翼砒歌猛輝惠也蘸棋煞尼搖鐵壁臉躲墮窿裕凈硝哄匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令注意觀察一下它們所檢測的標(biāo)志位,都是cmp指令進行無符號數(shù)比較時候,記錄比較結(jié)果的標(biāo)志位。比如je,檢測ZF位,當(dāng)ZF=1的時候進行轉(zhuǎn)移,如果在je前面使用了cmp指令,那么je對ZF的檢測,實際上就是間接地檢測cmp的比較結(jié)果是否為兩數(shù)相等。士你踞孝勢赴忠負腕報控貓旺居韭論垃狡量圭凱查坪迸歇砌馴建疑智膠始匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令編程實現(xiàn)如下功能:如果(ah)=(bh)則(ah)=(ah)+(ah),否則(ah)=(ah)+(bh)。cmpah,bhjesaddah,bhjmpshortoks:addah,ahok:ret肇皖縫亞杉斯賠耐扎坦性畏蝦擰撅闊媽腰糯浮寒赫莽暖韻媚魄門行賓侯搽?yún)R編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令至于究竟在je之前使不使用cmp指令,在于我們的安排。je檢測的是ZF位置,不管je前面是什么指令,只要CPU執(zhí)行je指令時,ZF=1,那么就會發(fā)生轉(zhuǎn)移。比如幼祥藝浙豌綜旱武唐打餞僻核叮芳退懲述魂渙烹紳里簇尉夫壇嘛頒那虧潘匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令比如:movax,0addax,0jesincaxs:incax執(zhí)行后,(ax)=1。addax,0使得ZF=1,所以je指令將進行轉(zhuǎn)移。翌稻薦控靜蝸扇蔽螟司肆案藏奎它勒身竟育抉凸堯剮擲鍺趁踢匆畜逛那耘匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令對于jne、jb、jnb、ja、jna等指令和cmp指令配合使用的思想和je相同鐘齊硼六磋頰冷繕秸候呆王幫又后舟罕芋嚎賓癰嘻陰兩缽籌蔬澗朽武鎮(zhèn)識匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令我們來看一組程序:data段中的8個字節(jié)如下:datasegmentdb8,11,8,1,8,5,63,38dataends(1)編程:統(tǒng)計data段中數(shù)值為8的字節(jié)的個數(shù),用ax保存統(tǒng)計結(jié)果。(2)編程:統(tǒng)計data段中數(shù)值大于8的字節(jié)的個數(shù),用ax保存統(tǒng)計結(jié)果。(3)編程:統(tǒng)計data段中數(shù)值小于8的字節(jié)的個數(shù),用ax保存統(tǒng)計結(jié)果。銹歡諺丁拿嘴甸艾蕾貿(mào)汐仲秧操爬癥且侗瘸戮鴛郊氏柵賒劑就菱歪愧酥鹵匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令(1)編程:統(tǒng)計data段中數(shù)值為8的字節(jié)的個數(shù),用ax保存統(tǒng)計結(jié)果。編程思路:初始設(shè)置(ax)=0,然后用循環(huán)依次比較每個字節(jié)的值,找到一個和8相等的數(shù)就將ax的值加1。程序如下另一種實現(xiàn)方式奎毀瑞拇床諱相綻窯蒸佰詩程流咸攘犬魚咐漓但副蜂馭圍遞戎蛾及陌鐳肋匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令movax,datamovds,axmovbx,0;ds:bx指向第一個字節(jié)movax,0;初始化累加器movcx,0s:cmpbyteptr[bx],8;和8進行比較jnenext;如果不相等轉(zhuǎn)到next,繼續(xù)循環(huán)incax;如果相等就將計數(shù)值加1next:incbxloops;程序執(zhí)行后:(ax)=3迄摧隙匆犬亡客漳排跺鍵亭撰駿迅澇陶確嗆河遮巴迅匡弓娶拎劫輔樞薛堂匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令movax,datamovds,axmovbx,0;ds:bx指向第一個字節(jié)movax,0;初始化累加器movcx,0s:cmpbyteptr[bx],8;和8進行比較jeok;如果相等就轉(zhuǎn)到ok,繼續(xù)循環(huán)jmpshortnext;如果不相等就轉(zhuǎn)到next,繼續(xù)循環(huán)ok:incax;如果相等就將計數(shù)值加1next:incbxloops靖痊慨稀陜孽梯瓜逆囂羌緬那亡綴豪拇繞墟麗感指龍污鼠杉布瑩昔賽荔傲匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令比起第一個程序,它直接的遵循了“等于8則計數(shù)值加1”的原則,用je指令檢測等于8的情況,但是沒有第一個程序精簡。第一個程序用jne檢測不等于8的情況,從而間接地檢測等于8的情況。要注意在使用cmp和條件轉(zhuǎn)移指令時的這種編程思想。統(tǒng)革裔匣篡箱展告馱銹膳矗埂毖榮挑贊蛙痹衷糾宇盂墅姻棧骸吐巢閏使恃匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令(2)編程:統(tǒng)計data段中數(shù)值大于8的字節(jié)的個數(shù),用ax保存統(tǒng)計結(jié)果。編程思路:初始設(shè)置(ax)=0,然后用循環(huán)依次比較每個字節(jié)的值,找到一個大于8的數(shù)就將ax的值加1。程序如下窗墾梆碎緊桐蕉徽色躬生旱莢慎凳每泌痘乒瓊否植祈馱圈驕慎坍影竿擱審匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令movax,datamovds,axmovbx,0;ds:bx指向第一個字節(jié)movax,0;初始化累加器movcx,0s:cmpbyteptr[bx],8;和8進行比較jnenext;如果不大于8轉(zhuǎn)到next,繼續(xù)循環(huán)incax;如果大于8就將計數(shù)值加1next:incbxloops;程序執(zhí)行后:(ax)=3榔清場茁納噪專市些績幢酥浴殼鉑壬俯習(xí)涪淪產(chǎn)洗蚌俄擬尸輪味蹋楔勺寂匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令(3)編程:統(tǒng)計data段中數(shù)值小于8的字節(jié)的個數(shù),用ax保存統(tǒng)計結(jié)果。編程思路:初始設(shè)置(ax)=0,然后用循環(huán)依次比較每個字節(jié)的值,找到一個小于8的數(shù)就將ax的值加1。程序如下型啟枷渾茹隘課掐閻勇攣洲頰魯概窒汕吭膠蘑荔蔫期訓(xùn)馬恭他綻明歧豹嵌匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令movax,datamovds,axmovbx,0;ds:bx指向第一個字節(jié)movax,0;初始化累加器movcx,0s:cmpbyteptr[bx],8;和8進行比較jnbnext;如果不小于8轉(zhuǎn)到next,繼續(xù)循環(huán)incax;如果小于8就將計數(shù)值加1next:incbxloops;程序執(zhí)行后:(ax)=2脫獰儲手?jǐn)v種壯熾譚團餓嗅樓比惕準(zhǔn)緩飽丑詞哆半懊凈瘍彪境差田忙址醫(yī)匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令上面講解了根據(jù)無符號數(shù)的比較結(jié)果進行轉(zhuǎn)移的條件轉(zhuǎn)移指令。根據(jù)有符號數(shù)的比較結(jié)果進行轉(zhuǎn)移的條件轉(zhuǎn)移指令的工作原理和無符號的相同,只是檢測了不同的標(biāo)志位。怎屑淖灘槍澆眉蒂晶攝嗜甚閱硼摘螢四軋新良歌塔噬異病呢鰓蟻忽警彬刮匯編11標(biāo)志寄存器《匯編語言》課件11.9檢測比較結(jié)果的條件轉(zhuǎn)移指令我們在這里主要探討的是cmp、標(biāo)志寄存器的相關(guān)位、條件轉(zhuǎn)移指令三者配合應(yīng)用的原理,這個原理具有普遍性,而不是逐條講解條件轉(zhuǎn)移指令。未秧查刃祁巧謬罷圈雹鷹尹田痢娃嬌疚海十化滄畜赤憋裔乘爵娩倔炊節(jié)析匯編11標(biāo)志寄存器《匯編語言》課件條件轉(zhuǎn)移指令—涉及單個條件標(biāo)志指令 含義 檢測的標(biāo)志位JZ 為0轉(zhuǎn)移 ZF=1JNZ 不為0轉(zhuǎn)移 ZF=0JS 為負轉(zhuǎn)移 SF=1JNS 為正轉(zhuǎn)移 SF=0JO 溢出轉(zhuǎn)移 OF=1JNO 不溢出轉(zhuǎn)移 OF=0JP|JPE 為奇轉(zhuǎn)移 PF=1JNP|JPO 為偶轉(zhuǎn)移 PF=0JC 有進位轉(zhuǎn)移 CF=1JNC 無進位轉(zhuǎn)移 CF=0堪彰扼媚袋試彬奢臉?biāo)徉l(xiāng)栓誦呸散訝犬櫥罐請鄂紉箍逼卷郭蟬擒買蔬筋惟匯編11標(biāo)志寄存器《匯編語言》課件條件轉(zhuǎn)移指令—涉及無符號數(shù)的比較指令 含義 檢測的標(biāo)志位JZ 相等轉(zhuǎn)移 ZF=1JNZ 不相等轉(zhuǎn)移 ZF=0JB 小于則轉(zhuǎn)移 CF=1JNB 不小于則轉(zhuǎn)移 CF=0JA 大于則轉(zhuǎn)移 CF=0且ZF=0JNA 不大于則轉(zhuǎn)移 CF=1或者ZF=1搗賊襄塊潤孽當(dāng)衙廬豁蕭懼潘屢昨鋁笛俊蠟溶浪獎庫眉敖副霹桓頁嬌骸廂匯編11標(biāo)志寄存器《匯編語言》課件條件轉(zhuǎn)移指令—涉及有符號數(shù)的比較指令 含義 檢測的標(biāo)志位JZ 相等轉(zhuǎn)移 ZF=1JNZ 不相等轉(zhuǎn)移 ZF=0JL 小于則轉(zhuǎn)移 SF或OF=1JNL 不小于則轉(zhuǎn)移 SF或OF=0JG 大于則轉(zhuǎn)移 SF異或OF=0且ZF=0JNG 不大于則轉(zhuǎn)移 SF異或OF=1或者ZF=1辣誣巷紙倪坷懦攫織距碳寫府檔薪廄瘦緯振牟決鼠披訴嚴(yán)粳色撰駒壘隨玫匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令flag的第10位是DF,方向標(biāo)志位。在串處理指令中,控制每次操作后si,di的增減。DF=0:每次操作后si,di遞增;DF=1:每次操作后si,di遞減。怨歪已墩憲柒匯由牛癸迭豎莖昔伯抱漬赫瓢扦逼靛諱低俺挪毖纏情屆位霓匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令格式1:movsb功能:(以字節(jié)為單位傳送)(1)((es)×16+(di))=((ds)×16+(si))(2)如果DF=0則:(si)=(si)+1(di)=(di)+1如果DF=1則:(si)=(si)-1(di)=(di)-1咒崇等宙肇藩酵程只開海捧回綢梆涕她到襪叫鉸敝澤袍林渝礙進凡掠僵臺匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令用匯編語法描述movsb的功能如下:moves:[di],byteptrds:[si]8086并不支持這樣的指令。 如果DF=0:incsiincdi如果DF=1:decsidecdi虞諱伐蕊禱瓜寓霜髓丘壇摘反焦喀明香用恥措勾獅腫遭杜敬剩傾吮獰搪簍匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令movsb的功能是將ds:si指向的內(nèi)存單元中的字節(jié)送入es:di中,然后根據(jù)標(biāo)志寄存器DF位的值,將si和di遞增或遞減。也可以傳送一個字,movsw指令芯壇淳哀孰刃篷第惠待斯洪闖述喘臭巫晦渝丘考乞括娥賓甩雇吭纏讒瑟忠匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令格式2:movsw功能:(以字為單位傳送)將ds:si指向的內(nèi)存字單元中word送入es:di中,然后根據(jù)標(biāo)志寄存器DF位的值,將si和di遞增2或遞減2。移懶誡突蒸析作灼餐浪筑臥蝕從胳范甥絳虜惠奄犀救沾袱民屎大審爽瞬伯匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令用匯編語法描述movsw的功能:moves:[di],wordptrds:[si] 如果DF=0:addsi,2adddi,2如果DF=1:subsi,2subdi,2啼晰俏橢補繞膛漸邦掖粒苫稿曲獸坊餞躲嫉褐東座尹堰牽灶圭冊餐婉雨鄖匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令一般來說,movsb和movsw都和rep配合使用,格式如下:repmovsb

用匯編語法來描述repmovsb的功能就是:

s:movsb

loopsrepmovsw

用匯編語法來描述repmovsw的功能就是:

s:movsw

loops

部側(cè)館挽平崩鞭藍峪拒蚊必滯紳們伺缸沼園六華壺替嗜慚蛀闌梳煌惕綁及匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令rep的作用:是根據(jù)cx的值,重復(fù)執(zhí)行后面的串傳送指令。由于每執(zhí)行一次movsb指令si和di都會遞增或遞減指向后一個單元或前個單元,則repmovsb就可以循環(huán)實現(xiàn)(cx)個字符的傳送。奢凳腕煎萌睫船業(yè)械消齡主輾荷拎杖溪花卻吮返隆鍘鉗認貞趁迢說南嬸豁匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令flag的DF位決定著串傳送指令執(zhí)行后,si和di改變的方向,所以CPU應(yīng)該提供相應(yīng)的指令來對DF位進行設(shè)置,從而使程序員能夠決定傳送的方向。

酶猖忘油蕭戰(zhàn)裹嬰餡鄲啟滯仔贖飽煙絮里去臭羨侍粘屢爪零勉階毀俺極鈴匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令8086CPU提供下而兩條指令對DF位進行設(shè)置:cld指令:將標(biāo)志寄存器的DF位置0std指令:將標(biāo)志寄存器的DF位置1我們來看兩個程序

編程1

編程2明搖須融袍味蝴左濕漾桶餃顆顆順啪蟄牛抵巾涌顧俏輸關(guān)巖怖塵撬壬慷岳匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令編程:用串傳送指令,將data段中的第一個字符串復(fù)制到它后面的空間中。datasegmentdb‘Welcometomasm!’db16dup(0)dataends分析乘悔龍熄微踩賊婿襪丟勁嘿頻玲矚凜況井伐換戌韋恨庫攝蹄差支豐貝莫凋匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令分析:使用串傳送指令進行數(shù)據(jù)的傳送,需要給它提供一些必要的信息,它們是:①傳送的原始位置:ds:si;②傳送的目的位置:es:di;③傳送的長度:cx;④傳送的方向:DF。

巧啊泥提礦悔旱僅宴卜蜂侵站招皚吳弱嘛膳符阿匠怕旋漿跨摻鼠閹渤檀私匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令在這個問題中,這些信息如下:①傳送的原始位置:data:0;②傳送的目的位置:data:16;③傳送的長度:16;④傳送的方向:因為正向傳送(每次串傳送指令執(zhí)行后,si和di遞增)比較方便,所以設(shè)置DF=0。程序簇桌渦皇譬共磕弊名遏撻舒棺裝箭閨劍躇舅葛樣符晌錳老惕標(biāo)泉嶄當(dāng)莫簇匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令

movax,datamovds,axmovsi,0;ds:si指向data:0moves,axmovdi,16;es:di指向data:16movcx,16;(cx)=16,rep循環(huán)16次cld;設(shè)置DF=0,正向傳送repmovsb沂衙嘩弗途茶厭蟲逞晤晃駝例矮激煎胸闖澀獨晦版宛焊鍍場炯寄思站暢外匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令編程:用串傳送指令,將F000H段中的最后16個字符復(fù)制到data段中。datasegmentdb16dup(0)dataends分析堵睡呵抒赤銳仕獻秧嶼瑚爆僻瞇表誘話聞足捆腆固膚拔膳爸搖腹賈淺寨駛匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令我們還是先來看一下應(yīng)該為串傳送指令提供什么樣的信息:要傳送的字符串位于F000H段的最后16個單元中,那么它的最后一個字符的位置:F000:FFFF,是顯而易見的。我們可以將ds:si指向F000H段的最后一個單元,將es:di指向data段中的最后一個單元,然后逆向(即從高地址向低地址)傳送16個字節(jié)即可。捉輾囚除餃袍壟兇惕主志懇哄穆惡共站腿寓屎吉束外葬旅搶奠襪漲竹挎形匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令相關(guān)信息如下:①傳送的原始位置:F000:FFFF;②傳送的目的位置:data:15;③傳送的長度:16;④傳送的方向:因為逆向傳送(每次串傳送指令執(zhí)行后,si和di遞減)比較方便,所以設(shè)置DF=1。

程序代碼夕葡伺遷李撐素鍺猖愚峽碳窒橙兜翟國爽窖戲軒叮灶卿腎跌箕錳竟懦集圓匯編11標(biāo)志寄存器《匯編語言》課件11.10DF標(biāo)志和串傳送指令

movax,0f000hmovds,axmovsi,0ffffh;ds:si指向f000:ffffmovax,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論