版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Theres always more to learn, and there are always better ways to do what youve done before. DONANLD E. KNUTH第第6講講佘青山22021-10-17o8086的尋址方式的尋址方式o指令的機器碼表示方法(自學(xué))指令的機器碼表示方法(自學(xué))o8086的指令系統(tǒng)的指令系統(tǒng)內(nèi)容提要內(nèi)容提要32021-10-176大類指令系統(tǒng):l 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令l 算術(shù)運算指令算術(shù)運算指令l 邏輯運算和移位指令邏輯運算和移位指令l 字符串處理指令字符串處理指令l 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令l 處理器控制指令
2、處理器控制指令42021-10-17一、數(shù)據(jù)傳送指令(一、數(shù)據(jù)傳送指令(14條)條) 存儲器存儲器 寄存器寄存器 I/O通用數(shù)據(jù)傳送指令(通用數(shù)據(jù)傳送指令(5條)條)地址目標(biāo)傳送指令(地址目標(biāo)傳送指令(3條)條)MOV字節(jié)或字的傳送字節(jié)或字的傳送LEA裝入有效地址裝入有效地址PUSH入棧指令入棧指令LDS裝入數(shù)據(jù)段寄存器裝入數(shù)據(jù)段寄存器POP出棧指令出棧指令LES裝入附加段寄存器裝入附加段寄存器XCHG交換字或字節(jié)交換字或字節(jié)標(biāo)志傳送指令(標(biāo)志傳送指令(4條)條)XLAT表轉(zhuǎn)換表轉(zhuǎn)換LAHF標(biāo)志寄存器低字節(jié)裝入標(biāo)志寄存器低字節(jié)裝入AH輸入輸出指令(輸入輸出指令(2條)條)SAHFAH內(nèi)容裝入標(biāo)
3、志寄存器低字節(jié)內(nèi)容裝入標(biāo)志寄存器低字節(jié)IN輸入輸入PUSHF標(biāo)志寄存器入棧指令標(biāo)志寄存器入棧指令OUT輸出輸出POPF出棧,并送入標(biāo)志寄存器出棧,并送入標(biāo)志寄存器52021-10-171 1、通用數(shù)據(jù)傳送指令、通用數(shù)據(jù)傳送指令最基本的傳送指令最基本的傳送指令(MOV) 堆棧指令堆棧指令(PUSH,POP)數(shù)據(jù)交換指令數(shù)據(jù)交換指令(XCHG)表轉(zhuǎn)換指令表轉(zhuǎn)換指令(XLAT)(1)MOV傳送指令傳送指令o指令格式:指令格式: MOV 目的操作數(shù)目的操作數(shù) ,源操作數(shù),源操作數(shù)o指令功能:指令功能:實現(xiàn)實現(xiàn)CPU的的內(nèi)部寄存器之間內(nèi)部寄存器之間或或寄存器與存儲器之寄存器與存儲器之間間的數(shù)據(jù)傳送的數(shù)據(jù)
4、傳送(復(fù)制操作)復(fù)制操作)o注意:注意:MOV指令總是把源操作數(shù)復(fù)制到目的操作數(shù),而源指令總是把源操作數(shù)復(fù)制到目的操作數(shù),而源操作數(shù)的內(nèi)容保持不變操作數(shù)的內(nèi)容保持不變62021-10-17(1)MOV傳送指令傳送指令例例: MOV AL, BL; MOV DI, AX; MOV CX,1000H; MOV BL, 40 MOV WORD PTRSI,01H;AH AL BH BL AH AL BH BL CH CL DH DLCH CL DH DL 傳送的是字節(jié)還是字取決于指令中傳送的是字節(jié)還是字取決于指令中涉及的寄存器是涉及的寄存器是8位還是位還是16位位72021-10-17(1)MOV傳
5、送指令傳送指令注意:注意:o指令中至少要有一項明確說明傳送的是字節(jié)還是字指令中至少要有一項明確說明傳送的是字節(jié)還是字oIP寄存器不能用作源操作數(shù)或目的操作數(shù)寄存器不能用作源操作數(shù)或目的操作數(shù)o立即數(shù)和立即數(shù)和CS寄存器不能用作目的操作數(shù)寄存器不能用作目的操作數(shù)o除了源操作數(shù)為立即數(shù)的情況外,兩個操作數(shù)中必有一個是寄除了源操作數(shù)為立即數(shù)的情況外,兩個操作數(shù)中必有一個是寄存器,但不能都是段寄存器。即存器,但不能都是段寄存器。即MOV指令不允許存儲單元指令不允許存儲單元存存儲單元儲單元 ,也,也不允許段寄存器不允許段寄存器段寄存器段寄存器o不允許段寄存器不允許段寄存器 立即數(shù)立即數(shù)82021-10-
6、17舉例:舉例:oMOVAX, BL ; 目的操作數(shù)和源操作數(shù)的長度不一致目的操作數(shù)和源操作數(shù)的長度不一致oMOVBYTEBX, 1000 ; 目的操作數(shù)和源操作數(shù)的長度不一致目的操作數(shù)和源操作數(shù)的長度不一致oMOV2A00H, AX ; 立即數(shù)不能用作目的操作數(shù)立即數(shù)不能用作目的操作數(shù)oMOV2000H, 3000H ; 不允許存儲單元不允許存儲單元存儲單元存儲單元 oMOVBX, 1000 ; 不允許存儲單元不允許存儲單元存儲單元存儲單元 oMOVES, DS; 不允許段寄存器不允許段寄存器段寄存器段寄存器 oMOVDS, 2000H; 不允許段寄存器不允許段寄存器立即數(shù)立即數(shù)oMOV C
7、S, AX ; 不允許用不允許用MOV指令改變指令改變CS寄存器寄存器92021-10-17(1)MOV傳送指令傳送指令 幾個不能傳送的解決辦法:幾個不能傳送的解決辦法:用用AX作橋梁作橋梁o存儲器存儲器存儲器:存儲器:nMOV AX,MEM1nMOV MEM2,AXo段寄存器段寄存器段寄存器:段寄存器:nMOV AX,DSnMOV ES,AXo段寄存器段寄存器立即數(shù):立即數(shù):nMOV AX,DATAnMOV DS,AX102021-10-17(1)MOV傳送指令傳送指令應(yīng)用舉例:應(yīng)用舉例: 如何用如何用MOV指令實現(xiàn)兩個內(nèi)存字節(jié)單元內(nèi)容的交換?指令實現(xiàn)兩個內(nèi)存字節(jié)單元內(nèi)容的交換? 61H .
8、 02H1000H:2035H1000H:2045H112021-10-17(1)MOV傳送指令傳送指令應(yīng)用舉例:應(yīng)用舉例:用用MOV指令實現(xiàn)兩內(nèi)存字節(jié)單元內(nèi)容的交換指令實現(xiàn)兩內(nèi)存字節(jié)單元內(nèi)容的交換 61H . 02H1000H:2035H1000H:2045H用用直接尋址方式直接尋址方式實現(xiàn):實現(xiàn): MOV AX, 1000H MOV DS, AX MOV BL, 2035H MOV CL, 2045H MOV 2045H, BL MOV 2035H, CL HLT122021-10-17(1)MOV傳送指令傳送指令應(yīng)用舉例應(yīng)用舉例:用用MOV指令實現(xiàn)兩內(nèi)存字節(jié)單元內(nèi)容的交換指令實現(xiàn)兩內(nèi)存字
9、節(jié)單元內(nèi)容的交換 61H . 02H1000H:2035H1000H:2045H MOV AX, 1000H MOV DS, AX MOV SI , 2035H MOV DI, 2045H MOV AH, SI ;寄存器間接尋址寄存器間接尋址 MOV AL, DI MOV SI, AL MOV DI, AH HLT思考:如何用思考:如何用寄存器間接尋址寄存器間接尋址方式方式實現(xiàn)實現(xiàn)?132021-10-171 1、通用數(shù)據(jù)傳送指令、通用數(shù)據(jù)傳送指令最基本的傳送指令最基本的傳送指令(MOV) 堆棧指令堆棧指令(PUSH,POP)數(shù)據(jù)交換指令數(shù)據(jù)交換指令(XCHG)表轉(zhuǎn)換指令表轉(zhuǎn)換指令(XLAT)
10、o堆棧的定義堆棧的定義n按按“先進(jìn)后出先進(jìn)后出(FILO)”方式工作的存儲區(qū)域。方式工作的存儲區(qū)域。n堆棧堆棧以字為單位以字為單位進(jìn)行壓入彈出操作(進(jìn)行壓入彈出操作(PUSH,POP)。)。o堆棧的用途:堆棧的用途:為什么要設(shè)置堆棧?為什么要設(shè)置堆棧? P46:習(xí)題:習(xí)題10142021-10-17堆堆棧棧的的用用途途 子程序調(diào)用示意圖子程序調(diào)用示意圖轉(zhuǎn)子程序轉(zhuǎn)子程序2(b) 子程序嵌套示意圖子程序嵌套示意圖主程序主程序IPIP(下下)繼繼續(xù)續(xù)執(zhí)執(zhí)行行主主程程序序轉(zhuǎn)子程序轉(zhuǎn)子程序1返回主程序返回主程序IP執(zhí)執(zhí)行行子子程程序序 2返回子程序返回子程序1IP(下下)執(zhí)行子執(zhí)行子程序程序1繼繼續(xù)續(xù)執(zhí)
11、執(zhí)行行子子程程序序1壓棧壓棧彈出彈出(a) 主程序調(diào)子程序主程序調(diào)子程序主程序主程序IP繼繼續(xù)續(xù)執(zhí)執(zhí)行行主主程程序序執(zhí)執(zhí)行行子子程程序序轉(zhuǎn)子程序轉(zhuǎn)子程序壓棧壓棧彈出彈出返回主程序返回主程序IP(下下)152021-10-17o堆棧的增長方式:堆棧的增長方式:向上增長向上增長。棧底設(shè)在存儲器的高地址區(qū),棧底設(shè)在存儲器的高地址區(qū),堆棧地址堆棧地址由高向低由高向低增長。增長。o堆棧的最高地址叫堆棧的最高地址叫棧底棧底。oSS指示堆棧段的指示堆棧段的段基址段基址。o堆棧指針堆棧指針SP始終指向始終指向堆棧的堆棧的頂部(棧頂)頂部(棧頂),且總是指向,且總是指向偶地址單元。偶地址單元。oSP的初值規(guī)定了
12、所用堆棧區(qū)的初值規(guī)定了所用堆棧區(qū)的大小。的大小。 最后一項最后一項(SS)壓入壓入高地址高地址棧底棧底彈出彈出棧頂棧頂(SP)SP總是指向總是指向偶地址單元偶地址單元最大容最大容量量64KB段基址段基址堆堆棧棧段段低地址低地址162021-10-17(2)PUSH進(jìn)棧指令進(jìn)棧指令o指令格式:指令格式: PUSH源操作數(shù)源操作數(shù)o工作過程:工作過程:先先修改指針:修改指針: SP SP-2 后后壓入:(壓入:(SP+1, SP) 源操作數(shù)源操作數(shù)o源操作數(shù):可以是源操作數(shù):可以是16位通用寄存器、段寄存器、存儲器位通用寄存器、段寄存器、存儲器中的數(shù)據(jù)字,但中的數(shù)據(jù)字,但不能是立即數(shù)。不能是立即數(shù)
13、。舉例:舉例:PUSHAX ;將;將AX內(nèi)容壓棧內(nèi)容壓棧執(zhí)行操作:執(zhí)行操作: SP SP - 2(SP) 低字節(jié)低字節(jié)AL(SP+1) 高字節(jié)高字節(jié)AH172021-10-17(2)PUSH進(jìn)棧指令進(jìn)棧指令o舉例:舉例: 設(shè)設(shè)AX = 61 42H,執(zhí)行指令,執(zhí)行指令PUSHAX42H61HSP執(zhí)行后執(zhí)行后存儲區(qū)存儲區(qū)(SS段)段)進(jìn)棧方向進(jìn)棧方向低地址低地址高地址高地址低地址低地址存儲區(qū)存儲區(qū)(SS段)段)執(zhí)行前執(zhí)行前AX=6142HSP-2SP高地址高地址SP- -1182021-10-17(3)POP出棧指令出棧指令o指令格式:指令格式: POP目的操作數(shù)目的操作數(shù)o工作過程:工作過程:
14、先先彈出:目的操作數(shù)彈出:目的操作數(shù) (SP+1,SPSP+1,SP) 后后修改指針:修改指針: SP SP+2 SP SP+2 o目的操作數(shù):可以是目的操作數(shù):可以是16位通用寄存器、段寄存器、存儲位通用寄存器、段寄存器、存儲器中的數(shù)據(jù)字,但器中的數(shù)據(jù)字,但不能是立即數(shù)。不能是立即數(shù)。舉例:舉例:POPBX;將棧頂內(nèi)容彈至;將棧頂內(nèi)容彈至BX執(zhí)行操作:執(zhí)行操作: BL (SP) BH (SP+1+1)SP SP+2+2192021-10-17(3)POP出棧指令出棧指令o舉例:執(zhí)行指令舉例:執(zhí)行指令POPBX執(zhí)行后執(zhí)行后BX=1020HSPBX20201010低地址低地址存儲區(qū)存儲區(qū)(SS段
15、)段)執(zhí)行前執(zhí)行前20H 10HSPSP+1SP+2高地址高地址出棧方向出棧方向存儲區(qū)存儲區(qū)(SS段)段)低地址低地址高地址高地址202021-10-17堆棧操作動畫演示堆棧操作動畫演示212021-10-17堆棧指令使用時的注意事項:堆棧指令使用時的注意事項:n堆棧操作總是按堆棧操作總是按字字進(jìn)行進(jìn)行n不能從棧頂彈出一個字給不能從棧頂彈出一個字給CSn堆棧指針為堆棧指針為SS:SP,SP永遠(yuǎn)指向棧頂永遠(yuǎn)指向棧頂nSP自動進(jìn)行增自動進(jìn)行增/減量(減量( + 2, - 2)222021-10-171 1、通用數(shù)據(jù)傳送指令、通用數(shù)據(jù)傳送指令最基本的傳送指令最基本的傳送指令(MOV) 堆棧指令堆棧指
16、令(PUSH,POP)數(shù)據(jù)交換指令數(shù)據(jù)交換指令(XCHG)表轉(zhuǎn)換指令表轉(zhuǎn)換指令(XLAT)(4) XCHG交換指令交換指令 o指令格式:指令格式: XCHG 目的操作數(shù)目的操作數(shù) ,源操作數(shù),源操作數(shù)o指令功能:將寄存器的內(nèi)容與任何其他寄存器或存儲單元的內(nèi)容交換指令功能:將寄存器的內(nèi)容與任何其他寄存器或存儲單元的內(nèi)容交換o指令要求:(指令要求:(1)兩操作數(shù)中必須有一個在寄存器中;兩操作數(shù)中必須有一個在寄存器中; (2)操作數(shù))操作數(shù)不能為段寄存器和立即數(shù)不能為段寄存器和立即數(shù),不能同時為存儲單元不能同時為存儲單元; (3)源和目的操作數(shù)類型要一致。)源和目的操作數(shù)類型要一致。o舉例:舉例:
17、XCHG AX,BXXCHG 2000H,CLXCHG CX, BP232021-10-17(4) XCHG交換指令交換指令 o指令要求:指令要求:(1)兩操作數(shù)中必須有一個在寄存器中;兩操作數(shù)中必須有一個在寄存器中; (2)操作數(shù))操作數(shù)不能為段寄存器和立即數(shù)不能為段寄存器和立即數(shù),不能同時為存儲單元不能同時為存儲單元; (3)源和目地操作數(shù)類型要一致。)源和目地操作數(shù)類型要一致。例:設(shè)例:設(shè)AX=2000H,DS=3000H,BX=1800H,(,(31A00H)=2008H。 則執(zhí)行指令則執(zhí)行指令XCHG AX,BX+200H后,結(jié)果如何?后,結(jié)果如何?解:把內(nèi)存中的一個字與解:把內(nèi)存中
18、的一個字與AX中的內(nèi)容進(jìn)行交換。中的內(nèi)容進(jìn)行交換。 源操作數(shù)的物理地址源操作數(shù)的物理地址=3000H10H+1800H+200H=31A00H 指令執(zhí)行后:指令執(zhí)行后:AX=2008H,(31A00H)=2000H242021-10-171 1、通用數(shù)據(jù)傳送指令、通用數(shù)據(jù)傳送指令最基本的傳送指令最基本的傳送指令(MOV) 堆棧指令堆棧指令(PUSH,POP)數(shù)據(jù)交換指令數(shù)據(jù)交換指令(XCHG)表轉(zhuǎn)換指令表轉(zhuǎn)換指令(XLAT)(5) XLAT表轉(zhuǎn)換指令表轉(zhuǎn)換指令 o指令格式:指令格式: XLAT 轉(zhuǎn)換表轉(zhuǎn)換表 或:或:XLATo指令功能:把指令功能:把AL寄存器中的內(nèi)容轉(zhuǎn)換成存儲在存儲器表中的一
19、個數(shù)字。寄存器中的內(nèi)容轉(zhuǎn)換成存儲在存儲器表中的一個數(shù)字。o指令用途:通常用于查找表技術(shù),實現(xiàn)將一個代碼轉(zhuǎn)換為另一個代碼。指令用途:通常用于查找表技術(shù),實現(xiàn)將一個代碼轉(zhuǎn)換為另一個代碼。o指令使用步驟:指令使用步驟:(1)使用之前必須)使用之前必須先建立一個表先建立一個表,表中的,表中的內(nèi)容內(nèi)容是所需要轉(zhuǎn)換的代碼;是所需要轉(zhuǎn)換的代碼;(2)將轉(zhuǎn)換)將轉(zhuǎn)換表的起始地址裝入表的起始地址裝入BX寄存器寄存器;(3)欲查的某項與表頭地址的)欲查的某項與表頭地址的位移量位移量AL,即一張表最多包含,即一張表最多包含256個字節(jié);個字節(jié);(4)執(zhí)行)執(zhí)行XLAT指令后,根據(jù)位移量從表中查到指令后,根據(jù)位移量從
20、表中查到轉(zhuǎn)換后的代碼值轉(zhuǎn)換后的代碼值A(chǔ)L寄存器寄存器中。中。252021-10-17LED電路圖電路圖共陽共陽共陰共陰 十進(jìn)制數(shù)字十進(jìn)制數(shù)字七段顯示碼七段顯示碼十進(jìn)制數(shù)字十進(jìn)制數(shù)字七段顯示碼七段顯示碼040H512H179H602H224H778H330H800H419H918H表表3.4 十進(jìn)制數(shù)的七段顯示碼表十進(jìn)制數(shù)的七段顯示碼表(共陽極共陽極)思考:數(shù)字2的七段碼是多少?262021-10-172 2、輸入輸出指令、輸入輸出指令輸入指令輸入指令(IN): 從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字輸出指令輸出指令(OUT): 輸出數(shù)據(jù)或命令給指定的輸
21、出數(shù)據(jù)或命令給指定的I/O端口端口o在在I/O設(shè)備與微處理器之間設(shè)備與微處理器之間只能用只能用AL或或AX來傳送信息。來傳送信息。o指令功能指令功能: (累加器累加器)I/O端口端口o可以分為:直接輸入輸出指令和間接輸入輸出指令可以分為:直接輸入輸出指令和間接輸入輸出指令(1)直接輸入輸出指令)直接輸入輸出指令o指令格式:指令格式:IN AL, PORT ; 操作:操作:AL (PORT) IN AX, PORT; AX (PORT+1, PORT) OUT PORT, AL ; (PORT) AL OUT PORT, AX ; (PORT+1, PORT) AX注意:注意:PORT為輸入輸出
22、端口號,范圍為為輸入輸出端口號,范圍為0255(00HFFH)272021-10-172 2、輸入輸出指令、輸入輸出指令輸入指令輸入指令(IN):從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字從數(shù)據(jù)端口輸入數(shù)據(jù)或從狀態(tài)端口輸入狀態(tài)字輸出指令輸出指令(OUT):輸出數(shù)據(jù)或命令給指定的輸出數(shù)據(jù)或命令給指定的I/O端口端口(2)間接輸入輸出指令)間接輸入輸出指令o指令指令格式:格式: IN AL, DX; 操作:操作:AL (DX) IN AX, DX; AX (DX+1, DX) OUT DX, AL; (DX) AL OUT DX, AX; (DX+1, DX) AX 注意注意:在間接輸入輸出指令之前
23、,需將端口號送入:在間接輸入輸出指令之前,需將端口號送入DX寄存器。寄存器。282021-10-172 2、輸入輸出指令、輸入輸出指令o輸入指令輸入指令I(lǐng)N例例: INAL,80H ; AL80H端口的內(nèi)容端口的內(nèi)容IN AX,80H ; AL80H端口的內(nèi)容端口的內(nèi)容; AH81H端口的內(nèi)容端口的內(nèi)容 MOV DX, 1234H INAL,DX ; AL1234H端口的內(nèi)容端口的內(nèi)容292021-10-172 2、輸入輸出指令、輸入輸出指令o輸出指令輸出指令OUT例例: OUT85H,AL ; 85H端口端口AL內(nèi)容內(nèi)容OUT 68H,AX ; (69H,68H)AX內(nèi)容內(nèi)容MOV DX,
24、300H OUT DX, AL ; 300H端口端口AL內(nèi)容內(nèi)容 在使用在使用間接尋址間接尋址的的IN/OUT指令時,要事先用傳送指令把指令時,要事先用傳送指令把I/O端口號設(shè)置到端口號設(shè)置到DX寄存器寄存器302021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令 LEA取有效地址指令取有效地址指令 LDS將雙字指針?biāo)偷郊拇嫫骱蛯㈦p字指針?biāo)偷郊拇嫫骱虳S指令指令LES將雙字指針?biāo)偷郊拇嫫骱蛯㈦p字指針?biāo)偷郊拇嫫骱虴S指令指令o用途:傳送地址碼,比如操作數(shù)的段地址和偏移地址用途:傳送地址碼,比如操作數(shù)的段地址和偏移地址o注意注意:源操作數(shù)必須是存儲單元,目的操作數(shù)必須是源操作數(shù)必須是存儲
25、單元,目的操作數(shù)必須是16位寄位寄存器存器(段寄存器除外段寄存器除外)312021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(1)LEA取有效地址指令取有效地址指令(Load Effective Address)n指令格式指令格式:LEA 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)n指令功能指令功能:取源操作數(shù)地址的偏移量,傳送到目的操作數(shù)所在單元:取源操作數(shù)地址的偏移量,傳送到目的操作數(shù)所在單元n操作數(shù)要求操作數(shù)要求:源操作數(shù)必須是存儲單元源操作數(shù)必須是存儲單元,目的操作數(shù)必須是一個除段寄存目的操作數(shù)必須是一個除段寄存器之外的器之外的16位寄存器位寄存器。使用時要。使用時要注意與注
26、意與MOV指令的區(qū)別指令的區(qū)別。n例:例:假設(shè)假設(shè)SI=1000H,DS=5000H,(51000H)=1234HLEABX,SI ;執(zhí)行完該指令后,;執(zhí)行完該指令后,MOVBX,SI ;執(zhí)行完該指令后,;執(zhí)行完該指令后,BX=l000H(送(送地址地址)BX=1234H(送(送內(nèi)容內(nèi)容)322021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(1)LEA取有效地址指令取有效地址指令(Load Effective Address)例:例:下面兩條指令等效:下面兩條指令等效: LEA BX,BUFFER MOV BX,OFFSET BUFFERo數(shù)值返回運算符數(shù)值返回運算符OFFSET
27、,返回標(biāo)號或變量的偏移地址值,返回標(biāo)號或變量的偏移地址值oOFFSET BUFFER表示存儲器單元表示存儲器單元BUFFER的偏移地址的偏移地址o二者都可用于取存儲器單元的偏移地址,但二者都可用于取存儲器單元的偏移地址,但LEA指令可以取指令可以取動態(tài)動態(tài)的地的地址,址,OFFSET只能取只能取靜態(tài)靜態(tài)的地址。的地址。n例如:例如:LEA BX, 6DI332021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(2) LDS將雙字指針?biāo)偷郊拇嫫骱蛯㈦p字指針?biāo)偷郊拇嫫骱虳S指令指令(Load Pointer using DS)n指令格式指令格式:LDS 目的操作數(shù),源操作數(shù)目的操作數(shù),源
28、操作數(shù)n指令功能指令功能:從源操作數(shù)指定的存儲單元中,取出一個變量的:從源操作數(shù)指定的存儲單元中,取出一個變量的4字節(jié)地址指針字節(jié)地址指針,送進(jìn)一對目的寄存器。送進(jìn)一對目的寄存器。n其中其中前兩個字節(jié)前兩個字節(jié)(表示變量的(表示變量的偏移地址偏移地址)送到指令中)送到指令中指定的目的寄存器指定的目的寄存器中,中,后兩個字節(jié)后兩個字節(jié)(表示變量的(表示變量的段地址段地址)送入)送入DS寄存器寄存器n注意注意:偏移地址在:偏移地址在先先,段地址在,段地址在后后。342021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(2) LDS將雙字指針?biāo)偷郊拇嫫骱蛯㈦p字指針?biāo)偷郊拇嫫骱虳S指令指令(
29、Load Pointer using DS)n指令格式指令格式:LDS 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)n操作數(shù)要求操作數(shù)要求:源操作數(shù)必是存儲單元源操作數(shù)必是存儲單元,該單元開始的連續(xù),該單元開始的連續(xù)4個字節(jié)存?zhèn)€字節(jié)存放一個變量的地址指針。放一個變量的地址指針。目的操作數(shù)必須是目的操作數(shù)必須是16位寄存器,常用位寄存器,常用SI寄寄存器存器,但不能用段寄存器。,但不能用段寄存器。o例:設(shè)例:設(shè)DS=1200H,(12450H)=F346H,(12452H)=0A90H 請問執(zhí)行指令請問執(zhí)行指令LDS SI,450H 后,后,SI寄存器和寄存器和DS寄存器的內(nèi)容分寄存器的內(nèi)容分別是多
30、少?別是多少?SI=F346H,DS=0A90H352021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(2) LDS將雙字指針?biāo)偷郊拇嫫骱蛯㈦p字指針?biāo)偷郊拇嫫骱虳S指令指令(Load Pointer using DS)n指令功能指令功能:從源操作數(shù)指定的存儲單元中,取出一個變量的:從源操作數(shù)指定的存儲單元中,取出一個變量的4字節(jié)地址指針字節(jié)地址指針,送進(jìn)送進(jìn)一對目的寄存器一對目的寄存器。其中前兩個字節(jié)(表示變量的。其中前兩個字節(jié)(表示變量的偏移地址偏移地址)送到指令)送到指令中指定的目的寄存器中,后兩個字節(jié)(表示變量的中指定的目的寄存器中,后兩個字節(jié)(表示變量的段地址段地址)送入)
31、送入DS寄存器寄存器例:例: LDS SI, 2130H設(shè)設(shè)DS=3000H,則低地址單元,則低地址單元的兩個字節(jié)內(nèi)容送給的兩個字節(jié)內(nèi)容送給SI寄存器,寄存器,高地址單元的兩個字節(jié)內(nèi)容送給高地址單元的兩個字節(jié)內(nèi)容送給DS寄存器。寄存器。 偏移量偏移量 段基址段基址32130HSIDS32131H32132H32133H362021-10-173 3、地址目標(biāo)傳送指令、地址目標(biāo)傳送指令(3) LES將雙字指針?biāo)偷郊拇嫫骱蛯㈦p字指針?biāo)偷郊拇嫫骱虴S指令指令(Load Pointer using ES)n指令格式指令格式:LES 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)n指令功能指令功能:與:與LD
32、S指令的操作基本相同。不同的是:要將源操作數(shù)所指向指令的操作基本相同。不同的是:要將源操作數(shù)所指向的存儲單元里存放的地址指針中的的存儲單元里存放的地址指針中的段地址部分送到段地址部分送到ES寄存器寄存器中,而不是中,而不是DS寄存器,目的操作數(shù)常用寄存器,目的操作數(shù)常用DI寄存器寄存器n例:例:設(shè)設(shè)DS=0100H,BX=0020H,(01020H)=0300H,(01022H)=0500H. 執(zhí)行指令執(zhí)行指令LES DI,BX 后,后,DI=?,?,ES=?DI=0300H,ES=0500H操作數(shù)要求操作數(shù)要求:源操作數(shù)必須是存儲單元源操作數(shù)必須是存儲單元,該單元開始的連續(xù),該單元開始的連續(xù)
33、4個字節(jié)存放一個個字節(jié)存放一個變量的地址指針變量的地址指針(偏移地址在前,段地址在后偏移地址在前,段地址在后)。目的操作數(shù)必須是目的操作數(shù)必須是16位寄存器,位寄存器,常用常用DI寄存器寄存器。372021-10-174 4、標(biāo)志傳送指令、標(biāo)志傳送指令 把把標(biāo)志寄存器標(biāo)志寄存器的內(nèi)容的內(nèi)容壓入堆棧壓入堆棧(PUSHF)從從堆棧彈出堆棧彈出到到標(biāo)志寄存器標(biāo)志寄存器(POPF)舉例:舉例:PUSH AXPUSH CXPUSHF ; 保護(hù)標(biāo)志寄存器內(nèi)容這段程序要用到保護(hù)標(biāo)志寄存器內(nèi)容這段程序要用到AX, CX以及標(biāo)志位以及標(biāo)志位 POPF ; 恢復(fù)標(biāo)志寄存器內(nèi)容恢復(fù)標(biāo)志寄存器內(nèi)容POP CXPOP
34、AX注意:注意:要成對使用要成對使用PUSHF和和POPF,可對標(biāo)志寄存器進(jìn)行保存和恢復(fù)。,可對標(biāo)志寄存器進(jìn)行保存和恢復(fù)。用途:用途:(1) 常用于過程常用于過程(子程序子程序)調(diào)用、中斷服務(wù)程序,對主程序的狀態(tài)調(diào)用、中斷服務(wù)程序,對主程序的狀態(tài)(即標(biāo)志位即標(biāo)志位)進(jìn)行保護(hù)。進(jìn)行保護(hù)。 (2) 可用來改變追蹤標(biāo)志可用來改變追蹤標(biāo)志TF。382021-10-176大類指令系統(tǒng):l 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令l 算術(shù)運算指令算術(shù)運算指令l 邏輯運算和移位指令邏輯運算和移位指令l 字符串處理指令字符串處理指令l 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令l 處理器控制指令處理器控制指令392021-10-17二、算術(shù)運
35、算指令二、算術(shù)運算指令(1)算術(shù)運算指令可處理)算術(shù)運算指令可處理4種類型的數(shù):種類型的數(shù):o無符號二進(jìn)制整數(shù)無符號二進(jìn)制整數(shù)o帶符號二進(jìn)制整數(shù)帶符號二進(jìn)制整數(shù)o無符號壓縮十進(jìn)制整數(shù)無符號壓縮十進(jìn)制整數(shù)(Packed Decimal)o無符號非壓縮十進(jìn)制整數(shù)無符號非壓縮十進(jìn)制整數(shù)(Unpacked Decimal)(2)數(shù)的表示:)數(shù)的表示:o二進(jìn)制數(shù):可以是二進(jìn)制數(shù):可以是8位或位或16位。位。若是帶符號數(shù),則用補碼表示若是帶符號數(shù),則用補碼表示。o壓縮十進(jìn)制數(shù):一個字節(jié)中存放兩個壓縮十進(jìn)制數(shù):一個字節(jié)中存放兩個BCD碼十進(jìn)制數(shù)。碼十進(jìn)制數(shù)。o非壓縮十進(jìn)制數(shù):一個字節(jié)的低非壓縮十進(jìn)制數(shù):一個
36、字節(jié)的低4位存放一個位存放一個BCD碼十進(jìn)制數(shù),高碼十進(jìn)制數(shù),高4位為全位為全零。例如,對十進(jìn)制數(shù)字零。例如,對十進(jìn)制數(shù)字58:n壓縮十進(jìn)制數(shù)壓縮十進(jìn)制數(shù)表示:只需一個字節(jié),即表示:只需一個字節(jié),即 0101 1000B;n非壓縮十進(jìn)制數(shù)非壓縮十進(jìn)制數(shù)表示:需兩個字節(jié),即表示:需兩個字節(jié),即 0000 0101B 和和 0000 1000B.402021-10-17o8086/8088指令系統(tǒng)提供:指令系統(tǒng)提供:加、減、乘、除四種基本運算指令加、減、乘、除四種基本運算指令:處理無符號或帶符號的:處理無符號或帶符號的8位位/16位二進(jìn)制數(shù)的位二進(jìn)制數(shù)的算術(shù)運算;算術(shù)運算;調(diào)整操作指令調(diào)整操作指令
37、:進(jìn)行壓縮的或非壓縮的十進(jìn)制數(shù)的算術(shù)運算;:進(jìn)行壓縮的或非壓縮的十進(jìn)制數(shù)的算術(shù)運算;加法和減法運算指令加法和減法運算指令:帶符號數(shù)和無符號數(shù)的加法和減法的運算可以用同一條:帶符號數(shù)和無符號數(shù)的加法和減法的運算可以用同一條加法或減法指令來完成。加法或減法指令來完成。乘法和除法運算指令乘法和除法運算指令:分別設(shè)置無符號數(shù)和帶符號數(shù)的乘、除法指令。:分別設(shè)置無符號數(shù)和帶符號數(shù)的乘、除法指令。算術(shù)運算絕大部分算術(shù)運算指令都影響狀態(tài)標(biāo)志位。算術(shù)運算絕大部分算術(shù)運算指令都影響狀態(tài)標(biāo)志位。二進(jìn)制碼二進(jìn)制碼(B)十六進(jìn)制十六進(jìn)制(H)無符號無符號二進(jìn)制二進(jìn)制(D)帶符號帶符號二進(jìn)制二進(jìn)制(D)非壓縮非壓縮十進(jìn)
38、制十進(jìn)制壓縮壓縮十進(jìn)制十進(jìn)制0000 0111077+77071000 100189137-119無效無效891100 0101C5197-59無效無效無效無效一個一個8位二進(jìn)制數(shù)可看成位二進(jìn)制數(shù)可看成4種不同類型的數(shù),所表示的數(shù)值亦不同,如下表。種不同類型的數(shù),所表示的數(shù)值亦不同,如下表。412021-10-17(3)算術(shù)運算指令分類()算術(shù)運算指令分類(20條):條):加加 法(法(5條)條)減減 法(法(7條)條)ADD加法加法SUB減法減法ADC帶進(jìn)位的加法帶進(jìn)位的加法SBB帶借位的減法帶借位的減法INC增量增量DEC減量減量AAA加法的加法的ASCII調(diào)整調(diào)整(非壓縮十進(jìn)制數(shù)或非壓縮
39、十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)相加碼表示的十進(jìn)制數(shù)相加)NEG取負(fù)取負(fù)DAA加法的十進(jìn)制調(diào)整加法的十進(jìn)制調(diào)整(壓縮十進(jìn)制數(shù)相加壓縮十進(jìn)制數(shù)相加)CMP比較比較除除 法(法(5條)條)AAS減法的減法的ASCII調(diào)整調(diào)整(非壓縮十進(jìn)制數(shù)或非壓縮十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)相減碼表示的十進(jìn)制數(shù)相減)DIV無符號數(shù)除法無符號數(shù)除法DAS減法的十進(jìn)制調(diào)整減法的十進(jìn)制調(diào)整(壓縮十進(jìn)制數(shù)相減壓縮十進(jìn)制數(shù)相減)IDIV帶符號數(shù)數(shù)除法帶符號數(shù)數(shù)除法乘乘 法(法(3條)條)AAD除法的除法的ASCII調(diào)整調(diào)整(非壓縮十進(jìn)制數(shù)相除非壓縮十進(jìn)制數(shù)相除)MUL無符號數(shù)乘法無符號數(shù)乘法CBW把字節(jié)轉(zhuǎn)換成字
40、把字節(jié)轉(zhuǎn)換成字IMUL帶符號數(shù)乘法帶符號數(shù)乘法CWD把字轉(zhuǎn)換成雙字把字轉(zhuǎn)換成雙字AAM乘法的乘法的ASCII調(diào)整調(diào)整(非壓縮十進(jìn)制數(shù)相乘非壓縮十進(jìn)制數(shù)相乘)422021-10-17二、算術(shù)運算指令二、算術(shù)運算指令1、加法指令(、加法指令(Addition)(1)ADD加法指令加法指令(Addition)o 指令格式指令格式:ADD 目的,目的, 源源o 指令功能指令功能:目的:目的 源源 + 目的目的(2) ADC帶進(jìn)位的加法指令帶進(jìn)位的加法指令(Addition with Carry)o 指令格式指令格式:ADC 目的,目的, 源源o 指令功能指令功能:目的:目的 源源 + 目的目的 + C
41、F注意注意:o源操作數(shù)可以是寄存器、存儲器、立即數(shù);源操作數(shù)可以是寄存器、存儲器、立即數(shù);o目的操作數(shù)只能用寄存器、存儲單元。目的操作數(shù)只能用寄存器、存儲單元。o源和目的操作數(shù)不能同時為存儲器,且源和目的操作數(shù)不能同時為存儲器,且類型必須一致,均為字節(jié)或字類型必須一致,均為字節(jié)或字;o這兩條指令影響這兩條指令影響6個狀態(tài)標(biāo)志位:個狀態(tài)標(biāo)志位:CF、OF、PF、SF、ZF和和AFADD AL,18H ;AL AL+18HADC BL,CL ;BL BL+CL+CF432021-10-17二、算術(shù)運算指令二、算術(shù)運算指令1、加法指令(、加法指令(Addition)例例 :用加法指令對兩個用加法指令
42、對兩個8位十六進(jìn)制數(shù)位十六進(jìn)制數(shù)5EH與與3CH求和,并分析求和,并分析加法運算指令執(zhí)行后對標(biāo)志位的影響。加法運算指令執(zhí)行后對標(biāo)志位的影響。解:解:MOV AL,5EH ;AL=5EH(94) MOV BL,3CH ;BL=3CH(60) ADD AL, BL ;結(jié)果?;結(jié)果?AL=9AH442021-10-17討論討論ADD對標(biāo)志位的影響:對標(biāo)志位的影響: 0101 1110 5EH = 94 + 0011 1100 即:即: + 3CH = 60 1001 1010 9AH = 154o對標(biāo)志的解釋(人為決定):對標(biāo)志的解釋(人為決定):n兩個加數(shù)兩個加數(shù)都都看成看成無符號數(shù)無符號數(shù)時,運
43、算結(jié)果為時,運算結(jié)果為9AH,即十進(jìn)制數(shù),即十進(jìn)制數(shù)154。 對于無符號數(shù),我們只關(guān)心對于無符號數(shù),我們只關(guān)心ZF和和CF標(biāo)志標(biāo)志,在,在BCD碼運算或奇偶碼運算或奇偶校驗時才考慮校驗時才考慮AF或或PF標(biāo)志。標(biāo)志。n兩個加數(shù)兩個加數(shù)都都看成看成帶符號數(shù)帶符號數(shù)時,時,符號標(biāo)志符號標(biāo)志SF和溢出標(biāo)志和溢出標(biāo)志OF很重要,而很重要,而進(jìn)位標(biāo)志進(jìn)位標(biāo)志CF沒有意義。沒有意義。 8位帶符號數(shù)能表示的范圍位帶符號數(shù)能表示的范圍-128+127,而本例中,兩個正數(shù),而本例中,兩個正數(shù)94和和60相加,其和為相加,其和為154,由于,由于154超過了范圍,即產(chǎn)生了溢出,超過了范圍,即產(chǎn)生了溢出,OF=1.
44、運算后標(biāo)志位:運算后標(biāo)志位:ZF=0,AF=1,CF=0,SF=1,PF=1,OF=1452021-10-17(3) INC增量指令增量指令(Increment)p 指令格式指令格式:INC 目的目的p 指令功能指令功能:目的:目的目的目的+1. p類似于類似于C語言中的語言中的“+”操作,對指定的操作數(shù)加操作,對指定的操作數(shù)加1p 操作數(shù)的要求操作數(shù)的要求:通用寄存器、內(nèi)存。:通用寄存器、內(nèi)存。注意注意:n主要用在循環(huán)程序中,對地址指針和循環(huán)計數(shù)器等進(jìn)行修改;主要用在循環(huán)程序中,對地址指針和循環(huán)計數(shù)器等進(jìn)行修改;n指令執(zhí)行后影響指令執(zhí)行后影響AF、OF、PF、SF和和ZF,但,但不影響進(jìn)位標(biāo)
45、志不影響進(jìn)位標(biāo)志CF。n如果要使如果要使內(nèi)存單元內(nèi)存單元的內(nèi)容的內(nèi)容增增1,程序中必須,程序中必須說明說明該存儲單元是該存儲單元是字字還是還是字節(jié)字節(jié)。例:例: INC BL ;BL寄存器中內(nèi)容增寄存器中內(nèi)容增1 INC CX ;CX寄存器中內(nèi)容增寄存器中內(nèi)容增1 INC BYTE PTRBX ;內(nèi)存字節(jié)單元內(nèi)容增;內(nèi)存字節(jié)單元內(nèi)容增1 INC WORD PTRBX ;內(nèi)存字單元內(nèi)容增;內(nèi)存字單元內(nèi)容增1PTR為為類型說明符類型說明符,前面加,前面加BYTE說明操作數(shù)類型為說明操作數(shù)類型為字節(jié)字節(jié),加,加WORD則說明操作數(shù)類型為則說明操作數(shù)類型為字字。462021-10-17(4)AAA加法
46、的加法的ASCII調(diào)整指令調(diào)整指令(ASCII Adjust for Addition)p 指令格式指令格式:AAAp 指令功能指令功能:在用:在用ADD或或ADC指令對兩個指令對兩個非壓縮非壓縮十進(jìn)制數(shù)十進(jìn)制數(shù)或或ASCII碼表示的碼表示的十進(jìn)制數(shù)十進(jìn)制數(shù)作加法后,作加法后,運算結(jié)果已存在運算結(jié)果已存在AL中中,用此指令將,用此指令將AL中的運算結(jié)果中的運算結(jié)果調(diào)整調(diào)整為非壓縮十進(jìn)制數(shù),仍保留在為非壓縮十進(jìn)制數(shù),仍保留在AL中中。如果。如果AF=1,表示向高位有進(jìn)位,則進(jìn),表示向高位有進(jìn)位,則進(jìn)到到AH寄存器中。寄存器中。p 注意注意:非壓縮十進(jìn)制數(shù)的高:非壓縮十進(jìn)制數(shù)的高4位為全位為全0,
47、低,低4位為十進(jìn)制數(shù)字位為十進(jìn)制數(shù)字09。例如,將。例如,將9表示成表示成0000 1001p 用法用法: AAA指令應(yīng)緊跟在指令應(yīng)緊跟在ADD或或ADC指令之后。指令之后。MOVAL, 09HMOVBL, 08HADDAL, BLAAA472021-10-17(4)AAA加法的加法的ASCII調(diào)整指令調(diào)整指令(ASCII Adjust for Addition)p 為何要對為何要對BCD碼的運算結(jié)果進(jìn)行調(diào)整?碼的運算結(jié)果進(jìn)行調(diào)整? BCD碼本質(zhì)上是十進(jìn)制數(shù),即應(yīng)遵循逢十進(jìn)一的規(guī)則。而計算機是按碼本質(zhì)上是十進(jìn)制數(shù),即應(yīng)遵循逢十進(jìn)一的規(guī)則。而計算機是按二進(jìn)制(十六進(jìn)制)進(jìn)行運算,并未按十進(jìn)制規(guī)則
48、進(jìn)行運算。二進(jìn)制(十六進(jìn)制)進(jìn)行運算,并未按十進(jìn)制規(guī)則進(jìn)行運算。專用于對專用于對BCD碼的調(diào)整指令:碼的調(diào)整指令:AAA、 DAA; AAS、 DAS;AAM;AAD 均為隱含尋址,隱含的操作數(shù)為均為隱含尋址,隱含的操作數(shù)為AL和和AH調(diào)整過程:調(diào)整過程: 若若AL低低4位位9或或AF=1,則:,則: ALAL+06H 用用與操作與操作()將將AL高高4位清位清0 AF置置1,CF置置1,AHAH+1 否則,僅將否則,僅將AL寄存器的高寄存器的高4位清位清0。482021-10-17例:例:若若ALBCD 9,BLBCD 8,求兩數(shù)之和。,求兩數(shù)之和。解:解:設(shè)設(shè)AH0,則運算過程如下:,則運
49、算過程如下: ADD AL,BL ; 0000 10019 ; + 0000 10008 ; 0001 0001AF=1AAA ; + 0000 0110加加06H調(diào)整調(diào)整 ; 0001 0111 ; 0000 1111清高清高4位位 ; 0000 0111AL=7 ; CF=1, AF=1, AH=1 ; 結(jié)果為結(jié)果為AX=0107H,表示非壓縮十進(jìn)制數(shù),表示非壓縮十進(jìn)制數(shù)17當(dāng)?shù)彤?dāng)?shù)?位的結(jié)果位的結(jié)果9時,也應(yīng)進(jìn)行加時,也應(yīng)進(jìn)行加6調(diào)整調(diào)整(參考例題參考例題3.45)。原因:逢十沒有進(jìn)位,故用加原因:逢十沒有進(jìn)位,故用加6的方法強行產(chǎn)生進(jìn)位。的方法強行產(chǎn)生進(jìn)位。492021-10-17(5
50、)DAA加法的十進(jìn)制調(diào)整指令加法的十進(jìn)制調(diào)整指令(Decimal Adjust for Addition)p指令格式指令格式:DAAp指令功能指令功能:將兩個:將兩個壓縮壓縮BCD數(shù)數(shù)相加后的結(jié)果調(diào)整為正確的壓縮相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。數(shù)。p注意注意:相加后的結(jié)果必須在相加后的結(jié)果必須在AL中,才能使用中,才能使用DAA指令。指令。 DAA指令應(yīng)緊跟在指令應(yīng)緊跟在ADD或或ADC指令之后。指令之后。p調(diào)整過程調(diào)整過程: 若若AL的低的低4位位9或或AF=1, 則則AL AL+06H,對低,對低4位進(jìn)行調(diào)整;位進(jìn)行調(diào)整; 若若AL的高的高4位位9或或CF=1, 則則AL AL+60
51、H,對高,對高4位進(jìn)行調(diào)整,并使位進(jìn)行調(diào)整,并使CF置置1,否則,否則CF置置0。502021-10-17例例: 若若AL=BCD 88,BL=BCD 49,求兩數(shù)之和。,求兩數(shù)之和。解解: 運算過程如下:運算過程如下:MOV AL, 88H ; AL=88HMOV BL, 49H ; BL=49HADD AL, BL ; 1000 100088 ; + 0100 100149 ; 1101 0001AF=1DAA ; + 0000 0110加加06H調(diào)整調(diào)整 ; 1101 0111調(diào)整后高半字節(jié)調(diào)整后高半字節(jié)9 ; + 0110 0000加加60H調(diào)整調(diào)整 ; 0011 0111結(jié)果為結(jié)果為
52、ALBCD 37,CF=1512021-10-17(Subtration)(1)SUB減法指令減法指令(Subraction)p指令格式指令格式: SUB 目的,源目的,源p指令功能指令功能: 目的目的 目的目的-源源 例:例: SUB AX,BX ;AX AX-BX SUB DX,1850H ;DX DX-1850H SUB BL,BX ;BL中內(nèi)容減去物理地址為中內(nèi)容減去物理地址為DS*16+BX的的 ;存儲字節(jié),結(jié)果存入;存儲字節(jié),結(jié)果存入BLp注意:注意:n源和目的操作數(shù)不能同時為存儲器操作數(shù)源和目的操作數(shù)不能同時為存儲器操作數(shù)n立即數(shù)不能作為目的操作數(shù)立即數(shù)不能作為目的操作數(shù)5220
53、21-10-17(Subtration)(2)DEC減量指令減量指令(Decrement)o指令格式指令格式:DEC 目的目的o指令功能指令功能:目的:目的 目的目的-1。n作用類似于作用類似于C語言中的語言中的“-”操作符。操作符。例:例:DEC BX ;BX BX-1 DEC WORD PTRBP ;堆棧段中位于;堆棧段中位于BP偏置處的字減偏置處的字減1532021-10-17(3)NEG取負(fù)指令(取負(fù)指令(Negate)p 指令格式指令格式:NEG 目的目的p 指令功能指令功能:目的:目的 0-目的,即對目的操作數(shù)取負(fù)。目的,即對目的操作數(shù)取負(fù)。 NEG指令把操作數(shù)當(dāng)成一個帶符號數(shù):指
54、令把操作數(shù)當(dāng)成一個帶符號數(shù): (1)如果原操作數(shù)是)如果原操作數(shù)是正數(shù)正數(shù),NEG指令則將其變成負(fù)數(shù)指令則將其變成負(fù)數(shù)(用補碼表示);用補碼表示); (2)如果原操作數(shù)是)如果原操作數(shù)是負(fù)數(shù)負(fù)數(shù)(用補碼表示)用補碼表示),NEG指令則將其變成正數(shù)。指令則將其變成正數(shù)。p 方法方法:“各位各位(包括符號位包括符號位)求反,末位加求反,末位加1”。例:例:NEG AX ;將;將AX中的數(shù)取負(fù)中的數(shù)取負(fù) 例:若例:若AL=0FCHn 則執(zhí)行則執(zhí)行 NEG AL 后,后,AL=?, CF=?n 0FCH為為-4的補碼,執(zhí)行求補指令后的補碼,執(zhí)行求補指令后,即得到即得到4(-4的絕對值的絕對值)。AL=
55、04H,CF=1542021-10-17(4)CMP比較指令比較指令(Compare) p 指令格式指令格式:CMP 目的,源目的,源p 指令功能指令功能:目的:目的-源源, 結(jié)果結(jié)果不回送不回送到目的操作數(shù)中,僅反映在標(biāo)志到目的操作數(shù)中,僅反映在標(biāo)志位上。位上。p 用途用途:用在比較兩個數(shù)大小又不破壞原操作數(shù)的場合。通常,把:用在比較兩個數(shù)大小又不破壞原操作數(shù)的場合。通常,把CMP指令安排在條件轉(zhuǎn)移指令指令安排在條件轉(zhuǎn)移指令(如如JZ ,JG,JO 等)等)之前。之前。例:例: CMP AL,0AH CMP CX,SI CMP DI,BX+03552021-10-17(4)CMP比較指令比較
56、指令(Compare) p 根據(jù)標(biāo)志位來判斷比較的結(jié)果根據(jù)標(biāo)志位來判斷比較的結(jié)果:(1)根據(jù))根據(jù)ZF判斷兩個數(shù)是否相等。若判斷兩個數(shù)是否相等。若ZF=1,則兩數(shù)相等。,則兩數(shù)相等。(2)若兩個數(shù)不相等,則分兩種情況考慮)若兩個數(shù)不相等,則分兩種情況考慮: 比較的是比較的是兩個無符號數(shù)兩個無符號數(shù) 若若CF=0,則目的操作數(shù)(,則目的操作數(shù)(dest)源操作數(shù)()源操作數(shù)(src); 若若CF=1,則,則destsrc。比較的是比較的是兩個帶符號數(shù)兩個帶符號數(shù) 若若OF SF=0,則,則destsrc; “ ”表示異或表示異或 若若OF SF=1,則,則destsrc。562021-10-17
57、減法指令小結(jié):減法指令小結(jié):(1)對于雙操作數(shù)指令()對于雙操作數(shù)指令(SUB、CMP):):n源操作數(shù)可以是寄存器、存儲器或立即數(shù);源操作數(shù)可以是寄存器、存儲器或立即數(shù);n目的操作數(shù)可以是寄存器、存儲器,但目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù)不能為立即數(shù);n兩個操作數(shù)兩個操作數(shù)不能同時為存儲器不能同時為存儲器。(2)對于單操作數(shù)指令()對于單操作數(shù)指令(DEC、NEG):):n目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù);目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù);n如果是存儲器操作數(shù),還必須說明其類型是字節(jié)還是字。如果是存儲器操作數(shù),還必須說明其類型是字節(jié)還是字。(3)運算
58、之后,除)運算之后,除DEC指令不影響指令不影響CF標(biāo)志標(biāo)志外,其它均外,其它均影響影響OF、SF、ZF、AF、PF和和CF標(biāo)志。標(biāo)志。572021-10-17例:設(shè)例:設(shè)AL1011 0001B,DL0100 1010B,求,求ALDL解:解:SUB AL,DL ;與加法操作一樣,對結(jié)果的解釋取決于參與運算的數(shù)的;與加法操作一樣,對結(jié)果的解釋取決于參與運算的數(shù)的性質(zhì),運算過程如下:性質(zhì),運算過程如下: 二進(jìn)制減法二進(jìn)制減法 當(dāng)成無符號數(shù)當(dāng)成無符號數(shù) 當(dāng)成帶符號數(shù)當(dāng)成帶符號數(shù) 1011 0001 177 -79(原碼為原碼為11001111B) 0100 1010 74 ) +74 0110
59、0111 103 -153 討論:討論:(1)兩數(shù)為無符號數(shù)兩數(shù)為無符號數(shù):表示:表示177與與74的差是的差是103。CF=0表示沒有借位,表示沒有借位,SF和和OF無意義。無意義。(2)兩數(shù)為帶符號數(shù)兩數(shù)為帶符號數(shù):表示:表示(-79)(+74),計算得出,計算得出-153,但實際結(jié)果卻為正,但實際結(jié)果卻為正數(shù)數(shù)(103),結(jié)果不正確結(jié)果不正確。這是由于。這是由于-153溢出造成的。此時,溢出造成的。此時,SF和和OF有重要意義有重要意義.運算后標(biāo)志位運算后標(biāo)志位ZF=0,AF=1,CF=0,SF=0,PF=0,OF=1582021-10-17(5)AAS減法的減法的ASCII調(diào)整指令調(diào)整
60、指令(ASCII Adjust for Subtraction)p 指令格式指令格式:AASp 指令功能指令功能:將:將AL寄存器中的運算結(jié)果調(diào)整為正確的非壓縮十進(jìn)制數(shù)之差,寄存器中的運算結(jié)果調(diào)整為正確的非壓縮十進(jìn)制數(shù)之差,仍保留在仍保留在AL中。中。 p 使用前提使用前提:用:用SUB或或SBB指令對兩個指令對兩個非壓縮十進(jìn)制數(shù)非壓縮十進(jìn)制數(shù)或或ASCII碼表示的十進(jìn)碼表示的十進(jìn)制數(shù)制數(shù)作減法,運算結(jié)果已存在作減法,運算結(jié)果已存在AL中。中。p 調(diào)整過程調(diào)整過程: 若若AL寄存器的低寄存器的低4位位9或或AF=1,則:,則:AL AL06H,AF置置1 將將AL寄存器高寄存器高4位清零位清零
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版學(xué)校節(jié)日慶典活動承包運營合同3篇
- 2025年度個人商標(biāo)權(quán)抵押擔(dān)保許可協(xié)議書4篇
- 二零二五年度高速公路邊坡草皮修復(fù)合同模板3篇
- 網(wǎng)絡(luò)素養(yǎng)在學(xué)生職業(yè)發(fā)展中的重要性
- 二零二五年度車輛牌照租賃數(shù)據(jù)共享協(xié)議4篇
- 當(dāng)代企業(yè)網(wǎng)絡(luò)安全風(fēng)險評估與防范措施匯報
- 教學(xué)資料數(shù)字化的應(yīng)用場景及案例分析
- 二零二五年度承臺基坑開挖施工勞務(wù)分包合同施工人員資質(zhì)要求4篇
- 數(shù)海導(dǎo)航小學(xué)數(shù)學(xué)知識框架構(gòu)建
- 安全知識教育在兒童成長中的角色
- 體育概論(第二版)課件第三章體育目的
- 無人駕駛航空器安全操作理論復(fù)習(xí)測試附答案
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡介
- 老年人心理健康量表(含評分)
- 《小兒靜脈輸液速度》課件
- 營銷人員薪酬標(biāo)準(zhǔn)及績效考核辦法
- 醫(yī)院每日消防巡查記錄表
- 運輸企業(yè)重大危險源辨識及排查制度
- 運動技能學(xué)習(xí)與控制課件第五章運動中的中樞控制
評論
0/150
提交評論