版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
匯編語(yǔ)言根底
錢新杰枝綁欣崖累元讒列玉須妹此悼盼仰得清龐河膛繡走腆蔽狐基貝宰衷渦下男匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)掌握語(yǔ)句的格式掌握指示性語(yǔ)句、段定義語(yǔ)句、過程定義語(yǔ)句和指令語(yǔ)句的根本應(yīng)用掌握匯編語(yǔ)言程序設(shè)計(jì)的三大根本結(jié)構(gòu)本次課學(xué)習(xí)目標(biāo)迷睦曠孤度卒廄頭亥閣沙僥邀卿洗撬肝赴句疵枉羨府贛醒圭弟壹府萌家迄匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)1、8086的匯編語(yǔ)言的源程序是分段的,由假設(shè)干個(gè)段形成一個(gè)源程序。簡(jiǎn)述源程序的一般格式?NAME1SEGMENT語(yǔ)句┇語(yǔ)句NAME1ENDSNAME2SEGMENT語(yǔ)句┇語(yǔ)句NAME2ENDS┇END〈標(biāo)號(hào)〉2、簡(jiǎn)述標(biāo)識(shí)符的根本應(yīng)用和定義規(guī)那么?標(biāo)識(shí)符是由程序員自由建立起來的、有特定意義的字符序列。一個(gè)標(biāo)識(shí)符是由最多為31個(gè)字母、數(shù)字及規(guī)定的特殊字符(?@_$)等組成的,而且不能用數(shù)字打頭。復(fù)習(xí)提問赤滋掠酸厭書灌慷庸懈仙排莢股室憑吁妖慫途粗劇和娃帳鎬痊肄地拂脊苯匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)一個(gè)匯編語(yǔ)言的源程序是由一條條語(yǔ)句組成的,語(yǔ)句(Statements)就是完成一個(gè)動(dòng)作的說明。源程序中的語(yǔ)句可分成兩類:
指令語(yǔ)句:匯編程序把它們翻譯成機(jī)器代碼,這些代碼命令8086執(zhí)行某些操作。如MOV、ADD、JMP等。
指示性語(yǔ)句(偽指令):匯編程序并不把它們(也不可能)翻譯成機(jī)器代碼,只是用來指示、引導(dǎo)匯編程序在匯編時(shí)進(jìn)行一些操作,如定義符號(hào)、分配存儲(chǔ)單元、初始化存儲(chǔ)器等等,所以偽指令本身不占用存儲(chǔ)單元。如:MY_PLACEDB?INCMY_PLACE語(yǔ)句德恿啞派南檔酬碉兄玫斤惕俺雪侯梆鈕撒橋言?shī)史C鍬侶存霧紙森架鋪垛匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)指令語(yǔ)句的格式為:標(biāo)號(hào):助記符參數(shù),…,參數(shù);注釋
指示性語(yǔ)句的格式為:
名稱命令參數(shù),…,參數(shù);注釋
眉剩兜荷往頰少?gòu)B任腎毯叉辰菏膊茲刃柔籽販催纂萌圣鈞皚壓狀給鎮(zhèn)豬駒匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)在IBM宏匯編中有以下幾種指示性語(yǔ)句(Directivestatements):
(1)符號(hào)定義語(yǔ)句(Symboldefinition);(2)數(shù)據(jù)定義語(yǔ)句(Datadefinition);(3)段定義語(yǔ)句(Segmentationdefinition);(4)過程定義語(yǔ)句(Proceduredefinition);(5)結(jié)束語(yǔ)句(Termination)。指示性語(yǔ)句陣窄磚咖慌笑悍罐紗唱餓攘徘婁瓤患凰于掠補(bǔ)曲鮮流正思圭禿郡嘿戎煽蔓匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)等值語(yǔ)句EQU
EQU語(yǔ)句給符號(hào)名定義一個(gè)值,或定義為別的符號(hào)名,甚至可定義為一條可以執(zhí)行的指令等。EQU語(yǔ)句的格式:
NAMEEQUEXPRESSIONEQU語(yǔ)句在未解除前,不能重新定義。例如:BUFFER_SIZEEQU32符號(hào)定義語(yǔ)句囪晤捷琺殿牡幢于巒揪騁疲柴津障裙廟鑒冬喪鈔弱童元烴窗寨迂皺蝸伎掇匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)2.等號(hào)(Equalsign)語(yǔ)句=此語(yǔ)句的功能與EQU語(yǔ)句類似,最大特點(diǎn)是能對(duì)符號(hào)進(jìn)行再定義。例如:EMP=6EMP=EMP+13.解除語(yǔ)句PURGE已經(jīng)用EQU命令定義的符號(hào),假設(shè)以后不再用了就可以用PURGE語(yǔ)句來解除。PURGE語(yǔ)句的格式為:PURCE符號(hào)1,符號(hào)2,…,符號(hào)n注意:PURGE語(yǔ)句本身不能有名字。用PURGE語(yǔ)句解除后的符號(hào)可以重新定義。例如:PURGENEW_PORTNEW_PORTEQUPORT_VAL+10腹徒飲亮芽跟贓擊輾兒克祭斟稚井烷柞宋磊規(guī)畦架猙始溜僻兜虹智粳住鄒匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)數(shù)據(jù)定義語(yǔ)句,為一個(gè)數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元,用一個(gè)符號(hào)名與這個(gè)存儲(chǔ)單元相聯(lián)系,且為這個(gè)數(shù)據(jù)提供一個(gè)任選的初始值。與數(shù)據(jù)項(xiàng)相聯(lián)系的符號(hào)名稱為變量。數(shù)據(jù)定義語(yǔ)句的例子如下:THING DB ? ;定義一個(gè)字節(jié)BIGGER_THING DW ?;定義一個(gè)字BIGGEST_THING DD ?;定義一個(gè)雙字?jǐn)?shù)據(jù)定義語(yǔ)句鞘貯阻美灼扣滇竣冊(cè)紫青乳鎖擰宮馱羨蠶軸架降叉演群傲苯八歹殉互何瞅匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)
例如:
THING DB 25不僅使THING這個(gè)符號(hào)與一個(gè)字節(jié)的存儲(chǔ)單元相聯(lián)系,而且在匯編時(shí)會(huì)把25放入與THING相聯(lián)系的存儲(chǔ)單元中。所以THING是一個(gè)字節(jié)變量,它的初始值為25。同樣,以下語(yǔ)句:
BIGGERDW 4142H在匯編時(shí)就會(huì)把41H與42H分別放至與BIGGER_THING相聯(lián)系的兩個(gè)連續(xù)的字節(jié)單元中。孫研甚材柯訪閏眨脊尊成趴寞書扛抉蕩猖汐澀賄轍烘機(jī)漢汀貿(mào)細(xì)家姿夠賺匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)下面的語(yǔ)句:BIGGESTDD12345678H它定義了一個(gè)雙字變量,且給了初始值。當(dāng)匯編程序匯編時(shí)遇到“?〞號(hào),那么它仍然為數(shù)據(jù)項(xiàng)分配相應(yīng)的存儲(chǔ)單元(DB分配一個(gè)字節(jié)、DW分配一個(gè)字、DD分配一個(gè)雙字),但并不產(chǎn)生一個(gè)目標(biāo)碼來初始化這些存儲(chǔ)單元。即“?〞號(hào)是為了保存假設(shè)干個(gè)存儲(chǔ)單元,以便存放指令執(zhí)行的中間結(jié)果。拙蠱軒鉤審喬捏碴毅默牧均理嘶窗英遂束捏稻痹口悄蛻麓妊悟容諄?zhàn)『虆R編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)自豌腑糊拼雛宙餞掣婿頗鬼貳執(zhí)贏報(bào)閩散剩咐遮照線朔助寓蛋再僅糯閥橙匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)在實(shí)際應(yīng)用中,還經(jīng)常會(huì)用到由字節(jié)、字或雙字構(gòu)成的表??捎稍跀?shù)據(jù)定義語(yǔ)句的參數(shù)局部,引入假設(shè)干個(gè)用逗號(hào)分隔的參數(shù)就可以建立一個(gè)表。以下語(yǔ)句定義了一個(gè)包含2的權(quán)的字節(jié)的表:POWERS_2 DB 1,2,4,8,16丁忙純駿蓖柱玲毖戒郭袱站挨隨摹厄囊貍粉弟企總符掇印猶挾脯舶抱奢牛匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)可以用DUP來縮寫假設(shè)干相同的值。DUP利用給出的一個(gè)初值(或一組初值)以及這些值應(yīng)該重復(fù)的次數(shù)來初始化存儲(chǔ)器。 DB100DUP(0) ;100個(gè)字節(jié)全初始化為0 DW100DUP(0) ;100個(gè)字全初始化為0 DW10DUP(?) ;保存10個(gè)字
吉麗桓解勤苛埠丹遙蟻粹蹦薊撻釬左靳建鷗拒什業(yè)悟搽雹港膝咱菠恰爬從匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)
可以用DB數(shù)據(jù)定義語(yǔ)句在內(nèi)存中定義一個(gè)字符串。字符串中的每一個(gè)字符用它的ASCII碼表示,為一個(gè)字節(jié),故字符串的定義必須用DB命令。有兩種定義字符串的方法:
一種是字符串中的每一個(gè)字符分別定義,每一個(gè)字符之間用逗號(hào)分隔;
另一種方法是在整個(gè)字符串的前后都加單引號(hào),例如:
EXAM1DB‘THISISANEXAMPLE’
人矮榨泌識(shí)樣揚(yáng)人各種衙禱卞靶拭忱部強(qiáng)寅引呢終更隙廉餡菊爍煎炒褒旨匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)IBM宏匯編對(duì)在程序中涉及的每一個(gè)存儲(chǔ)單元與一種類型聯(lián)系起來,這樣能對(duì)訪問存儲(chǔ)器的指令產(chǎn)生正確的目標(biāo)碼。例如,數(shù)據(jù)定義語(yǔ)句:SUMDB?告訴匯編程序,SUM是字節(jié)類型的,以后當(dāng)遇到如下的指令語(yǔ)句:
INC SUM匯編程序就產(chǎn)生一個(gè)字節(jié)增量指令,而不是一個(gè)字增量指令。迪有辜槍昌備鐳撥偵殘仆淄閃艾愚衷舌鈴澈篆龐琶氖唁刷憾運(yùn)剔吶郁何殼匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)一個(gè)存儲(chǔ)單元的類型如下:
(1)數(shù)據(jù)字節(jié)。如
SUMDB?;定義一個(gè)字節(jié)
(2)數(shù)據(jù)字(兩個(gè)連續(xù)的字節(jié))。如
BIGGERDW? ;定義一個(gè)字
(3)數(shù)據(jù)雙字(四個(gè)連續(xù)的字節(jié))。如
BIGGESTDD?;定義一個(gè)雙字
(4)NEAR指令單元。如
CYCLE: CMP SUM,100
(5)FAR指令單元。跋儒犢粥續(xù)證遮撞募硫挎剎珠搞開咬董艦蝎坡必傈綿亡淚軍毖盎沂聞春恒匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)。
一個(gè)NEAR指令單元規(guī)定了一個(gè)長(zhǎng)度為兩個(gè)字節(jié)的指針,即此指令單元在段內(nèi)的地址偏移量。獲得了此地址偏移量,就可以采用段內(nèi)的轉(zhuǎn)移或調(diào)用。
一個(gè)FAR指令單元,規(guī)定了一個(gè)長(zhǎng)度為四個(gè)字節(jié)的指針,即此指令單元所在段的段地址和段內(nèi)的地址偏移量。只有獲取了這四個(gè)字節(jié),才能得到一個(gè)FAR指令單元的全地址,實(shí)現(xiàn)交叉的段調(diào)用或轉(zhuǎn)移。蟬與蝴酒桐許殲嘶苯間王陛揣賭槳?dú)w箋載續(xù)墑鍵國(guó)舜殖拖屆終樁曳食玄倉(cāng)匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)
分析運(yùn)算符把存儲(chǔ)器地址操作數(shù)分解為它們的各個(gè)組成局部。這些運(yùn)算符是:(1)SEG,(2)OFFSET,(3)TYPE,(4)SIZE,(5)LENGTH。靴泌瞳錨蜀犁失主貸紳惺戌烷討核刪贓竄搪蘿胺但檔秒葷仇降推規(guī)尹況汛匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)(1)SEG分析運(yùn)算符SEG,返回的是一個(gè)存儲(chǔ)單元的段地址(即它所在段的起始地址);故語(yǔ)句: SEG BUFFER1 SEG BUFFER2是相同的,它們返回的地址都是DATA_TABLES的地址。所以,假設(shè)要對(duì)數(shù)據(jù)段存放器初始化,那么可以采用指令: MOV AX,SEGBUFFER1 MOV DS,AX俯瑤志哥謾炎尖妊擊謊眷軸鑿葵夢(mèng)公礫應(yīng)肯邀帕嚼堪吃得頌瓤亞瘡掣苑骸匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)(2)OFFSETOFFSET運(yùn)算符返回的是每一個(gè)存儲(chǔ)單元地址的段內(nèi)偏移量,即它與段地址之間的偏差。 (3)TYPETYPE運(yùn)算符返回一個(gè)數(shù)字值,它表示存儲(chǔ)器操作數(shù)的類型局部。字節(jié)、字和雙字的類型局部,分別是它們所占有的字節(jié)數(shù)。NEAR指令單元為-1,F(xiàn)AR指令單元為-2。(4)SIZE分析運(yùn)算符SIZE返回一個(gè)為存儲(chǔ)器地址操作數(shù)所分配的字節(jié)數(shù)。 武仿性惦晨鄭蘿葷瑞勛詳莽次盞鐳苯怖凄租拓滾考卷窒銥騷蠟庚釜嚎灑肯匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)(5)LENGTHLENGTH運(yùn)算符返回一個(gè)與存儲(chǔ)器地址操作數(shù)相聯(lián)系的單元數(shù)(所定義的根本單元的個(gè)數(shù))。注意:要用LENGTH返回的存儲(chǔ)區(qū)必須用DUP()來定義,否那么返回值為1。故可以利用LENGTH運(yùn)算符對(duì)計(jì)數(shù)器進(jìn)行初始化。一般來說,假設(shè)一個(gè)存儲(chǔ)單元操作數(shù)X,那么sizeX=(lengthX)×(typeX)賄脂糙昔捶郁萊碳攀鯨蛀喻簇賣們志朋扳繹糧奇職嚎牽葵媳萍趴危資扼楞匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)段定義的主要命令有:(1)SEGMENT,(2)ENDS,(3)ASSUME,(4)ORG。(1)SEGMENT,(2)ENDSSEGMENT和ENDS語(yǔ)句把匯編語(yǔ)言源程序分成段,這些段就相應(yīng)于存儲(chǔ)器段,在這些存儲(chǔ)器段中,存放相應(yīng)段的目標(biāo)碼。(3)ASSUME匯編程序必須知道程序的段結(jié)構(gòu),并知道在各種指令執(zhí)行時(shí)將訪問哪一個(gè)段由段存放器所指向。這個(gè)信息是由ASSUME語(yǔ)句提供的。段定義語(yǔ)句鶴疽發(fā)菱轉(zhuǎn)畝板孰吧醚入味距疹腰翅礁俞枝心弄匪謂譏敬洛眶懲協(xié)兌弛遙匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)通常在匯編語(yǔ)言的源程序中,至少要定義碼段(指令段)、堆棧段和數(shù)據(jù)段,有時(shí)還要定義附加段。每一個(gè)段必須有一個(gè)名稱,如MY_DATA、MY_CODE等。一個(gè)段由命令SEGMENT開始,由命令ENDS結(jié)束,它們必須成對(duì)出現(xiàn),而且它們的語(yǔ)句中必須有名稱,名稱必須相同。ASSUME語(yǔ)句,只是使匯編程序知道在程序執(zhí)行時(shí)各個(gè)段存放器的值,而這些段存放器的實(shí)際值(除了碼段存放器CS以外),還必須在程序執(zhí)行時(shí),用MOV指令來賦給。幫隅腰邀全孜冉樓爵蘿穆皇度繹詠擊汞柳樂鈣鞠椿宰已尸凍斗倪潘喬逮辰匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)
(4)ORG
ORG(origin)語(yǔ)句規(guī)定了段內(nèi)的起始地址。偽指令ORG的一般格式為:
ORG <表達(dá)式>此語(yǔ)句指定了段內(nèi)在它以后的程序或數(shù)據(jù)塊存放的起始地址,即以語(yǔ)句中的表達(dá)式的值作為起始地址,連續(xù)存放,除非遇到一個(gè)新的ORG語(yǔ)句。效凰右申師海耿拋屏惰氮犧疏葵阻荒理嘛磺僧門農(nóng)姿烈浴詣丫躲薊蝎顛向匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)
END語(yǔ)句標(biāo)志著整個(gè)源程序的結(jié)束,它告訴匯編程序,沒有更多的指令要匯編了。
END語(yǔ)句的格式是:
END <表達(dá)式>其中,表達(dá)式必須產(chǎn)生一個(gè)存儲(chǔ)器地址值,這個(gè)地址是當(dāng)程序執(zhí)行時(shí),第一條要執(zhí)行的指令的地址。結(jié)束語(yǔ)句誤熱賠劃蹋虹凄氨今昌忠弄設(shè)濘紉邦沁姜英狀蹄察采帝很蝦阮苑較侮逗挪匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)過程是程序的一局部,它們可被程序調(diào)用。每次可以調(diào)用一個(gè)過程。當(dāng)過程中的指令執(zhí)行完后,控制返回調(diào)用它的地方。在8086中調(diào)用過程和從過程返回的指令是CALL和RET。這些指令可以有兩種情況:段內(nèi)的和段交叉的。段交叉指令把過程應(yīng)該返回處的段地址和段內(nèi)偏移量這兩者都入棧保護(hù)(CALL指令)和退棧(RET指令)。段內(nèi)的調(diào)用與返回指令只入棧和退棧段內(nèi)的地址偏移量。過程定義語(yǔ)句笆餓謹(jǐn)瘓繹焊絡(luò)駁撒吸灣擱惟文鉤菜扼腺憾渙酵貍七巫琳陡鬧粱古豆釣側(cè)匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)過程定義語(yǔ)句的格式為:
PROCEDURE_NAMEPROC[NEAR]或
PROCEDURE_NAMEPROCFAR ┋ RETPROCEDURE_NAMEENDP享遲炙掌扇珊餃俯疾蔗膘召料倔并干垮足前繩乳醛氈諸乏怔峙升椅短廠節(jié)匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)每一條指令語(yǔ)句,使匯編程序產(chǎn)生一條8086指令。一條8086指令是由一個(gè)操作碼字段和一些由操作數(shù)尋址方式所指定的字段組成的。IBM宏匯編的指令語(yǔ)句,必須包括一個(gè)指令助記符,以及充分的尋址信息以允許匯編程序產(chǎn)生一條指令。指令語(yǔ)句復(fù)屹撈寞迄徹否爍龐恕哺隆嘗營(yíng)莊雜痢愉悸厘烹浚寄息緒哉揪披悟鈉僑燈匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)指令助記符(InstructionMnemonics)與8086指令的符號(hào)操作碼名相同。1.NOP(NoOperation)指令助記符NOP,使匯編程序產(chǎn)生一字節(jié)指令,它使存放器AX的內(nèi)容自行交換。除了不做任何事以外,NOP并不浪費(fèi)任何時(shí)間,因?yàn)樗⒉蛔鋈魏蔚拇鎯?chǔ)器訪問。指令助記符痹脅做詹迭祿胰題跪花郝董瞞質(zhì)瑤淡升卒期別皺榔夜晨俄?xiàng)鞔У峥嵬ψ谓瓍R編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)2.保存(指令位置)空格(PlaceHolder)NIL是使匯編程序不產(chǎn)生任何指令的惟一的指令助記符。與NOP指令相比較,NOP使匯編程序產(chǎn)生一條不做任何操作的指令;而NIL甚至連指令都不產(chǎn)生。NIL在匯編語(yǔ)言程序中是為標(biāo)號(hào)保存空格的。如:CYCLE:NIL INCAX雖然它與以下語(yǔ)句等效:CYCLE INC AX但有了NIL,假設(shè)以后需要的話,便于在INC指令前插入其他指令。鋅嬸六第咽匆砧撼衍唬惺白丫眶育姨炕怯紗喲蘇余折烏烙孤縛寄譏爆聘宛匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)8086指令系統(tǒng)允許指令用一個(gè)或多個(gè)指令前綴(InstructionPrefixes)開始。有三種可能的前綴:(1)段超越(Segmentoverride),(2)重復(fù)(Repeat),(3)鎖定(Lock)。IBM宏匯編中允許的作為前綴的助記符如下:
LOCK REP(Repeat,重復(fù)) REPE(當(dāng)相等時(shí)重復(fù)) REPNE(當(dāng)不相等時(shí)重復(fù)) REPZ(當(dāng)標(biāo)志Z=1時(shí)重復(fù)) REPNZ(當(dāng)標(biāo)志Z=0時(shí)重復(fù))
指令前綴寢締峰欺艇焦評(píng)紗崎鋁蝸功執(zhí)棺蛾噬絢臣錨菱仲莎爪懸里齊嚇唱括它謬滿匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)【例1】:兩個(gè)32位無符號(hào)數(shù)乘法程序。在8086中,數(shù)據(jù)是16位的,它只有16位運(yùn)算指令,假設(shè)是兩個(gè)32位數(shù)相乘就無法直接用指令實(shí)現(xiàn)(在80386中有32位數(shù)相乘的指令),但可以用16位乘法指令做4次乘法,然后把局部積相加來實(shí)現(xiàn)。假設(shè)數(shù)據(jù)區(qū)中已有一個(gè)緩沖區(qū)存放了32位的被乘數(shù)和乘數(shù),保存了64位的空間以存放乘積,能實(shí)現(xiàn)上述運(yùn)算的程序流程圖如下圖。匯編語(yǔ)言程序設(shè)計(jì)經(jīng)典案例舉例直線性程序結(jié)構(gòu)栗烈毫趟介井藥蟬扛毒格墑?wù)茡品嗤ㄉ寂_(tái)傳壟苞估瓣歉攜橢湖嗆每彬匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)頗俺君酣農(nóng)斧寇籠鴕寇寅俘瞻演趟請(qǐng)操淋柵證男體折鈍瀑涅掌棕福撼鈍咖匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2) name 32bitmultiplydata segmentmulnumdw0000,0ffffh,0000,0ffffh,4dup(?)data endsstack segmentparastack′stack′ db 100dup(?)stack endscode segment assumecs:code,ds:data,ss:stack,es:datastart procfarbegin:pushds;DS中包含的是程序段前綴的起始地址 movax,0 push ax;設(shè)置返回至DOS的段值和IP值 movax,data mov ds,ax mov es,ax ;置段存放器初值 lea bx,mulnum們彪馮層屏疵故本壯唱轍亦阮劉祥郁締褂悄靈彭控卉跨佐跟藕碉潑訪井躁匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)mulu32: mov ax,[bx] ;B→AX mov si,[bx+4] ;D→SI mov di,[bx+6] ;C→DI mul si ;B×D mov [bx+8],ax ;保存局部積1 mov [bx+0ah],dx mov ax,[bx+2] ;A→AX mul si ;A×D add ax,[bx+0ah] adc dx,0 ;局部積2的一局部與局部積1的相應(yīng)局部相加 mov [bx+0ah],ax mov [bx+0ch],dx;保存 mov ax,[bx] ;B→AX mul di;B×C add ax,[bx+0ah];與局部積3的相應(yīng)局部相加 adc dx,[bx+0ch]露棺沸挖尉片汗奎類責(zé)氣今娜值閥榔于處寬葡肛范撻萍?jí)焰N龔岡用碴判菱匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2) mov [bx+0ah],ax mov [bx+0ch],dx pushf ;保存后一次相加的進(jìn)位位 mov ax,[bx+2] ;A→AX mul di;A×C popf adc ax,[bx+0ch];與局部積4的相應(yīng)局部相加 adc dx,0 mov [bx+0ch],ax mov [bx+0eh],dx retstart endpcode endsend begin盈罐悼勤辭牲瞳敵亦裹靛俄恐罰伍帚斷秸霄締衫祁練需拐震核瓢著鶴翟伊匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)在一個(gè)實(shí)際的程序中,程序始終是直線執(zhí)行的情況是不多見的,通常都會(huì)有各種分支。例如,變量x的符號(hào)函數(shù)可用下式表示: y=1 當(dāng)x>0 y=0 當(dāng)x=0 y=-1 當(dāng)x<0在程序中,要根據(jù)x的值給y賦值,如圖4-5所示。先把變量x從內(nèi)存中取出來,執(zhí)行一次“與〞或“或〞操作,就可把x值的特征反映到標(biāo)志位上。于是就可以判斷是否等于零,假設(shè)是(x=0),那么令y=0;假設(shè)否(x≠0),再判斷是否小于零,假設(shè)是,那么令y=-1;不是,就令y=1。分支程序設(shè)計(jì)流懈獻(xiàn)鐵咆誡獨(dú)警穩(wěn)脅熏齡園潑芍抹么懇獵宗腰監(jiān)撮總豹袖蕪每茅節(jié)傲見匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)澈見震偷憐津需犬孵接塢巾苔崩該上事秋攏壇咀賀架匿帽連伴芳招后掀專匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)在程序中,往往要求某一段程序重復(fù)執(zhí)行屢次,這時(shí)候就可以利用循環(huán)程序結(jié)構(gòu)。一個(gè)循環(huán)結(jié)構(gòu)由以下幾局部組成:(1)循環(huán)體:就是要求重復(fù)執(zhí)行的程序段局部。其中又分為:循環(huán)工作局部和循環(huán)控制局部。循環(huán)控制局部每循環(huán)一次檢查循環(huán)結(jié)束的條件,當(dāng)滿足條件時(shí)就停止循環(huán),往下執(zhí)行其他程序。循環(huán)程序設(shè)計(jì)硼肥蛾水翻恫膩貓爬謠招憫督欲巷傈遣餐哩賠眉蒸叁蔚鞍教棄盯窘厚愉糾匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)(2)循環(huán)結(jié)束條件:在循環(huán)程序中必須給出循環(huán)結(jié)束條件,否那么程序就會(huì)進(jìn)入死循環(huán)。常見的循環(huán)是計(jì)數(shù)循環(huán),當(dāng)循環(huán)了一定次數(shù)后就結(jié)束循環(huán)。在微型機(jī)中,常用一個(gè)內(nèi)部存放器(或存放器對(duì))作為計(jì)數(shù)器,通常這個(gè)計(jì)數(shù)器的初值置以循環(huán)次數(shù),每循環(huán)一次令其減1,當(dāng)計(jì)數(shù)器減為0時(shí),就停止循環(huán)。也可以初值置為0,每循環(huán)一次加1,再與循環(huán)次數(shù)相比較,假設(shè)兩者相等就停止循環(huán)。循環(huán)結(jié)束條件還可以有很多種。統(tǒng)瓤盛仕席戚曝槐培眾鳴儡飽喘嗅虛再肚克毗聶勢(shì)墾瑪藹降舞殃宵慧砸瑟匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)(3)循環(huán)初態(tài):用于循環(huán)過程的工作單元,在循環(huán)開始時(shí)往往要置以初態(tài),即分別給它們賦一個(gè)初值。循環(huán)初態(tài)又可以分成兩局部:一是循環(huán)工作局部的初態(tài),另一是結(jié)束條件的初態(tài)。例如,要設(shè)地址指針,要使某些存放器清零,或設(shè)某些標(biāo)志等等。循環(huán)結(jié)束條件的初態(tài)往往置以循環(huán)次數(shù)。置初態(tài)也是循環(huán)程序的重要局部,不注意往往容易出錯(cuò)。娟廳留熄碟遲孩掛強(qiáng)翠咀隘文汕而楚怪臂銜粳擠稠史蔫丸弊虧烷沃弗耗猿匯編語(yǔ)言根底(2)匯編語(yǔ)言根底(2)在循環(huán)程序中,控制循環(huán)的方法因?yàn)橐蟛煌屑僭O(shè)干
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 26《好的故事》說課稿-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版
- 1場(chǎng)景歌說課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)
- 2024年秋一年級(jí)道德與法治下冊(cè) 第二單元 我和大自然 5 風(fēng)兒輕輕吹說課稿 新人教版
- 18古詩(shī)三首浪淘沙(其一)說課稿-2024-2025學(xué)年六年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 8 設(shè)計(jì)制作小車(二) 說課稿-2024-2025學(xué)年科學(xué)四年級(jí)上冊(cè)教科版
- 23《月光曲》說課稿-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版
- 1 24時(shí)計(jì)時(shí)法(說課稿)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)人教版001
- 2023九年級(jí)道德與法治上冊(cè) 第三單元 文明與家園 第五課 守望精神家園第2框 凝聚價(jià)值追求說課稿 新人教版
- 2025北京市飼料采購(gòu)合同新
- 2025建造船舶所要用到的合同
- 中醫(yī)中風(fēng)病(腦梗死)診療方案
- GMP-基礎(chǔ)知識(shí)培訓(xùn)
- 人教版小學(xué)六年級(jí)數(shù)學(xué)下冊(cè)(全冊(cè))教案
- 人教版二年級(jí)語(yǔ)文上冊(cè)同音字歸類
- 高二數(shù)學(xué)下學(xué)期教學(xué)計(jì)劃
- 文學(xué)類作品閱讀練習(xí)-2023年中考語(yǔ)文考前專項(xiàng)練習(xí)(浙江紹興)(含解析)
- SB/T 10624-2011洗染業(yè)服務(wù)經(jīng)營(yíng)規(guī)范
- 第五章硅酸鹽分析
- 外科學(xué)總論-第十四章腫瘤
- 網(wǎng)絡(luò)反詐知識(shí)競(jìng)賽參考題庫(kù)100題(含答案)
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第四章感覺系統(tǒng)對(duì)運(yùn)動(dòng)控制的作用
評(píng)論
0/150
提交評(píng)論