尋址方式和指令系統(tǒng)修改.ppt
《尋址方式和指令系統(tǒng)修改.ppt》由會員分享,可在線閱讀,更多相關(guān)《尋址方式和指令系統(tǒng)修改.ppt(141頁珍藏版)》請在裝配圖網(wǎng)上搜索。
本章重點:1、掌握8086尋址方式2、掌握8086匯編語言指令系統(tǒng),第三章8086的尋址方式和指令系統(tǒng),第三章8086的尋址方式和指令系統(tǒng),3-18086的尋址方式,指令有單操作數(shù)、雙操作數(shù)和無操作數(shù)之分。如果是雙操作數(shù)指令,要用逗號將兩個操作數(shù)分開,逗號右邊的操作數(shù)稱為源操作數(shù),逗號左邊的為目的操作數(shù)。,MOV功能:將BX中的源操作數(shù)→AX(目的),,而象單操作數(shù)指令I(lǐng)NCAX其中AX既是源操作數(shù),又是目的操作數(shù),其功能是:AX+1→AX。而象指令NOP,沒有操作數(shù)。,前面舉的例子都是操作數(shù)在寄存器中,操作數(shù)還可以在存儲器或I/O端口中,也可以是立即數(shù)。,,8086的尋址方式,下面主要以MOV指令來說明8086的這些尋址方式。,一、立即尋址方式,操作數(shù)直接包含在指令中,它是一個8位或16位的常整數(shù),也叫立即數(shù)。,例如MOVAL,30HMOVAX,0FFFCHMOV[1000H],1234H注意:1.常數(shù)以A~F開頭時,應在其前加0,以區(qū)別其它符號(如0FFFCH)。2.立即數(shù)只能作源操作數(shù),不能作目的操作數(shù)。(如MOV23H,BL),二、寄存器尋址方式,操作數(shù)包含在寄存器中。對于16位操作數(shù),寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP等等;對于8位操作數(shù),寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL。例1:MOVDX,AX2:MOVBL,CL注意:源操作數(shù)的長度必須與目的操作數(shù)一致。,,三、直接尋址方式(存儲器尋址),1.直接尋址方式,有效地址(EA):操作數(shù)的偏移地址。使用直接尋址方式的指令時,存儲單元的有效地址直接由指令給出,而段地址如沒有指令前綴,默認由數(shù)據(jù)段寄存器給出。例如MOVAX,[2000H];存儲單元的有效地址EA=2000H,段地址由數(shù)據(jù)段DS指定(設(shè)DS=3000H)。此指令的執(zhí)行過程如下圖所示。,,指令MOVAX,[2000H]的執(zhí)行過程,2.段超越前綴如果要對代碼段、堆棧段或附加段寄存器所指出的存儲區(qū)進行直接尋址,應在指令中指定段超越前綴。,3.符號地址(變量名)在匯編語言中還允許用符號地址代替數(shù)值地址,實際上就是給存儲單元起一個名字,這樣,要與這些單元打交道,只要使用其名字即可,不必記住具體數(shù)值是多少。例如MOVAX,AREA1這里的AREA1就是操作數(shù)的符號地址,該指令執(zhí)行后,將從有效地址為AREA1的存儲單元中取出一個字送到AX中去。,注意:光從指令的形式上看,AREA1不僅可代表符號地址,也可以表示它是一個16位的立即數(shù),兩者之間究竟如何來區(qū)別呢?程序中還必須事先安排說明語句也叫做偽指令來加以說明。,四、寄存器間接尋址方式,指令中給出的寄存器中的值不是操作數(shù)本身,而是操作數(shù)的有效地址EA,這種尋址方式稱為寄存器間接尋址。寄存器名稱外面必須加方括號,以與寄存器尋址方式相區(qū)別。這類指令中使用的寄存器有基址寄存器BX、BP及變址寄存器SI、DI。,例如MOVBX,[SI]設(shè)DS=1000H,SI=2000H,(12000H)=3456H則物理地址=DS16+SI=10000H+2000H=12000H此指令的功能就是(12000H)字→BX,因此指令執(zhí)行后BX=3456H。執(zhí)行過程如下圖所示。,指令MOVBX,[SI]的執(zhí)行過程,例如指令MOVAX,[BP],則默認操作數(shù)在堆棧段中,操作數(shù)的物理地址=SS16+BP。設(shè)SS=4000H,BP=1000H,(41000H)=5678H則物理地址=SS16+BP=40000H+1000H=41000H此指令的功能就是(41000H)字→AX,因此指令執(zhí)行后AX=5678H。執(zhí)行過程如下圖所示。,指令MOVAX,[BP]的執(zhí)行過程,寄存器間接尋址方式的指令中也可以指定段超越前綴來從默認段以外的段中取得數(shù)據(jù),如:MOVBX,DS:[BP]物理地址=DS16+BPMOVAX,ES:[DI]物理地址=ES16+DI,五、寄存器相對尋址方式操作數(shù)的有效地址是一個基址或變址寄存器的內(nèi)容與指令中指定的8位或16位位移量之和。這種尋址方式與寄存器間接尋址十分相似,主要區(qū)別是前者在有效地址的基礎(chǔ)上還要加一個位移量。同樣,當指令中指定的寄存器是BX,SI或DI時,默認的段寄存器是DS,當指定寄存器是BP時,默認的段寄存器是SS。,指令MOVBX,COUNT[SI]的執(zhí)行過程,六、基址變址尋址方式操作數(shù)的有效地址是一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)的內(nèi)容之和,兩個寄存器均由指令指出。若基址寄存器BX時,段寄存器用DS;若基址寄存器BP時,段寄存器用SS。,指令MOVAX,[BX][SI]的執(zhí)行過程,七、相對基址變址尋址方式操作數(shù)的有效地址是一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)的內(nèi)容,再加上指令中指定的8位或16位位移量之和。若基址寄存器BX時,段寄存器用DS;若基址寄存器BP時,段寄存器用SS。,指令MOVAX,MASK[BX][SI]的執(zhí)行過程,從以上這些尋址方式可以看到,在涉及到操作數(shù)的地址時,常常要在指令中使用方括號,有關(guān)帶方括號的地址表達式必須遵循下列規(guī)則:,①立即數(shù)可以出現(xiàn)在方括號內(nèi),表示直接尋址,如[1000H];,②只有BX,BP,SI和DI這四個寄存器可以出現(xiàn)在方括號內(nèi),它們可以單獨出現(xiàn),也可以由兩個寄存器組合起來(只能相加),同時還可以加上一個8位或16位的位移量,但BX和BP不能同時出現(xiàn)在方括號中,SI和DI也不能同時出現(xiàn)在方括號中;,,③由于方括號有相加的含義,下面幾種寫法都是等價的:6[BX][SI][BX+6][SI][BX][SI+6][BX+SI+6],④若方括號內(nèi)出現(xiàn)BP,則隱含使用SS段來提供段地址,物理地址=SS16+EA,其他情況均使用DS段來提供段地址,物理地址=DS16+EA,當然我們可以通過加段超越前綴來修改段地址。,八、其它尋址方式,1.隱含尋址指令中不指明操作數(shù),但有隱含規(guī)定的尋址方式。例如指令DAA,它的含義是對寄存器AL中的數(shù)據(jù)進行十進制數(shù)調(diào)整,結(jié)果仍保留在AL中。,2.I/O端口尋址分為直接端口尋址和間接端口尋址。直接:端口號由指令直接給出,是一個8位的立即數(shù)。端口號范圍為:00~FFH;間接:端口號由寄存器DX指定,端口范圍為:0000~FFFFH。,3.一條指令有幾種尋址方式前面介紹的各種尋址方式都是針對源操作數(shù)的,目的操作數(shù)均用寄存器來表示。實際上,目的操作數(shù)也可以除立即尋址方式以外的所有尋址方式指定。,4.轉(zhuǎn)移類指令尋址將在后面章節(jié)詳細介紹。,3-2指令的機器碼表示方法(自學),課堂練習P120(1,2,3)其中1(2),(4),(6)2(1),(3),(5)3(1),(2),(6)作業(yè):P120(1,2,3)其中1(1),(3),(5)2(2),(4),(6)3(7),(8),(9),3-38086的指令系統(tǒng),8086指令系統(tǒng)中包含133條基本指令,分六大類:①數(shù)據(jù)傳送指令②算術(shù)運算指令③邏輯運算和移位指令④字符串操作指令⑤控制轉(zhuǎn)換指令⑥處理器控制指令,一、數(shù)據(jù)傳送指令,分4類:①通用數(shù)據(jù)傳送指令②輸入輸出指令③地址目標傳送指令④標志傳送指令,1.通用數(shù)據(jù)傳送指令,(1)MOV傳送指令指令格式:MOV目的,源指令功能:將源操作數(shù)(一個字節(jié)或一個字)傳送到目的操作數(shù)。,幾點說明:,①指令中,立即數(shù)不能作為目的操作數(shù),CS和IP也不能作為目的操作數(shù),即它們的值不能隨意修改。同時IP還不能作為源操作數(shù)。,②兩個內(nèi)存單元之間,以及兩個段寄存器之間不能直接傳送數(shù)據(jù)。,③立即數(shù)不能直接傳送給段寄存器,必須通過寄存器傳送給段寄存器。,④當指令是給SS段寄存器賦值時,系統(tǒng)會自動禁止外部中斷,等到本條指令和下條指令執(zhí)行之后,又自動開中斷。(目的?),針對第③點說明,我們簡單了解一下一個數(shù)據(jù)段的定義,以及段地址→DS?,例如,下面是某個程序的數(shù)據(jù)段:DATASEGMENT;數(shù)據(jù)段開始AREA1DB14H,3BHAREA2DB3DUP(0)ARRAYDW3100H,01A6HSTRINGDB‘GOOD’DATAENDS;數(shù)據(jù)段結(jié)束,,圖3-13數(shù)據(jù)段占用存儲空間的情況,課堂練習:習題5、6(1-3-5),(2)PUSH進棧指令指令格式:PUSH源指令功能:將源操作數(shù)壓入堆棧?!镌床僮鲾?shù)可以是16位通用寄存器、段寄存器或存儲器中的數(shù)據(jù)字,但不能是立即數(shù)。,(3)POP出棧指令指令格式:POP目的指令功能:將當前SP和SP+1所指向的單元內(nèi)容→目的操作數(shù)。★源操作數(shù)可以是16位通用寄存器、段寄存器或存儲器中的數(shù)據(jù)字,但CS不能作為目的操作數(shù)。,例3-29假如當前SS=C000H,SP=1000H,AX=1234HBX=5678H,CX=ABCDH,則執(zhí)行指令PUSHAX,PUSHBX,POPCX后,堆棧中的內(nèi)容發(fā)生什么變化,AX,BX,CX中的內(nèi)容又是多少?畫圖說明。,,(4)XCHG交換指令指令格式:XCHG目的,源指令功能:把一個字或字節(jié)的源操作數(shù)和目的操作數(shù)相交換。,幾點說明:,①段寄存器、IP,立即數(shù)不能作為操作數(shù),②兩個存儲單元之間不能直接交換數(shù)據(jù),③目的和源操作數(shù)的長度必須一致,(5)XLAT表轉(zhuǎn)換指令(查表指令)指令格式:XLAT轉(zhuǎn)換表指令功能:將一個字節(jié)從一種代碼轉(zhuǎn)換成另一種代碼。,使用過程:,①在內(nèi)存中建立一個表格(就是定義一段字節(jié)數(shù)據(jù),這些數(shù)據(jù)就是轉(zhuǎn)換以后的代碼)。,②將表的首地址→BX寄存器中(只能是BX),③在AL中存放一個數(shù)據(jù)(就是需要轉(zhuǎn)換的代碼),而這個數(shù)據(jù)實際是表的首地址與所要查找的某一項之間的位移量(∴表格中最多包含256個字節(jié)),④執(zhí)行XLAT指令,指令執(zhí)行后,將轉(zhuǎn)換后的代碼(所查的字節(jié)內(nèi)容)就→AL中。,例3-31如下圖所示的8段數(shù)碼管,顯示段碼的格式為:(dpgfedcba)2,當相應的位為‘1’時,此段就顯示;為‘0’時,就不顯示。如0的段碼為:(00111111)2=3FH;1的段碼為:(00000110)2=06H等等?,F(xiàn)要求編一程序段,通過查表將5的顯示段碼→DL中。,,程序如下:DISPDB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FH┋MOVBX,OFFSETDISP;表首址→BXMOVAL,5;5的段碼與表首址之間的位移量→ALXLAT(XLATDISP);5的段碼6DH→ALMOVDL,AL;5的段碼6DH保存到DL,,2.輸入輸出指令用來完成I/O端口與累加器之間的數(shù)據(jù)傳送,指令中要給出I/O端口的地址。,(1)IN輸入指令指令格式:①INAL,端口地址;INAX,端口地址②INAL,DX;INAX,DX;指令功能:從8位端口讀一個字節(jié)→AL,或從16位端口讀一個字→AX。,INAL,50H;從50H端口讀一個字節(jié)→AL,(2)OUT輸出指令指令格式:①OUT端口地址,AL;OUT端口地址,AX②OUTDX,AL;OUTDX,AX;,3.地址目標傳送指令—用來傳送操作數(shù)的段地址和偏移地址,(1)LEA取有效地址指令指令格式:LEA目的,源指令功能:取源操作數(shù)的偏移地址→目的要求:①源操作數(shù)必須是內(nèi)存單元②目的操作數(shù)必須是一個16位的寄存器(段寄存器除外)★使用時,要注意與MOV指令的區(qū)別!,(2)LDS將雙字指針送到寄存器和DS指令指令格式:LDS目的,源指令功能:從源操作數(shù)指定的存儲單元中,取出一個變量的4字節(jié)地址指針,送到一對目的寄存器。其中前兩個字節(jié)(表示變量的偏移地址)送到指令中指定的目的寄存器,后兩個字節(jié)(表示變量的段地址)送到DS段寄存器中。,要求:①源操作數(shù)必須是內(nèi)存單元,從該單元開始的連續(xù)4個字節(jié)單元中,存放著一個變量的地址指針(偏移地址和段地址),②目的操作數(shù)必須是一個16位的寄存器(段寄存器除外),常使用SI寄存器。,(3)LES將雙字指針送到寄存器和ES指令指令格式:LES目的,源指令功能:從源操作數(shù)指定的存儲單元中,取出一個變量的4字節(jié)地址指針,送到一對目的寄存器。其中前兩個字節(jié)(表示變量的偏移地址)送到指令中指定的目的寄存器,后兩個字節(jié)(表示變量的段地址)送到ES段寄存器中。,要求:①源操作數(shù)必須是內(nèi)存單元,從該單元開始的連續(xù)4個字節(jié)單元中,存放著一個變量的地址指針(偏移地址和段地址)②目的操作數(shù)必須是一個16位的寄存器(段寄存器除外),常使用DI寄存器。,4.標志傳送指令—對標志寄存器FLAGS進行操作,(1)LAHF,標志送到AH指令指令格式:LAHF指令功能:把標志寄存器的低8位對應→AH,(2)SAHF,AH送到標志寄存器指令指令格式:SAHF指令功能:把AH對應→標志寄存器的低8位,其高8位保持不變。,(3)PUSHF,標志入棧指令指令格式:PUSHF指令功能:把整個標志寄存器的內(nèi)容壓入堆棧,同時修改SP(SP-2→SP),(4)POPF,標志出棧指令指令格式:POPF指令功能:把當前堆棧指針SP所指的一個字,傳送到標志寄存器,同時修改SP(SP+2→SP),二、算術(shù)運算指令,算術(shù)運算指令可以處理4種類型的數(shù):,①無符號二進制整數(shù),②帶符號二進制整數(shù):用補碼表示,③無符號壓縮十進制整數(shù):一個字節(jié)中存放兩個BCD碼十進制數(shù)。,④無符號非壓縮十進制整數(shù):只在一個字節(jié)的低半字節(jié)存放一個BCD碼十進制數(shù),而高半字節(jié)為0。,8086指令系統(tǒng)提供了加、減、乘、除四種基本運算指令,可處理無符號或帶符號的8位或16位二進制數(shù)的算術(shù)運算,還提供了各種調(diào)整操作指令,故可進行壓縮的或非壓縮的十進制數(shù)的算術(shù)運算。絕大部分算術(shù)運算指令都影響狀態(tài)標志位。對于加法和減法運算指令,帶符號數(shù)和無符號數(shù)的加法和減法運算的操作過程是一樣的故可以用同一條加法或減法指令來完成。而對于乘法和除法運算,帶符號數(shù)和無符號數(shù)的運算過程完成不同,必須分別設(shè)置無符號數(shù)的乘除法指令。,1.加法指令,(1)ADD不帶進位的加法指令指令格式:ADD目的,源指令功能:源+目的→目的,(2)ADC帶進位的加法指令指令格式:ADC目的,源指令功能:源+目的+CF→目的,例3-41求下列指令執(zhí)行后,對標志位有何影響?MOVAL,5EHADDAL,3CH,★上述這些標志位我們程序員不是每個都需要關(guān)心,要分不同情況考慮:①當程序員把上兩數(shù)看成是無符號數(shù)相加時,在這里SF和OF就沒有什么實際意義了,只要關(guān)心CF就可以了。②當程序員把上兩數(shù)看成是有符號數(shù)相加時,這時CF位就沒有什么意義了,而需要考慮SF和OF位。③當進行BCD碼運算或需要進行奇偶校驗時,才考慮AF或PF標志位。,(3)INC增量指令指令格式:INC目的指令功能:目的+1→目的,(4)AAA加法的ASCII調(diào)整指令指令格式:AAA指令功能:在用ADD或ADC指令對兩個非壓縮十進制數(shù)或ASCII碼表示的十進制數(shù)作加法后,運算結(jié)果已存在AL的情況下,用此指令將AL寄存器中的運算結(jié)果調(diào)整為1位非壓縮十進制數(shù),仍保留在AL中,如果AF=1,表示向高位有進位,則進位進到AH中。,AAA指令執(zhí)行時,對AL中的運算結(jié)果進行調(diào)整的過程如下:若AL低4位>9或輔助進位AF=1,則①AL+6→AL;②用與操作將AL高4位清0,低4位不變;③AF置1,CF置1,AH+1→AH否則,僅將AL寄存器的高4位清0。,例3-44若AL=BCD9,BL=BCD5,求兩數(shù)之和。設(shè)AH=0。下面看看運算過程:,例3-45求ASCII碼表示的數(shù)9(39H)和5(35H)之和。設(shè)AH=0,則運算過程如下:,,(5)DAA加法的十進制調(diào)整指令指令格式:DAA指令功能:將兩個壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。相加后的結(jié)果必須在AL中,才能使用DAA指令。,例3-46若AL=BCD38,BL=BCD15,求兩數(shù)之和。下面看看運算過程:,例3-47若AL=BCD88,BL=BCD49,求兩數(shù)之和。下面看看運算過程:,2.減法指令,(1)SUB不帶借位的減法指令指令格式:SUB目的,源指令功能:目的-源→目的,(2)SBB帶借位的減法指令指令格式:SBB目的,源指令功能:目的-源-CF→目的,(3)DEC增量指令指令格式:DEC目的指令功能:目的-1→目的,(4)NEG取負指令(求補指令)指令格式:NEG目的指令功能:0-目的→目的,(5)CMP比較指令指令格式:CMP目的,源,(6)AAS減法的ASCII調(diào)整指令指令格式:AAS指令功能:在用SUB或SBB指令對兩個非壓縮十進制數(shù)或ASCII碼表示的十進制數(shù)作減法后,運算結(jié)果已存在AL的情況下,對AL中的所得結(jié)果調(diào)整,在AL中得到一個正確的非壓縮十進制數(shù)之差,如果有借位,則CF置1。AAS指令必須緊跟在SUB或SBB指令之后。,例3-54設(shè)AL=BCD3,CL=BCD8,求兩數(shù)之差。顯然,結(jié)果為BCD5,但要向高位借位。調(diào)整過程如下:,(7)DAS減法的十進制調(diào)整指令指令格式:DAS指令功能:將兩個壓縮BCD數(shù)相減后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。相減后的結(jié)果必須在AL中,才能使用DAS指令。,例3-55設(shè)AL=BCD56,CL=BCD98,求兩數(shù)之差。調(diào)整過程如下:,3.乘法指令,(1)MUL無符號數(shù)乘法指令指令格式:MUL源指令功能:把源操作數(shù)和累加器中的數(shù)都當成是無符號數(shù),然后將兩數(shù)相乘,源操作數(shù)可以是字節(jié)或字。,(2)IMUL有符號數(shù)乘法指令,指令格式:IMUL源指令功能:把源操作數(shù)和累加器中的數(shù)都當成是有符號數(shù),然后將兩數(shù)相乘,源操作數(shù)可以是字節(jié)或字。,(3)AAM乘法的ASCII調(diào)整指令指令格式:AAM指令功能:對已存在AL中的兩個非壓縮十進制數(shù)相乘的乘積進行十進制數(shù)的調(diào)整,使得在AX中得到正確的非壓縮十進制數(shù)的乘積,高位放在AH中,低位放在AL中。兩個ASCII碼數(shù)相乘之前,必須先屏蔽掉每個數(shù)字的高半字節(jié),從而使每個字節(jié)包含一個非壓縮十進制數(shù),再用MUL指令相乘,乘積放到AL寄存器中,然后用AAM指令進行調(diào)整。,4.除法指令,(1)DIV無符號數(shù)除法指令指令格式:DIV源指令功能:把源操作數(shù)和累加器中的數(shù)都當成是無符號數(shù),然后將兩數(shù)相除,源操作數(shù)可以是字節(jié)或字。,(2)IDIV帶符號數(shù)除法指令指令格式:IDIV源指令功能:該指令執(zhí)行的操作與DIV相同,但操作數(shù)都必須是帶符號數(shù),商和余數(shù)也都是帶符號數(shù),而且規(guī)定余數(shù)的符號和被除數(shù)的符號相同?!瘿C25/3→商=-8,余數(shù)=-1√(規(guī)定)商=-9,余數(shù)=+2,(3)CBW把字節(jié)轉(zhuǎn)換成字指令指令格式:CBW指令功能:把寄存器AL中字節(jié)的符號位擴充到AH的所有位,這時AH被稱為是AL的符號擴充。,(4)CWD把字轉(zhuǎn)換成雙字指令指令格式:CWD指令功能:把寄存器AX中字的符號位擴展到DX寄存器的所有位中去。,(5)AAD除法的ASCII調(diào)整指令指令格式:AAD指令功能:在做除法之前,把BCD碼轉(zhuǎn)換成二進制數(shù)。,三、邏輯運算和移位指令邏輯運算和移位指令對字節(jié)或字操作數(shù)進行按位操作。,1.邏輯運算指令,(1)NOT取反指令指令格式:NOT目的指令功能:將目的操作數(shù)求反,結(jié)果送回目的操作數(shù),即→目的,(2)AND邏輯與指令指令格式:AND目的,源指令功能:對兩個操作數(shù)進行按位邏輯與操作,結(jié)果送回目的操作數(shù)。,(3)OR邏輯或指令指令格式:OR目的,源指令功能:對兩個操作數(shù)進行按位邏輯或操作,結(jié)果送回目的操作數(shù)。,(4)XOR異或操作指令指令格式:XOR目的,源指令功能:對兩個操作數(shù)進行按位邏輯異或操作,結(jié)果送回目的操作數(shù)。,(5)TEST測試指令指令格式:TEST目的,源指令功能:對兩個操作數(shù)進行按位邏輯與操作,并修改標志位,但不送回結(jié)果到目的,即指令執(zhí)行后,兩個操作數(shù)都不變,僅影響標志位。,2.算術(shù)邏輯移位指令(非循環(huán)移位指令)可對寄存器或存儲器中的字或字節(jié)的各位進行算術(shù)移位或邏輯移位,移位的次數(shù)由指令中的計數(shù)值決定。,(1)SAL算術(shù)左移指令指令格式:SAL目的,計數(shù)值(2)SHL邏輯左移指令指令格式:SHL目的,計數(shù)值,(3)SHR邏輯右移指令指令格式:SHR目的,計數(shù)值,(4)SAR算術(shù)右移指令指令格式:SAR目的,計數(shù)值,3.循環(huán)移位指令上述的算術(shù)邏輯移位指令,移出操作數(shù)的數(shù)位均被丟失,而循環(huán)移位指令把操作數(shù)從一端移到操作數(shù)的另一端,這樣從操作數(shù)中移走的位就不丟失了。,(1)ROL循環(huán)左移指令指令格式:ROL目的,計數(shù)值,,(2)ROR循環(huán)右移指令指令格式:ROR目的,計數(shù)值,,(3)RCL帶進位的循環(huán)左移指令指令格式:RCL目的,計數(shù)值,(4)RCR帶進位的循環(huán)右移指令指令格式:RCR目的,計數(shù)值,四、字符串處理指令,這里所謂的字符串是指一系列存放在存儲器中的字或字節(jié)數(shù)據(jù),不管它們是不是ASCII碼。字符串長度可達64K字節(jié),組成字符串的字節(jié)或字稱為字符串元素,每種字符串指令對字符串中的元素只進行同一種操作。,字符串操作指令共有5條,其特點如下:,1.字符串傳送指令MOVSB/MOVSW指令格式:MOVSB目的串,源串或MOVSW目的串,源串,例3-75要求把數(shù)據(jù)段中以SRC_MESS為偏移地址的一串字符“HELLO!”,傳送到附加段中以NEW_LOC開始的單元中。實現(xiàn)該操作的程序如下:DATASEGMENT;數(shù)據(jù)段SRC_MESSDB‘HELLO’;源串DATAENDS;EXTRASEGMENT;附加段NEW_LOCDB6DUP(?);存放目的串EXTRAENDS;,CODESEGMENT;代碼段ASSUMECS:CODE,DS:DATA,ES:EXTRASTART:MOVAX,DATAMOVDS,AXMOVAX,EXTRAMOVES,AXLEASI,SRC_MESSLEADI,NEW_LOCMOVCX,6CLDREPMOVSBCODEENDSENDSTART,2.字符串比較指令CMPSB/CMPSW指令格式:CMPSB目的串,源串或CMPSW目的串,源串,例3-76比較兩個字符串,一個是你在程序中設(shè)定的口令串PASSWORD,另一個是從鍵盤輸入的字符串IN_WORD,若輸入串與口令串相同,程序?qū)㈤_始執(zhí)。否則,程序驅(qū)動PC機的揚聲器發(fā)聲,警告用戶口令不符,拒絕往下執(zhí)行。這可以用CMPSB指令來實現(xiàn),有關(guān)程序段如下:,DATASEGMENT;數(shù)據(jù)段/附加段PASSWORDDB‘1234EEL’;口令串IN_WORDDB‘1234ELR’;輸入串COUNTEQU7;串長度DATAENDS,CODESEGMENT;代碼段ASSUMEDS:DATA,ES:DATA┅LEASI,PASSWORD;源串指針LEADI,IN_WORD;目的串指針MOVCX,COUNT;串長度CLD;使DF=0,SI、DI自動增加REPZCMPSB;CX≠0且串相同時重復JNZSOUND;若不相等,轉(zhuǎn)發(fā)聲程序OK:┅;比較完且相同,往下執(zhí)行┅SOUND:┅┅CODEENDS,3.字符串掃描指令SCASB/SCASW指令格式:SCASB目的串或SCASW目的串,MOVDI,OFFSETSTRING;DI=字符串偏移地址=0MOVCX,COUNT;CX=字符串長度MOVAL,’A’;AL=關(guān)鍵字A的ASCII碼CLD;DF=0,DI自動加1REPNESCASB;CX≠0(沒查完)且不相同時重復JZFIND;若ZF=1,表示已搜索到,轉(zhuǎn)出MOVDI,0;若ZF=0,表示沒搜索到,則DI=0FIND:MOVBX,DI;搜索次數(shù)→BX┅★上述程序中,DI初值存起始地址偏移量0,搜索一次后DI自動加1,使DI的值等于1,以后,每執(zhí)行一次搜索操作,DI自動加1。所以,正好可用DI的值來表示搜索次數(shù)。,4.取字符串指令LODSB/LODSW指令格式:LODSB源串或LODSW源串,5.存字符串指令STOSB/STOSW指令格式:STOSB目的串或STOSW目的串,五、控制轉(zhuǎn)移指令通常,程序中的指令都是順序地逐條執(zhí)行的,在8086中,指令的執(zhí)行順序由CS和IP決定,每取出一條指令,指令指針I(yè)P自動進行調(diào)整,一條指令執(zhí)行完后,就從該指令之后的下一個存儲單元中取出新的指令來執(zhí)行。利用控制轉(zhuǎn)移指令可以改變CS和IP的值,從而改變指令的執(zhí)行順序。為滿足程序轉(zhuǎn)移的不同要求,8086提供了無條件轉(zhuǎn)移和過程調(diào)用、條件轉(zhuǎn)移、循環(huán)控制以及中斷等幾類指令,見下表。,,1.無條件轉(zhuǎn)移和過程調(diào)用指令,(1)JMP無條件轉(zhuǎn)移指令指令格式:JMP目的指令功能:使程序無條件地轉(zhuǎn)移到指令中指定的目的地址去執(zhí)行。,這類指令又分成兩種類型:,不論段內(nèi)還是段間轉(zhuǎn)移,就轉(zhuǎn)移地址提供的方式而言,又可分為兩種方式:,無條件轉(zhuǎn)移指令可分為:①段內(nèi)直接轉(zhuǎn)移②段內(nèi)間接轉(zhuǎn)移③段間直接轉(zhuǎn)移④段間間接轉(zhuǎn)移,①段內(nèi)直接轉(zhuǎn)移指令指令格式:JMPSHORT標號JMPNEARPTR標號或JMP標號,②段內(nèi)間接轉(zhuǎn)移指令指令格式:JMP16位寄存器JMPWORDPTR[存儲單元]這類指令轉(zhuǎn)向的16位有效地址存放在一個16位寄存器或字存儲單元中。,③段間直接(遠)轉(zhuǎn)移指令指令格式:JMPFARPTR標號,④段間間接轉(zhuǎn)移指令指令格式:JMPDWORDPTR[存儲單元],(2)過程調(diào)用和返回指令在編寫程序時,往往把某些能完成特定功能而又經(jīng)常要用到的程序段,編寫成獨立的模塊,并把它稱為過程,習慣上也稱作子程序,然后在程序中用CALL語句來調(diào)用這些過程,調(diào)用過程的程序稱為主程序。,①段內(nèi)直接調(diào)用和返回例3-83CALLPROG_N;PROG_N是一個近標號根據(jù)附錄B可知,該指令占3個字節(jié),機器碼格式為:,執(zhí)行CALL的過程為:●SP-2→SP,即新的SP=0100H-2=00FEH,●返回地址的IP入棧。,●根據(jù)當前IP值和位移量DISP計算出新的IP值,作為子程序的入口地址。,RET指令的尋址方式與CALL指令的尋址方式一致,在本例中是段內(nèi)直接調(diào)用,所以過程PROG_N中的RET指令將執(zhí)行如下操作:,●(SP+1,SP)單元內(nèi)容→IP,IP=1053H,●SP+2→SP,即新的SP=0100H,②段內(nèi)間接調(diào)用和返回例3-84CALLBXCALLWORDPTR[BX],它們執(zhí)行的操作分三步進行,具體為:SP-2→SP;CALL指令的下一條指令的IP入棧;BX→IP或[DS:BX]單元字內(nèi)容→IP;,對應的RET指令執(zhí)行的操作與段內(nèi)直接過程的返回指令相類似。,③段間直接調(diào)用例3-85CALLFARPTRPROG_F;遠標號該指令占5個字節(jié),編碼格式為:,執(zhí)行遠調(diào)用CALL指令的過程為:,●SP-2→SP,然后返回地址段地址CS=1000H入棧;,●SP-2→SP,然后返回地址偏移地址IP=205FH入棧;,●轉(zhuǎn)子程序入口,將PROG_F的段地址和偏移地址分別送到CS和IP寄存器。即3000H→CS,0500H→IP,●執(zhí)行子程序,過程PROG_F中的RET指令的尋址方式也是段間直接調(diào)用,返回時執(zhí)行的操作為:,●SP+2→SP,然后將棧中內(nèi)容205FH→IP;●SP+2→SP,然后將棧中內(nèi)容1000H→CS;所以程序?qū)⒎祷氐紺S:IP=1000:205FH處即CALL指令的下一條指令處繼續(xù)執(zhí)行。,④段間間接調(diào)用這類調(diào)用指令的操作數(shù)必須是存儲單元,從該單元開始存放的雙字表示過程的入口地址,其中前2個字節(jié)是偏移量IP,后兩個字節(jié)是代碼段地址CS。指令中用DWORDPTR說明是對存儲單元進行雙字操作。,2.條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是根據(jù)上一條指令執(zhí)行后,CPU設(shè)置的狀態(tài)標志作為判別測試條件來決定是否轉(zhuǎn)移。每一種條件轉(zhuǎn)移指令都有它的測試條件,當條件成立,便控制程序轉(zhuǎn)向指令中給出的目的地址,去執(zhí)行那里的指令,否則,程序仍順序執(zhí)行。,條件轉(zhuǎn)移指令通常用在比較指令或算術(shù)運算指令之后,根據(jù)比較或運算結(jié)果,轉(zhuǎn)向不同的目的地址。在指令中,目的地址均用標號表示,因此指令的格式為:條件操作符標號,條件轉(zhuǎn)移指令共有18條,可以歸類成以下兩大類:,(1)直接標志轉(zhuǎn)移指令這類轉(zhuǎn)移指令在指令助記符中直接給出標志狀態(tài)的測試條件,它們以CF,ZF,SF,OF和PF等5個標志的10種狀態(tài)為判斷的條件,共形成10條指令。,例3-87求AL和BL寄存器中的兩數(shù)之和,若有進位,則AH置1,否則AH清0。可用如下程序段來實現(xiàn)該操作:ADDAL,BL;兩數(shù)相加JCNEXT;若有進位,轉(zhuǎn)NEXTMOVAH,0;無進位,AH清0JMPEXIT;往下執(zhí)行NEXT:MOVAH,1;有進位,AH置1EXIT:┅;程序繼續(xù)進行,(2)間接標志轉(zhuǎn)移這類指令的助記符中不直接給出標志狀態(tài)位的測試條件,但仍以某一個標志的狀態(tài)或幾個標志的狀態(tài)組合,作為測試的條件,若條件成立則轉(zhuǎn)移,否則程序順序往下執(zhí)行。間接標志轉(zhuǎn)移指令共有8條,列于下表中。每條指令都有兩種不同的助記符,中間用‘/’隔開。,3.循環(huán)控制指令循環(huán)控制指令是一組增強型的條件轉(zhuǎn)移指令,用來控制一個程序段的重復執(zhí)行,重復次數(shù)由CX寄存器中的內(nèi)容決定。這類指令的長度均2個字節(jié),第一字節(jié)是操作碼,第二字節(jié)是8位位移量,轉(zhuǎn)移的目標都是短標號。,(1)LOOP循環(huán)指令指令格式:LOOP短標號,例3-92將位于DS段連續(xù)的100個字節(jié)的單元內(nèi)容都加1,其中第一個字節(jié)單元的偏移地址由SI來指定。程序段如下:┋MOVCX,100;共100個字節(jié)JIA1:ADD[SI],1INCSILOOPJIA1┋,(2)LOOPE/LOOPZ相等或結(jié)果為0循環(huán)指令格式:LOOPE短標號或LOOPZ短標號,例3-94設(shè)以SSS開始的內(nèi)存單元中存放了100個字節(jié)的數(shù)據(jù),編程要求找出其中第一個非0元素,并記下其偏移地址送到DI中,若全是0,則將DI清0。,(3)LOOPNE/LOOPNZ不相等或結(jié)果不為0循環(huán)指令格式:LOOPNE短標號或LOOPNZ短標號,(4)JCXZ若CX為0跳轉(zhuǎn)指令格式:JCXZ短標號,4.中斷指令在第八章將詳細介紹。,六、處理器控制指令,1.標志操作指令除了有些指令執(zhí)行后會影響標志位外,8086還提供了一組標志操作指令,它們可直接對CF、DF和IP標志位進行置1或清0等操作,但不包含TF標志。指令執(zhí)行后不影響其他標志,只影響本指令指定的標志,這些指令的功能和名稱如下表所示。,2.外部同步指令我們前面講過,8086系統(tǒng)可以工作在最大模式,即系統(tǒng)中還有其他微處理器或8086微處理器,為了充分發(fā)揮硬件的功能,設(shè)置了3條使CPU與其他協(xié)處理器同步工作的指令,以便共享系統(tǒng)資源,這幾條指令執(zhí)行后均不影響標志位。,(1)ESC換碼指令指令格式:ESC外部操作碼,源操作數(shù)指令功能:換碼指令用來實現(xiàn)8086對協(xié)處理器8087的控制。,(2)WAIT等待指令等待指令WAIT通常跟在ESC指令之后,CPU執(zhí)行ESC指令后,表示8086CPU正處于等待狀態(tài),它不斷檢測8086的測試引腳,每隔5個時鐘周期檢測一次,若此引腳為高電平,則重復執(zhí)行WAIT指令,處理器處于等待狀態(tài)。一旦引腳上的信號變?yōu)榈碗娖?,便退出等待狀態(tài),執(zhí)行下條指令。,(3)LOCK封鎖總線指令它是一種前綴,可加在任何指令的前端用來維持8086的總線封鎖信號有效,凡帶有LOCK前綴的指令在執(zhí)行過程中,將禁止其它處理器使用總線。,3.停機指令和空操作指令,(1)HLT停機指令它使CPU進入暫停狀態(tài),不進行任何操作,只有當下列情況之一發(fā)生時,CPU才脫離暫停狀態(tài):,●在RESET線上加復位信號;,●在NMI(不可屏蔽中斷)引腳上出現(xiàn)中斷請求信號;,●在允許中斷的情況下,在INTR引腳上出現(xiàn)中斷請求信號;,在程序中,通常用HLT指令來等待中斷的出現(xiàn)。,(2)NOP空操作指令不完成任何操作,只是簡單的延時。執(zhí)行一條NOP需3個時鐘周期。,七、指令的執(zhí)行時間和軟件延時每條指令的執(zhí)行都需要固定的時間,我們可以通過計算指令的執(zhí)行時間來實現(xiàn)軟件延時。,- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 尋址 方式 指令系統(tǒng) 修改
鏈接地址:http://appdesigncorp.com/p-12676294.html