




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章-1 尋址方式和指令系統(tǒng),教學(xué)重點(diǎn): 指令系統(tǒng)的一般概念 對(duì)操作數(shù)的尋址方式 六大類(lèi)指令的操作原理: 操作碼的含義 指令對(duì)操作數(shù)的要求 指令執(zhí)行的結(jié)果,指 令:控制計(jì)算機(jī)完成指定操作的命令; 機(jī)器指令:指令的二進(jìn)制代碼形式,如:CD21H; 匯編指令:助記符形式的指令,如:INT 21H; 指令系統(tǒng):CPU所有指令及其使用規(guī)則的集合,8088/8086指令系統(tǒng): (1)指令向后兼容(x86系列); (2)應(yīng)用廣泛,資料豐富,第3章-1 尋址方式和指令系統(tǒng),概述,尋址方式:指CPU指令中規(guī)定的尋找操作數(shù)所在的地址的方式。 操作數(shù): MOV AL, 05H 操作碼 目的操作數(shù) , 源操作數(shù)
2、操作數(shù)引用時(shí)的字節(jié)順序: 若存放的信息是字節(jié),則按順序存放 若存放的信息是字,則將字的低位字節(jié)存放在低地址,高位字節(jié)存放在高地址 注:如果沒(méi)有特別說(shuō)明,尋址方式是指源操作數(shù)的尋址 方式,尋址方式,8088/8086的操作數(shù)分為3類(lèi),1、立即數(shù)(常數(shù)) 取值范圍如下表,立即數(shù)只能用作源操作數(shù),如,MOV AX,0FA00H;正確 MOV 8000H,DX;錯(cuò)誤,放在8個(gè)通用寄存器或4個(gè)段寄存器中的操作數(shù),2、寄存器操作數(shù),只能存放字操作數(shù),段寄存器存放當(dāng)前操作數(shù)的段基地址,不允許將立即數(shù)傳送至段寄存器,SI,DI,BP,SP,CS,DS,ES,SS,存儲(chǔ)器操作數(shù),字節(jié) 字 雙字,1 2 4,類(lèi)型
3、,存儲(chǔ)單元個(gè)數(shù),一般不允許兩個(gè)操作數(shù)同時(shí)為存儲(chǔ)器操作數(shù),3、存儲(chǔ)器操作數(shù),一條指令的指行時(shí)間,指令的執(zhí)行時(shí)間,取指令 取操作數(shù) 執(zhí)行指令 傳送結(jié)果,單位用時(shí)鐘周期數(shù)表示,建議: 1)盡量使用寄存器作為操作數(shù) 2)若有可能,用移位代替乘除法 3)盡量使用簡(jiǎn)單的尋址方式,3.1.1 立即尋址,立即尋址方式中,指令操作碼和操作數(shù)都在存儲(chǔ)器的代碼段中。 匯編格式:n(n為立即操作數(shù),是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù)) 功能:操作數(shù)存放在存儲(chǔ)器,指令下一單元的內(nèi)容為立即操作數(shù)n。 圖形表示,立即尋址只能用于源操作數(shù) MOV AX, 1C8FH MOV BYTE PTR 2A00H, 8FH 錯(cuò)誤
4、例: MOV 2A00H, AX ; 錯(cuò)誤,例3.1 指令操作例:MOV AX,3102H ; AX 3102H,執(zhí)行后,(AH) = 31H,(AL) = 02H,3.1.2 直接尋址,匯編格式:含有變量的地址表達(dá)式。 段寄存器名:EA 。 功能:有效地址由指令直接給出,有效地址只包含位移量。 圖形表示,默認(rèn)的段寄存器為DS,但也可以顯式地指定其他段寄存器稱(chēng)為段超越前綴 偏移地址也可用符號(hào)地址來(lái)表示,如ADDR、VAR,例3.2:指令操作例:MOV AX,3102H AL (3102H) , AH (3103H,如果(DS)=2000H, (23012H) = CDH, (23013H) =
5、 ABH 則操作數(shù)的物理地址為: 20000H+3102H = 23102H 指令執(zhí)行后,AX) = 0ABCDH,3.1.3 寄存器尋址,寄存器尋址方式的操作數(shù)在指令指明的寄存器中。 匯編格式:R (R為寄存器名) 功能:操作數(shù)直接存放在寄存器R中。 圖形表示: R 指令 操作數(shù),源操作數(shù)與目的操作數(shù)字長(zhǎng)要相同; 寄存器尋址與段地址無(wú)關(guān),例3.3,下列程序執(zhí)行后,(AX)=?,(BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BX 該程序中MOV指令為數(shù)據(jù)傳送指令操作符,ADD指令為加法指令操作符,三條指令皆為雙操作數(shù)指令。第一、二條指令A(yù)X、BX皆為目的操作數(shù)
6、地址,為寄存器尋址方式。第三條指令中,AX為目的操作數(shù)地址,BX為源操作數(shù)地址。源地址和目的地址皆為寄存器尋址方式,圖形表示: 執(zhí)行:1234HAX 5678HBX (AX)+(BX) AX 執(zhí)行后:(AX)= 68ACH,(BX)= 5678H,3.1.4 寄存器間接尋址,寄存器間接尋址方式中,寄存器的內(nèi)容為操作數(shù)的偏移地址EA,操作數(shù)在存儲(chǔ)器中。 匯編格式:R 功能:操作數(shù)存放在存儲(chǔ)器,寄存器R存放操作數(shù)的偏移地址EA,偏移地址EA計(jì)算方法如下,EA,SISI作間址寄存器。 DIDI作間址寄存器。 BXBX作間址寄存器。 BPBP作間址寄存器,以SI、DI、BX為間址時(shí),默認(rèn)的段地址寄存為
7、DS;以BP為間址時(shí),默認(rèn)的段地址寄存為SS; 只有SI、DI、BX和BP可作間址寄存器,例3.4:指令操作例:MOV AX,SI 若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H,則指令執(zhí)行后,(AX)=3344H,3.1.5 變址尋址,變址尋址方式操作數(shù)的偏移地址EA為寄存器的內(nèi)容加位移量,操作數(shù)在存儲(chǔ)器中。 匯編格式:XR(X表示位移量,是8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù)) 功能:操作數(shù)存放在存儲(chǔ)器,寄存器R的內(nèi)容加位移量X為操作數(shù)的偏移地址EA。 圖形表示如下,偏移地址EA計(jì)算方法如下,例3.5: MOV AX, BX+8 M
8、OV CX, TABLESI MOV AX, BP+1000H ; 默認(rèn)段寄存器為SS 指令操作例:MOV AX,DATABX 若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H 則物理地址 = 60000H + 1000H + 2A00H = 63A00H,指令執(zhí)行后:(AX)=5566H,MOV AX,DATABX,3.1.6 基址變址尋址,基址變址尋址方式中,操作數(shù)的偏移地址EA是指令中基址寄存器內(nèi)容、變址寄存器內(nèi)容、位移量三項(xiàng)之和,操作數(shù)在存儲(chǔ)器中。 匯編格式:XBRIR 功能:操作數(shù)存放在存儲(chǔ)器,BR的內(nèi)容加
9、IR的內(nèi)容加位移量X是操作數(shù)的偏移地址EA。 圖形表示,由基址寄存器(BX或BP)給出 基址尋址方式 由變址寄存器(SI或DI)給出 變址尋址方式 同一組內(nèi)的寄存器不能同時(shí)出現(xiàn),操作數(shù)偏移地址EA計(jì)算方法如下,例3.6:MOV AX,DATADIBX 若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H,則指令執(zhí)行后:(AH)=83021H, (AL)=83020H,使用基址-變址尋址方式可以很方便地訪問(wèn)二維數(shù)組,基址寄存器,數(shù)組首地址,變址寄存器,數(shù)組元素行址,位移量,數(shù)組元素列址,偏移地址,二維數(shù)組例:內(nèi)存圖示(按行存儲(chǔ),行位移地址,行內(nèi)元素下標(biāo),3
10、.1.7 隱含尋址,指令操作數(shù)是隱含的,在指令中未顯式地指明。 例:MUL BL 指令隱含了被乘數(shù)AL及乘積AX 類(lèi)似的指令還有:DIV、CBW、MOVS等,AL)(BL)AX,3.1.8 I/O 端口尋址,直接端口尋址 可以對(duì)0255的端口編號(hào)進(jìn)行尋址 間接端口尋址 用寄存器DX的內(nèi)容來(lái)指定端口地址,可以對(duì) 編號(hào)為065535的端口進(jìn)尋址。 只能用輸入指令I(lǐng)N或輸入指令OUT來(lái)訪問(wèn)I/O 端口,3.1.9 跨段問(wèn)題,按前述規(guī)定:若選用BP作間址寄存器、變址寄存器或基址寄存器,則操作數(shù)在堆棧段,操作數(shù)的物理地址PA由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址EA相加后形成;否則,操作數(shù)在數(shù)據(jù)段,
11、操作數(shù)的物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移EA相加后形成。該規(guī)定為系統(tǒng)默認(rèn)狀態(tài)。當(dāng)要否定默認(rèn)狀態(tài),到非約定段尋找操作數(shù)時(shí),必須用跨段前綴指明操作數(shù)的段寄存器名。 匯編格式:段寄存器名:操作數(shù)地址 功能:段寄存器名指明操作數(shù)屬哪個(gè)段,例3.9 跨段前綴示例,MOVAX,DS:BP MOVCX,SS:SI 該例中,DS:,SS:均為跨段前綴,此時(shí)默認(rèn)狀態(tài)無(wú)效,操作數(shù)的物理地址PA由段寄存器內(nèi)容左移4位加偏移EA形成。上述2條指令的源操作數(shù)物理地址分別為: PA1 =(DS)左移4位+BP PA2 =(SS)左移4位+SI,小結(jié),指令由( )和( )構(gòu)成,如何取得操作數(shù)稱(chēng)為(,操作碼
12、,操作數(shù),尋址方式,尋址方式可分為,立即尋址,直接尋址,變址尋址,寄存器尋址,基址-變址尋址,寄存器間接尋址,基址尋址,幾種尋址方式比較,8086/8088的指令系統(tǒng),指令系統(tǒng)是一臺(tái)計(jì)算機(jī)所能識(shí)別和執(zhí)行的全部指令的集合。 指令一般包括兩個(gè)部分:操作碼域和地址域。 操作碼域存放指令的操作碼,即指明該指令應(yīng)由計(jì)算機(jī)完成何種操作。 地址域確定操作數(shù)的值或地址、操作結(jié)果的地址,有的指令的地址域還指出下一條指令的地址,機(jī)器指令:計(jì)算機(jī)能識(shí)別的代碼,機(jī)器指令是由二進(jìn)制數(shù)組成的。 例如:ADD CL,BH 指令格式為:0000001011001111 PUSHAX 機(jī)器指令為:01010000 匯編語(yǔ)言:匯
13、編語(yǔ)言是一種符號(hào)語(yǔ)言,用助記符表示操作碼,用符號(hào)或符號(hào)地址表示操作數(shù)或操作數(shù)地址,它與機(jī)器指令是一一對(duì)應(yīng)的。 匯編程序:MASM.EXE將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言,即目標(biāo)程序,3.2 數(shù)據(jù)傳送類(lèi)指令,3.2.1 通用數(shù)據(jù)傳送指令 3.2.2 堆棧操作指令 3.2.3 標(biāo)志寄存器傳送指令 3.2.4 地址傳送指令 3.2.5 輸入輸出指令,3.2.1 通用數(shù)據(jù)傳送指令,1傳送指令MOV 2數(shù)據(jù)交換指令XCHG 3查表轉(zhuǎn)換指令 XLAT,1傳送指令MOV 語(yǔ)句格式:MOV OPD,OPS 功能:將源操作數(shù)傳送入目的地址,源地址內(nèi)容不變。即(OPS)OPD。 下圖描述了MOV指令在傳送數(shù)據(jù)時(shí)允許
14、傳送的路徑及類(lèi)型,MOV指令所允許的數(shù)據(jù)傳送路徑及類(lèi)型,MOV指令使用規(guī)則,1) IP不能作目的寄存器 2) 不允許memmem 3) 不允許segregsegreg 4) 立即數(shù)不允許作為目的操作數(shù) 5) 不允許segreg立即數(shù) 6) 源操作數(shù)與目的操作數(shù)類(lèi)型要一致,幾個(gè)不能傳送的解決辦法:用AX作橋梁 存儲(chǔ)器存儲(chǔ)器: MOV AX,MEM1 MOV MEM2,AX 段寄存器段寄存器: MOV AX,DS MOV ES,AX 段寄存器立即數(shù): MOV AX,DATA MOV DS,AX,例:存儲(chǔ)器與寄存器間數(shù)據(jù)傳送,MOV AX,BUF ;BUF是變量,源操作數(shù)為直接尋址 MOV BH,D
15、I ;源操作數(shù)為寄存器間接尋址 MOV DI,ES:3SI ;源操作數(shù)為變址尋址,使用跨段 前綴 MOV BP,3BX+SI;源操作數(shù)為基址-變址尋址 MOV BUFA,DL ;BUFA是一字節(jié)變量 MOV BP,AX ;使用SS段寄存器 MOV DS:BP,DL;使用跨段前綴 MOV BUF,DS ;BUF是個(gè)字變量,2數(shù)據(jù)交換指令XCHG,語(yǔ)句格式:XCHG OPD,OPS 功能:將源地址與目的地址中的內(nèi)容互換。即(OPD)OPS,(OPS)OPD。 兩操作數(shù)中必須有一個(gè)在寄存器中; 操作數(shù)不能為段寄存器和立即數(shù); 源和目地操作數(shù)類(lèi)型要一致。 例: MOVAX,5678H ;(AX)=56
16、78H MOVBX,0FFFFH ;(BX)=0FFFFH XCHG AX,BX (AX)=0FFFFH ,( BX)=5678H,3換碼指令/查表指令 XLAT,語(yǔ)句格式:XLAT OPS或XLAT 功能:將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中的數(shù)據(jù)送AL寄存器。即(BX+AL)AL,3.2.2 堆棧操作指令,1進(jìn)棧指令PUSH 2出棧指令POP,什么是堆棧? 按“后進(jìn)先出(LIFO)”方式工作的存儲(chǔ)區(qū)域。堆棧以字為單位進(jìn)行壓入/彈出操作。 為什么要設(shè)置堆棧? 為什么要按 “后進(jìn)先出”方式工作? 參見(jiàn)下圖,規(guī)定由SS指示堆棧段的段基址,堆棧指針SP始終指向堆棧的頂部,SP的初值規(guī)定
17、了所用堆棧區(qū)的大小。堆棧的最高地址叫棧底,SP,SS,堆棧段,進(jìn)棧方向,退棧方向,棧底,棧頂,低地址,高地址,壓棧指令 PUSH src ; src為16位操作數(shù) 例:PUSHAX;將AX內(nèi)容壓棧 執(zhí)行操作:(SP)-1高字節(jié)AH (SP)-2低字節(jié)AL (SP)(SP)- 2,設(shè)(AX)=1020H,執(zhí)行示意圖如下,低地址,存儲(chǔ)區(qū) (SS段,執(zhí)行前 (AX)=1020H,SP,存儲(chǔ)區(qū) (SS段,進(jìn)棧方向,執(zhí)行后,20H,10H,AL,AH,PUSH AX指令執(zhí)行示意圖,SP)-2,SP,高地址,低地址,高地址,SP)-1,壓棧指令的格式為: PUSH reg PUSH mem/reg PUS
18、H segreg 例如: PUSH AX PUSH BX PUSH DS,注意進(jìn)棧方向是高地址向低地址發(fā)展,彈出指令 POPdest 例:POPBX;將棧頂內(nèi)容彈至BX 執(zhí)行操作:(BL)(SP) (BH)(SP)+1 (SP)(SP)+2,POP BX 的執(zhí)行示意圖如下圖所示,POP BX指令執(zhí)行示意圖,堆棧指令使用時(shí)應(yīng)注意幾點(diǎn): 堆棧操作總是按字進(jìn)行 一般不能從棧頂彈出一個(gè)字給CS 堆棧指針為SS:SP,SP永遠(yuǎn)指向棧頂 SP自動(dòng)進(jìn)行增減量2,3.2.3 標(biāo)志寄存器傳送指令,1標(biāo)志送AH指令LAHF 2AH送標(biāo)志指令SAHF 3標(biāo)志寄存器進(jìn)棧指令PUSHF 4標(biāo)志寄存器出棧指令POPF,標(biāo)
19、志寄存器,1標(biāo)志送AH指令LAHF,語(yǔ)句格式:LAHF 功能:將標(biāo)志寄存器的低8位送入AH寄存器。 即(FLAGS)7-0AH。該指令的執(zhí)行對(duì)標(biāo)志位無(wú)影響。 例:標(biāo)志寄存器傳送。 執(zhí)行前:(FLAGS)=0485H,(AX)=0FFFFH 執(zhí)行指令:LAHF (AX)=,2AH送標(biāo)志指令SAHF,語(yǔ)句格式:SAHF 功能:將AH的內(nèi)容送入標(biāo)志寄存器的低8位,高8位不變。即(AH) FLAGS7-0.。 從該指令功能可看出,SAHF為L(zhǎng)AHF的逆過(guò)程。 問(wèn)題:將標(biāo)志ZF置0,3標(biāo)志寄存器進(jìn)棧指令PUSHF,語(yǔ)句格式:PUSHF 功能:將標(biāo)志寄存器的內(nèi)容壓入堆棧。即(FLAGS)(SP,4標(biāo)志寄存
20、器出棧指令POPF,功能: 將棧頂內(nèi)容彈出送入標(biāo)志寄存器中。即(SP)FLAGS。 POPF指令與PUSHF指令互為逆過(guò)程,例:將標(biāo)志寄存器的單步標(biāo)志TF置位。 PUSHF ;(FLSGS)(SP) POP AX ;(SP)AX OR AX, 0100H;設(shè)置D8=TF=1 PUSH AX ;(AX)(SP) POPF ;(SP)FLAGS,即(AX)FLAGS,3.2.4 地址傳送指令,1傳送偏移地址指令 LEA 2傳送偏移地址及數(shù)據(jù)段首址指令LDS 3傳送偏移地址及附加數(shù)據(jù)段指令LES,1傳送偏移地址指令 LEA,語(yǔ)句格式: LEA OPD,OPS 功能:將源操作數(shù)的有效地址即16位偏移地
21、址傳送到目的寄存器中。 例:主存偏移地址的獲取。 MOV BX,0100H ;(BX)= 0100H MOV SI,0210H ;(SI)= 0210H LEA BX,1234HBXSI ;(BX)= ,注意以下兩條指令差別: LEA BX,BUFFER MOV BX,BUFFER 前者表示將符號(hào)地址為BUFFER的存儲(chǔ)單元的偏侈地址取到 BX中; 后者表示將BUFFER存儲(chǔ)單元中的內(nèi)容取到 BX中,2傳送偏移地址及數(shù)據(jù)段首址指令LDS,語(yǔ)句格式:LDS OPD,OPS 功能:將主存中指定字單元數(shù)據(jù)送入指定存儲(chǔ)器,下一字單元數(shù)據(jù)送DS寄存器。即(OPS)OPD,(OPS+2)DS,例 : (D
22、S)=C000H, (C0010H)=80H, (C0011H)=01H, (C0012H)=00H, (C0013H)=20H,執(zhí)行:LDS SI,0010H,則(SI)= ?,(DS)= ,SI)=0180H,(DS)=2000H,3傳送偏移地址及附加數(shù)據(jù)段指令LES,語(yǔ)句格式:LES OPD,OPS 功能:將主存某字單元內(nèi)容送指定寄存器。即(OPS)OPD,(OPS+2)ES,3.2.5 輸入輸出(I/O)指令,1輸入指令I(lǐng)N 2輸出指令OUT 只限于用累加器AL或AX來(lái)傳送信息。 功能: (累加器)I/O端口,1輸入指令I(lǐng)N,輸入指令用來(lái)從指定的外設(shè)寄存器取信息送入累加器。它有四種形式
23、: (1)語(yǔ)句格式:INAL,PORT 功能:(PORT)AL;端口號(hào)0255 (2)語(yǔ)句格式:INAX,PORT 功能:(PORT)AX (3)語(yǔ)句格式:INAL,DX 功能:(DX)AL; DX表示的端口范圍達(dá)64K (4)語(yǔ)句格式:INAX,DX 功能:(DX)AX,2輸出指令OUT,輸出指令用來(lái)把累加器的內(nèi)容送往指定的外設(shè)存儲(chǔ)器,它有四種形式: (1)語(yǔ)句格式:OUT PORT,AL 功能:(AL)PORT (2)語(yǔ)句格式:OUT PORT,AX 功能:(AX)PORT (3)語(yǔ)句格式:OUT DX,AL 功能:(AL)DX (4)語(yǔ)句格式:OUT DX,AX 功能:(AX)DX,3.
24、3 算術(shù)運(yùn)算類(lèi)指令,3.3.1 加法指令 3.3.2 減運(yùn)算指令 3.3.3 乘運(yùn)算指令 3.3.4 除運(yùn)算指令 3.3.5 符號(hào)擴(kuò)展指令 3.3.6 十進(jìn)制調(diào)整指令,3.3.1 加法指令,1加1指令 INC 2加指令A(yù)DD 3帶進(jìn)位加指令A(yù)DC,1加1指令 INC 語(yǔ)句格式:INC OPD 功能:將目的操作數(shù)加1,結(jié)果送目的地址。即(OPD)+1OPD。 INC指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是寄存器或存儲(chǔ)器操作數(shù)。 如:INC BX,即(BX)+1BX。 加1指令可用于對(duì)計(jì)數(shù)器和地址指針進(jìn)行調(diào)整。 注:本指令不影響CF標(biāo)志,2加指令 ADD 語(yǔ)句格式:ADD OPD, OPS 功能:將目
25、的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,源地址的內(nèi)容不改變。 即(OPD)+(OPS)OPD。 例: ADD AL,30H ADDAX,BX+20H ADDCX,SI ADDDI,200H ADD指令對(duì)標(biāo)志位(指狀態(tài)標(biāo)志)都有影響,3帶進(jìn)位加指令A(yù)DC 語(yǔ)句格式:ADC OPD,OPS 功能:將目的操作數(shù)加源操作數(shù)再加進(jìn)位標(biāo)志位CF,結(jié)果送目的地址。 即(OPD)+(OPS)+ CF OPD。 例:無(wú)符號(hào)雙字加法運(yùn)算。 MOVAX,4652H;(AX)=4652H ADDAX,0F0F0H;(AX)=3742H,CF=1 MOVDX,0234H;(DX)=0234H ADCDX,0F0F0
26、H;(DX)=0F325H,CF=0,ADD/ADC對(duì)條件標(biāo)志位(CF/OF/ZF/SF)的影響,CF位表示無(wú)符號(hào)數(shù)相加的溢出。 OF位表示帶符號(hào)數(shù)相加的溢出,1 結(jié)果為負(fù) 0 否則,SF,1 結(jié)果為0 0 否則,ZF,1 和的最高有效位有向高位的進(jìn)位 0 否則,CF,1 兩個(gè)操作數(shù)符號(hào)相同,而結(jié)果符號(hào)與之相反 0 否則,OF,3.3.2 減運(yùn)算指令,1減1指令DEC 2減指令SUB 4帶借位減指令 SBB 3求補(bǔ)指令NEG 5比較指令 CMP,1減1指令DEC 語(yǔ)句格式:DEC OPD 功能:將目的操作數(shù)減1,結(jié)果送目的地址。即(OPD)1OPD。 DEC指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是
27、寄存器或存儲(chǔ)器操作數(shù)。 如:DEC CX。即(CX)1CX。 注:本指令不影響CF標(biāo)志,2減指令SUB 語(yǔ)句格式:SUB OPD,OPS 功能:目的操作數(shù)減源操作數(shù),結(jié)果存于目的地址,源地址內(nèi)容不變。 即(OPD)(OPS)OPD 例:減法運(yùn)算。 MOVAX ,5678H;(AX)=5678H SUBAX ,1234H;(AX)=4444H MOVBX ,3354H;(BX)=3354H SUBBX ,3340H;(BX)=0014H 注:1.源和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù); 2.立即數(shù)不能作為目的操作數(shù),3帶借位減指令 SBB 語(yǔ)句格式:SBB OPD ,OPS 功能:目的操作數(shù)減源操
28、作數(shù)再減借位標(biāo)志位CF,結(jié)果送目的地址。 即(OPD)(OPS)CF OPD,4求補(bǔ)指令NEG 語(yǔ)句格式:NEG OPD 功能:將目的操作數(shù)的每一位求反(包括符號(hào)位)后加1,結(jié)果送目的地址。 等價(jià):0-OPD或0FFFFH-OPD+1; 例:求補(bǔ)運(yùn)算。 MOVAX,0FF64H NEGAL ;(AX)=0FF9CH SUBAL,9DH;(AX)=0FFFFH NEGAX ;(AX)=0001H DECAL ;(AX)=0000H NEGAX ;(AX)=0000H,SUB/SBB對(duì)標(biāo)志位(CF/OF/ZF/SF)的影響,CF=1表示無(wú)符號(hào)數(shù)減法溢出。 OF=1表示帶符號(hào)數(shù)減法溢出。 NEG指令
29、對(duì)CF/OF的影響: CF:操作數(shù)為0時(shí),求補(bǔ)的結(jié)果使CF=0,否則CF=1。 OF:字節(jié)運(yùn)算對(duì)-128求補(bǔ)或字運(yùn)算對(duì)-32768求補(bǔ)時(shí)OF=1, 否則OF=0,5比較指令 CMP,語(yǔ)句格式:CMP OPD,OPS 功能:目的操作數(shù)減源操作數(shù),結(jié)果只影響標(biāo)志位,不送入目的地址。 即(OPD)(OPS,根據(jù)標(biāo)志位來(lái)判斷比較的結(jié)果,1)根據(jù)ZF判斷兩個(gè)數(shù)是否相等。若ZF=1,則兩數(shù)相等。 2)若兩個(gè)數(shù)不相等,則分兩種情況考慮: 比較的是兩個(gè)無(wú)符號(hào)數(shù) 若CF=0,則OPDOPS; 若CF=1,則OPDOPS。 比較的是兩個(gè)有符號(hào)數(shù) 若OFSF=0,則OPDOPS; 若OFSF=1,則OPDOPS,比
30、較指令在使用時(shí),一般在其后緊跟一條條件轉(zhuǎn)移指令,判斷比較結(jié)果的轉(zhuǎn)向。 舉例:比較AL、BL、CL中帶符號(hào)數(shù)的大小,將 最小數(shù)放在AL中。 程序: CMP AL,BL ;AL和BL比較 JNG BBB ;若ALBL,則轉(zhuǎn) XCHG AL,BL ;若ALBL,則交換 BBB: CMP AL,CL ;AL和CL比較 JNG CCC ;若ALCL,則轉(zhuǎn) XCHG AL,CL ;若ALCL,則交換 CCC: HLT,3.3.3 乘運(yùn)算指令,1無(wú)符號(hào)數(shù)乘法指令MUL 2有符號(hào)乘指令I(lǐng)MUL 進(jìn)行乘法時(shí):8位8位16位乘積 16位 16位32位乘積,1無(wú)符號(hào)數(shù)乘法指令MUL,語(yǔ)句格式: MUL OPS 功能
31、: 若是字節(jié)數(shù)據(jù)相乘,(AL)與OPS相乘得到字?jǐn)?shù)據(jù)存入AX中;若是字?jǐn)?shù)據(jù)相乘,則(AX)與OPS相乘得到雙字?jǐn)?shù)據(jù),高字存入DX、低字存入AX中。 即字節(jié)乘法:(AL) (OPS) AX, 字乘法:(AX) (OPS) DX,AX 例:無(wú)符號(hào)數(shù)0A3H與11H相乘。 MOVAL,0A3H;(AL)=0A3H MOVBL, 11H;(BL)=11H MULBL ;(AX)=0AD3H,2有符號(hào)乘指令I(lǐng)MUL,語(yǔ)句格式:IMUL OPS 功能:字節(jié)乘法:(AL) (OPS)AX,字乘法:(AX) (OPS)DX、AX。 IMUL指令除計(jì)算對(duì)象是帶符號(hào)二進(jìn)制數(shù)外,其他都與MUL一樣,但計(jì)算結(jié)果不同。
32、 例:有符號(hào)數(shù)0B4H與11H相乘。 MOVAL,0B4H;(AL)=B4H MOVBL,11H;(BL)=11H IMULBL ;(AX)=0FAF4H,注意:MUL/IMUL指令中 AL(AX)為隱含的乘數(shù)寄存器; AX(DX,AX)為隱含的乘積寄存器; OPS不能為立即數(shù); 除CF和OF外,對(duì)其它標(biāo)志位無(wú)定義,乘法指令對(duì)CF/OF的影響,例:(AL) = A5H(-5B),(BL) = 11H (1) IMUL BL ; (AX) (AL)(BL) ; A511 -5B11=-060B F9F5 ; (AX) = F9F5H CF=OF=1 (2) MUL BL ; (AX) (AL)(
33、BL) ; A511= 0AF5 ; (AX) = 0AF5H CF=OF=1,3.3.4 除運(yùn)算指令,1無(wú)符號(hào)除指令DIV 2有符號(hào)除指令I(lǐng)DIV 進(jìn)行除法時(shí):16位/8位8位商 32位/16位16位商,1無(wú)符號(hào)除指令DIV 語(yǔ)句格式:DIV OPS 功能:字節(jié)除法:(AX)/(OPS) AL(商)、AH(余數(shù)) 字除法:(DX、AX)/(OPS) AX(商)、DX(余數(shù)) 例:寫(xiě)出實(shí)現(xiàn)無(wú)符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。 MOVAX,0400H;(AX)=0400H MOVBL,0B4H;(BL)=0B4H DIVBL ;商(AL)=05H,余數(shù)(AH)=7CH,注:若除數(shù)為零或AL
34、中商大于0FFH(或AX中商大于 0FFFFH),則CPU產(chǎn)生一個(gè)類(lèi)型0的內(nèi)部中斷,2有符號(hào)除指令I(lǐng)DIV 語(yǔ)句格式:IDIV OPS 功能:字節(jié)除法:(AX)/(OPS) AL(商)、AH(余數(shù)) 字除法:(DX,AX)/(OPS) AX (商)、DX(余數(shù)) 如除數(shù)為0,或字節(jié)除法時(shí)AL寄存器中的商超出-128+127的范圍,或字除法時(shí)AX寄存器中的商超出-32768+32767的范圍,則CPU產(chǎn)生一個(gè)類(lèi)型0的內(nèi)部中斷。 例:寫(xiě)出實(shí)現(xiàn)有符號(hào)數(shù)0400H /0B4H運(yùn)算的程序段。 MOVAX,0400H;(AX)=0400H MOVBX,0B4H;(BX)=0B4H IDIVBX ;(AL)
35、=0F3H,(AH)=24H,注意: 對(duì)于DIV/IDIV指令 AX(DX,AX)為隱含的被除數(shù)寄存器。 AL(AX)為隱含的商寄存器。 AH(DX)為隱含的余數(shù)寄存器。 OPS不能為立即數(shù)。 對(duì)所有條件標(biāo)志位均無(wú)定義,除法運(yùn)算要求被除數(shù)字長(zhǎng)是除數(shù)字長(zhǎng)的兩倍,若不滿足則需對(duì)被除數(shù)進(jìn)行擴(kuò)展,否則產(chǎn)生錯(cuò)誤; 對(duì)于無(wú)符號(hào)數(shù)除法擴(kuò)展,只需將AH或DX清零即可; 對(duì)有符號(hào)數(shù)而言,則是符號(hào)位的擴(kuò)展??墒褂孟旅娼榻B的符號(hào)擴(kuò)展指令CBW和CWD,關(guān)于除法操作中的字長(zhǎng)擴(kuò)展問(wèn)題,3.3.5 符號(hào)擴(kuò)展指令,1字節(jié)轉(zhuǎn)換成字指令CBW 2將字轉(zhuǎn)換成雙字指令CWD,1字節(jié)轉(zhuǎn)換成字指令CBW 語(yǔ)句格式:CBW 功能:將AL
36、中的符號(hào)位數(shù)據(jù)擴(kuò)展至AH。 例:將字節(jié)數(shù)據(jù)擴(kuò)展成字?jǐn)?shù)據(jù)。 MOV AL,0A5H ;(AL)=0A5H CBW ;(AX)=0FFA5H ADDAL,70H ;(AL)=25H CBW ;(AX)=0025H,2將字轉(zhuǎn)換成雙字指令CWD 語(yǔ)句格式:CWD 功能:將AX中的符號(hào)位數(shù)據(jù)擴(kuò)展至DX 。 例:將字?jǐn)?shù)據(jù)擴(kuò)展成雙字?jǐn)?shù)據(jù)。 MOVDX, 0 ;(DX)=0 MOVAX, 0FFABH ;(AX)=0FFABH CWD ;(DX)=0FFFFH (AX)=0FFABH,例: 寫(xiě)出34H25H的程序段,MOV AL,34H MOV BL,25H CBW ; AL的符號(hào)擴(kuò)展到AH IDIV BL
37、; 0034H25H,結(jié)果為 ; (AH)=0FH, (AL)=01H,3.3.6 十進(jìn)制調(diào)整指令,1壓縮BCD碼調(diào)整指令 2非壓縮BCD碼調(diào)整指令,BCD碼本質(zhì)上是十進(jìn)制數(shù),即應(yīng)遵循逢十進(jìn)一的規(guī)則。而計(jì)算機(jī)是按二進(jìn)制(十六進(jìn)制)進(jìn)行運(yùn)算,并未按十進(jìn)制規(guī)則進(jìn)行運(yùn)算,1)壓縮BCD碼加法調(diào)整DAA,兩個(gè)壓縮BCD碼相加結(jié)果在AL中,通過(guò)DAA調(diào)整得到一個(gè)正確的壓縮BCD碼. 指令操作(調(diào)整方法): 若AL的低4位9 或 AF=1 則(AL)(AL)+6,AF1 若AL的高4位9 或 CF=1 則(AL)(AL)+60H,CF1 只對(duì)AL的內(nèi)容進(jìn)行調(diào)整,對(duì)AH無(wú)影響; DAA指令應(yīng)緊跟在ADD或A
38、DC指令之后,例: 0100 1000 48H MOV AL,48H + 0111 0100 74H MOV BL,74H 1011 1100 BCH ADD AL,BL + 0110 0110 66H DAA 1 0010 0010 1 22H (進(jìn)位) (進(jìn)位) 執(zhí)行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令執(zhí)行加66H調(diào)整,最后結(jié)果為: (AL)=22H, CF=1, AF=1,不正確的和,2)壓縮BCD碼減法的十進(jìn)制調(diào)正指令DAS 對(duì)AL中由兩個(gè)壓縮BCD碼相減的結(jié)果進(jìn)行調(diào)整。調(diào)整操作為,若AL的低4位9 或 AF=1,則: AL(AL)-6, 且AF1 若AL的高
39、4位9 或 CF=1,則: AL(AL)-60H,且CF1 只對(duì)AL的內(nèi)容進(jìn)行調(diào)整,對(duì)AH無(wú)影響; DAS指令要求跟在減法指令之后,2非壓縮BCD碼調(diào)整指令,1)加法的非壓縮BCD碼調(diào)整指令A(yù)AA (2)減法的非壓縮BCD碼調(diào)整指令A(yù)AS (3)乘法的非壓縮BCD碼調(diào)整指令A(yù)AM (4)除法的非壓縮BCD碼調(diào)整指令A(yù)AD,1)加法的非壓縮BCD碼調(diào)整指令A(yù)AA 語(yǔ)句格式:AAA 功能:如果AL的低4位大于9 或(AF)=1,則: (AL)=(AL)+6 (AH)=(AH)+1 (AF)=(CF)=1 且AL高4位清零。 否則:(CF)=(AF)=0 AL高4位清零。 AAA指令只影響AF和CF
40、,其余標(biāo)志無(wú)定義。 AAA指令應(yīng)緊跟在ADD或ADC指令之后,例:計(jì)算89 0000 1000 +0000 1001 0001 0001 11 結(jié)果應(yīng)為17,而計(jì)算機(jī)相加為11,原因在于運(yùn)算過(guò)程中,如遇到低4位往高4位產(chǎn)生進(jìn)位時(shí)(此時(shí)AF=1)是按逢十六進(jìn)一的規(guī)則,但BCD碼要求逢十進(jìn)一,因此只要產(chǎn)生進(jìn)位,個(gè)位就會(huì)少6,這就要進(jìn)行加6調(diào)正,這個(gè)1代表了16,而實(shí)際上僅應(yīng)為10,即多進(jìn)了6,2)非壓縮BCD碼減法的十進(jìn)制調(diào)正指令A(yù)AS 對(duì)AL中由兩個(gè)非壓縮的BCD碼相減的結(jié)果進(jìn)行調(diào)整。調(diào)整操作為: 若AL的低4位9 或 AF=1,則: AL(AL)-6,AH(AH)-1,AF1 AL(AL) (
41、BH)=0F4H=11110100B MOVCL, 2 ;(CL)=2 SARBH, CL ;(BH)=0FDH=11111101B ;(CF)=0 該例語(yǔ)句“SARBH,CL”實(shí)際上完成了(BH)BH的運(yùn)算,所以,用SAR指令可以實(shí)現(xiàn)對(duì)有符號(hào)數(shù)除2n的運(yùn)算(n為移位次數(shù),3邏輯右移指令SHR 語(yǔ)句格式:SHR OPD,1或SHR OPD,CL 功能:將(OPD)向右移動(dòng)CL規(guī)定的次數(shù),最高位補(bǔ)入相應(yīng)個(gè)數(shù)的0,CF的內(nèi)容為最后移入位的值,算術(shù)移位把操作數(shù)看做有符號(hào)數(shù); 邏輯移位把操作數(shù)看做無(wú)符號(hào)數(shù)。 移位位數(shù)放在CL寄存器中,如果只移1位,也可以直接寫(xiě)在指令中。例如: MOV CL,4 SHR
42、 AL,CL ;AL中的內(nèi)容右移4位影響C,P,S,Z,O 標(biāo)志。 結(jié)果未溢出時(shí): 左移1位操作數(shù)*2 右移1位操作數(shù)/2,例:把AL中的數(shù)x乘10 因?yàn)?0=8+2=23+21,所以可用移位實(shí)現(xiàn)乘10操作。程序如下: SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10 x,4循環(huán)左移指令ROL 語(yǔ)句格式:ROL OPD,1 或 ROL LPD,CL 功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向左移動(dòng)CL規(guī)定的次數(shù)。CF的內(nèi)容為最后移入位的值,5循環(huán)右移指令ROR 語(yǔ)句格式:
43、 ROR OPD,1 或 ROR OPD,CL 功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向右移動(dòng)CL規(guī)定的次數(shù),CF的內(nèi)容為最后移入位的值,6帶進(jìn)位的循環(huán)左移指令RCL 語(yǔ)句格式: RCL OPD, 1 或 RCL OPD,CL 功能:將目的操作數(shù)連同CF標(biāo)志一起向左循環(huán)移動(dòng)CL規(guī)定的次數(shù),7帶進(jìn)位的循環(huán)右移指令RCR 語(yǔ)句格式:RCR OPD,1或RCR OD,CL 功能:將目的操作數(shù)連同CF標(biāo)志一起向右循環(huán)移動(dòng)所規(guī)定的次數(shù),循環(huán)移位舉例,例1:將AL的高4位與低4位互換。 MOV CL,4 ROL AL,CL,例2: MOV CL, 8 ROR BX, CL ROR
44、 AX, CL MOV BH, AH MOV AH, 0 問(wèn)題:此程序段的功能是什么,將(AX,BX)組成的32位數(shù)右移8位,最高8位填0,3.5 串操作類(lèi)指令,串操作指令 : 數(shù)據(jù)傳送類(lèi)指令每次只能傳送一個(gè)數(shù)據(jù),若要傳送大批數(shù)據(jù)就需要重復(fù)編程,這樣就浪費(fèi)了大量的時(shí)間和空間。為此8086提供了一組處理主存中連續(xù)存放數(shù)據(jù)串的指令,這就是串操作指令,3.5 串操作指令,串:順序放在內(nèi)存中的一組相同類(lèi)型的數(shù)據(jù); 串操作:對(duì)串中的元素進(jìn)行相同的操作; 串操作的尋址方式: 源操作數(shù)指針DS:SI(DS可超越) 目的操作數(shù)指針ES:DI 每次串操作后: 串操作指令自動(dòng)修改SI和DI字節(jié)1,字2。DF標(biāo)志決
45、定。(注意:退出串操作后,指針指向最后操作的元素的下一個(gè)元素); 可完成兩個(gè)存儲(chǔ)單元之間的傳送和比較操作(也僅是串指令可以,串指令使用的一般方法,設(shè)置源串地址,設(shè)置目標(biāo)串地址,設(shè)置串長(zhǎng)度,設(shè)置操作方向DF,串指令,MOV SI, 源串首地址 (或LEA SI, 源串,MOV DI, 目的串首地址 (或LEA DI, 目的串,MOV CX, 串長(zhǎng)度,CLD(或STD,串指令,1傳送指令MOVS 語(yǔ)句格式: MOVSB字節(jié)串傳送 MOVSW字串傳送 功能:將以SI為指針的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)傳送至以DI為指針的目的地址中去,并自動(dòng)修改指針,使之指向下一個(gè)字節(jié)(或字)存儲(chǔ)單元。
46、即:(DS:SI) ES:DI。 當(dāng)DF=0時(shí),(SI)和(DI)增量。 當(dāng)DF=1時(shí),(SI)和(DI)減量,2串比較指令CMPS 語(yǔ)句格式: CMPSB字節(jié)串比較 CMPSW字串比較 功能:將SI所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)與DI所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。 即:(SI)(DI)。 修改串指針,使之指向串中的下一個(gè)元素。 當(dāng)DF=0時(shí),(SI)和(DI)增量。當(dāng)DF=1時(shí), (SI)和(DI)減量,3串搜索指令SCAS 語(yǔ)句格式: SCASB字節(jié)串搜索 SCASW字串搜索 功能:AL(字節(jié))或 AX(字)
47、中的內(nèi)容與DI所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存, 即: 字節(jié)操作:(AL)(DI), 字操作:(AX)(DI)。 修改指針使之指向串中的下一個(gè)元素。 當(dāng)DF=0時(shí),(DI)增量。 當(dāng)DF=1時(shí),(DI)減量,4從源串中取數(shù)指令LODS 語(yǔ)句格式: LODSB從字節(jié)串中取數(shù) LODSW從字串中取數(shù) 功能:將SI所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)取出來(lái)送入AL(或AX)中。 即: 字節(jié)操作:(SI)AL, 字操作:(SI)AX。 修改指針SI,使它指向串中的下一個(gè)元素。 當(dāng)DF=0時(shí),(SI)增量。 當(dāng)DF=1時(shí),(SI)減量,5
48、往目的串中存數(shù)指令STOS 語(yǔ)句格式: STOSB往字節(jié)串中存數(shù) STOSW往字串中存數(shù) 功能:將AL或AX中的數(shù)據(jù)送入DI所指的目的串中的字節(jié)(或字)存儲(chǔ)單元中。 即: 字節(jié)操作:(AL)DI, 字操作:(AX)DI。 修改指針DI,使之指向串中的下一個(gè)元素。 當(dāng)DF=0時(shí),(DI)增量。 當(dāng)DF=1時(shí),(DI)減量,重復(fù)前綴 有的串操作指令前面可加上重復(fù)前綴REP。當(dāng)使用REP前綴時(shí),該指令重復(fù)執(zhí)行,重復(fù)執(zhí)行次數(shù)由CX決定(帶有REP前綴的串操作指令每執(zhí)行一次,CX自動(dòng)減1)。 重復(fù)前綴包括: REP CX0 時(shí)重復(fù)執(zhí)行 REPE/REPZ CX0 且 ZF=1時(shí)重復(fù)執(zhí)行 REPNE/RE
49、PNZ CX0 且 ZF=0時(shí)重復(fù)執(zhí)行,串傳送指令使用舉例,例1:用串傳送指令實(shí)現(xiàn)200個(gè)字節(jié)的數(shù)據(jù)傳送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB,例2:把從A000H開(kāi)始的2KB內(nèi)存單元清零。 程序段如下: MOV DI,0A000H MOV AX,0 MOV CX,1024 CLD REP STOSW,例3:把1000H開(kāi)始的100個(gè)存儲(chǔ)單元填入 ASCII碼2AH(即*號(hào))。 程序段如下: MOV DI, 1000H ; 首地址 MOV AL, 2AH ;* MOV CX, 100 ; 重復(fù)執(zhí)行100次 CLD ; 增量修改DI
50、REPSTOSB,例4:用串操作指令代替如下指令: 1) MOV AL,SI INC SI 2) MOV ES:DI,AX INC DI INC DI,3.6 控制轉(zhuǎn)移類(lèi)指令,3.6.1 條件轉(zhuǎn)移指令 3.6.2 無(wú)條件轉(zhuǎn)移指令 3.6.3 循環(huán)指令 3.6.4 子程序調(diào)用指令 3.6.5 中斷指令,3.6.1 條件轉(zhuǎn)移指令,1單個(gè)標(biāo)志位條件轉(zhuǎn)移指令 2無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令 3. 有符號(hào)數(shù)條件轉(zhuǎn)移指令 它們都有通用的語(yǔ)句格式和功能。 語(yǔ)句格式:標(biāo)號(hào): 操作符 標(biāo)號(hào) 功能:如果條件滿足,則(IP)位移量IP,1單個(gè)標(biāo)志位條件轉(zhuǎn)移指令,2無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令,例:比較無(wú)符號(hào)數(shù)大小,將較大的數(shù)存放A
51、X寄存器。 CMPAX, BX ;(AX)(BX) JNBNEXT ;若AX=BX,轉(zhuǎn)移到NEXT XCHGAX,BX ;若AXBX,交換 NEXT,3. 有符號(hào)數(shù)條件轉(zhuǎn)移指令,例:比較有符號(hào)數(shù)大小,將較大的數(shù)存放在AX寄存器。 CMPAX,BX ;(AX)(BX) JNLNEXT ;若AX=BX,轉(zhuǎn)移到 ; NEXT XCHG AX,BX ;若AXBX,交換 NEXT,MOVBX, 12FAH MOVCH, 4 ; CH做循環(huán)計(jì)數(shù)器 ROT: MOVCL, 4; CL做移位計(jì)數(shù)器 ROLBX, CL; 將最高4位移到低4位 MOVAL, BL ANDAL, 0FH; 取出低4位 ADDAL,
52、 30H; 轉(zhuǎn)換為ASCII碼 CMPAL, 39H; 與 9 比較 JBE DISP; 若(AL)9, 則轉(zhuǎn)顯示 ADDAL, 07H; 若(AL)9, 再加7轉(zhuǎn)為A-F DISP: MOVDL, AL; (DL)字符 MOVAH, 2 INT21H; 顯示輸出 DECCH; 4個(gè)十六進(jìn)制數(shù)顯示完否? JNZROT; 沒(méi)有, 循環(huán) MOVDL, 48H; H MOVAH, 2 INT21H; 最后顯示H,例:以十六進(jìn)制數(shù)形式顯示BX中的內(nèi)容,3.6.2 無(wú)條件轉(zhuǎn)移指令,無(wú)條件轉(zhuǎn)移指令 JMP 本指令無(wú)條件轉(zhuǎn)移到指定的目標(biāo)地址,以執(zhí)行從該地址開(kāi)始的程序段。根據(jù)設(shè)置CS、IP的方法,JMP指令分
53、成4種情況。 段內(nèi)直接轉(zhuǎn)移: JMP disp 指令中給出的8/16位的位移量加到IP。CS保持不變。 段內(nèi)間接轉(zhuǎn)移: JMP reg/mem reg/mem中的16位偏移地址送IP。CS保持不變。 段間直接轉(zhuǎn)移 JMP segment:offset 指令中給出的16位的段和16位的偏移地址送到CS和IP。 段間間接轉(zhuǎn)移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP,轉(zhuǎn)移的目標(biāo)地址由指令直接給出。指令中給出的目標(biāo)地址實(shí)際上是一個(gè)相對(duì)于IP的位移量: 位移量 轉(zhuǎn)移范圍 匯編語(yǔ)言中格式 8位 -128+127 JMP SHORT OPRD 16位 -32768+32
54、767 JMP NEAR PTR OPRD 例:JMP0120H ;直接轉(zhuǎn)向0120H JMPSHORT LP ;轉(zhuǎn)向LP JMPNEAR PTR BBB;轉(zhuǎn)向BBB 由于是段內(nèi)轉(zhuǎn)移,故轉(zhuǎn)移后CS內(nèi)容保持不變,段內(nèi)直接轉(zhuǎn)移,段內(nèi)間接轉(zhuǎn)移 轉(zhuǎn)移的目標(biāo)地址由寄存器或存儲(chǔ)單元的內(nèi)容給出。 例1:JMP SI 若(SI)=1200H,則指令執(zhí)行后,(IP)=1200H,于是轉(zhuǎn)向代碼段的偏移地址1200H處開(kāi)始執(zhí)行。 注意:目標(biāo)地址以段內(nèi)偏移的形式給出,而不是相對(duì)于IP的位移量,所以它是一個(gè)16位的操作數(shù),例2:JMP BX+DI 設(shè)指令執(zhí)行前: (DS)=3000H,(BX)=1300H, (DI)=
55、1200H,(32500H)=2350H; 則指令執(zhí)行后:(IP)=2350H 在匯編語(yǔ)言中,段內(nèi)間接尋址通常寫(xiě)成: JMPWORD PTRBX+DI 表示所取得的目標(biāo)地址是一個(gè)字,段間直接轉(zhuǎn)移 在指令中直接給出要轉(zhuǎn)移到的目的段地址和偏移地址。 例:JMP2000H:1000H 執(zhí)行時(shí),(IP)1000H,(CS)2000H 注:直接地址為符號(hào)地址時(shí),段間直接轉(zhuǎn)移指令中的符號(hào)地址前應(yīng)加操作符FAR PTR。 例:JMP FAR PTR far_label 其中的far_label為遠(yuǎn)類(lèi)型的標(biāo)號(hào),轉(zhuǎn)移的目的地址(段和偏移)在兩個(gè)相鄰的字存儲(chǔ)單元中。例如: JMPDWORD PTRSI 設(shè)指令執(zhí)行
56、前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 則指令執(zhí)行后:(IP)=1000H,(CS)=4A00H 于是轉(zhuǎn)到4B000H處開(kāi)始執(zhí)行指令。 例中的DWORD PTR表示轉(zhuǎn)移地址是一個(gè)雙字,段間間接轉(zhuǎn)移,3.6.3 循環(huán)指令,1循環(huán)指令LOOP 2相等/為零循環(huán)指令LOOPE 3不相等/不為零循環(huán)指令LOOPNE 4CX為零轉(zhuǎn)移指令JCXZ,1) LOOP 格式:LOOP label 操作:(CX)-1CX; 若(CX)0,則轉(zhuǎn)至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。 注:LOOP指令與下面的指令段等價(jià): DE
57、C CX JNZ label,2)LOOPZ/LOOPE 格式:LOOPZ label 操作:(CX)-1CX; 若(CX)0 且 ZF=1,則轉(zhuǎn)至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。 (3)LOOPNZ/LOOPNE 格式:LOOPNZ label 操作:(CX)-1CX; 若(CX)0 且 ZF=0,則轉(zhuǎn)至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令,4) CX為零轉(zhuǎn)移指令JCXZ 語(yǔ)句格式: JCXZ 標(biāo)號(hào) 功能:(CX)=0,則程序轉(zhuǎn)移(循環(huán));否則,順序執(zhí)行,例1:給1A000H開(kāi)始的256個(gè)內(nèi)存單元均減去1,若發(fā)現(xiàn)某個(gè)單元減為0則立即退出循環(huán),其后
58、的單元不再減1。 程序段如下:(邏輯地址為1A00:0000H) MOV AX, 1A00H MOV DS, AX ; 1A00H段 MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTR DI LOOPNZ GOON,例2:在8000H開(kāi)始的長(zhǎng)度為1000字節(jié)的字符串中查找S,若找到,把其偏移地址記錄在ADDR中,否則ADDR單元置為0FFFFH,MOV DI, 8000H MOV CX, 1000 MOV AL, S MOV ADDR, 0FFFFH GOON: SCASB LOOPNZ GOON JNZ DONE DEC DI MOV ADDR,
59、 DI DONE: HLT,請(qǐng)同學(xué)們寫(xiě)出程序段,3.6.4 過(guò)程調(diào)用和返回指令,過(guò)程(子程序) 一段具有特定功能的,供其它程序調(diào)用的公用程序。 特點(diǎn) 調(diào)用子程序時(shí),IP(CS)的內(nèi)容被壓入堆棧棧頂。從子程序返回時(shí),棧頂?shù)膬?nèi)容又被彈出到IP(CS)。 子程序執(zhí)行結(jié)束后一般均要返回調(diào)用程序。 一次定義,多次調(diào)用; 可帶參數(shù)調(diào)用,以完成不同的功能。 優(yōu)點(diǎn) 程序代碼短,結(jié)構(gòu)清晰,便于編程、調(diào)試、修改和閱讀。 兩條相關(guān)指令: 子程序調(diào)用指令 CALL 子程序返回指令 RET,一般格式:CALL sub ;sub為子程序的入口 根據(jù)子程序入口的尋址方式,子程序調(diào)用有四類(lèi)。 段內(nèi)直接調(diào)用 子程序的偏移地址直
60、接由CALL指令給出。 格式:CALL near_proc CALL執(zhí)行時(shí),它首先將IP內(nèi)容壓棧,然后把指令中給出的位移量加到IP上。 注:匯編以后的調(diào)用地址是相對(duì)于CALL的下一條指令的位移量。 例:CALL 0120H ;子程序偏移地址由指令給出,1)調(diào)用指令CALL,子程序的偏移地址在寄存器或存儲(chǔ)器中。 格式:CALL mem16/reg16 CALL執(zhí)行時(shí),它首先將IP內(nèi)容壓棧,然后把指定的寄存器/存儲(chǔ)器的內(nèi)容送入IP。 例: CALLBX ;子程序地址由BX給出 CALLWORD PTRSI ;子程序地址在存儲(chǔ)器中,段內(nèi)間接調(diào)用,CALL WORD PTR SI指令的操作圖示: 假定
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2021廣東省深圳市寶安區(qū)寶城小學(xué)六年級(jí)小升初語(yǔ)文綜合測(cè)試卷及答案
- 主體模板工程施工方案
- 扣盤(pán)式腳手架施工方案
- 2025年中考物理模擬試卷猜題卷3(含答案)
- 2025屆浙江省臺(tái)州市團(tuán)隊(duì)六校中考生物模擬預(yù)測(cè)題含解析
- 勞務(wù)合同保密合同范例
- 肝移植GVHD的護(hù)理
- 農(nóng)資服務(wù)代辦合同范例
- 學(xué)校秋季志愿服務(wù)計(jì)劃
- 制定有效的輪崗計(jì)劃
- 2024解析:第十章 浮力綜合應(yīng)用-講核心(解析版)
- Unit4BodylanguageUsingLanguage肢體語(yǔ)言在續(xù)寫(xiě)中的運(yùn)用課件高中英語(yǔ)人教版選擇性
- 大數(shù)據(jù)與人工智能營(yíng)銷(xiāo)(南昌大學(xué))知到智慧樹(shù)章節(jié)答案
- 《讓座》(課件)西師大版音樂(lè)二年級(jí)上冊(cè)
- 廣告創(chuàng)作與視覺(jué)傳媒考核試卷
- 2024年江西省公務(wù)員考試《行測(cè)》真題及答案解析
- 醫(yī)學(xué)裝備管理工作總結(jié)
- 2024-2025學(xué)年湖南省雅禮集團(tuán)高二(上)第一次月考數(shù)學(xué)試卷(含答案)
- 現(xiàn)代家政導(dǎo)論-課件 4.1.3認(rèn)識(shí)我國(guó)家政教育發(fā)展
- 《互聯(lián)網(wǎng)應(yīng)用新特征》課件 2024-2025學(xué)年人教版(2024)初中信息科技七年級(jí)全一冊(cè)
- 2024年部編版六年級(jí)語(yǔ)文上冊(cè)第六單元 語(yǔ)文園地六(教案)
評(píng)論
0/150
提交評(píng)論