計算機組成原理 第3章 80 x86的指令系統(tǒng)和尋址方式.ppt_第1頁
計算機組成原理 第3章 80 x86的指令系統(tǒng)和尋址方式.ppt_第2頁
計算機組成原理 第3章 80 x86的指令系統(tǒng)和尋址方式.ppt_第3頁
計算機組成原理 第3章 80 x86的指令系統(tǒng)和尋址方式.ppt_第4頁
計算機組成原理 第3章 80 x86的指令系統(tǒng)和尋址方式.ppt_第5頁
已閱讀5頁,還剩125頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 指令系統(tǒng) 一組指令的集合,第3章 80 x86的指令系統(tǒng)和尋址方式,指令, 尋址方式 與數(shù)據(jù)有關(guān)的尋址方式 與轉(zhuǎn)移地址有關(guān)的尋址方式,1,2020/9/12,2020/9/12,2,2020/9/12,3,2020/9/12,4,P435,2020/9/12,5,H,2020/9/12,6,1. 8086的尋址方式,與數(shù)據(jù)有關(guān)的尋址方式:以 MOV 指令為例 (源操作數(shù)SRC的尋址方式) 立即尋址 MOV AX , 3069H 寄存器尋址 MOV AL , BH 直接尋址 MOV AX , 2000H 寄存器間接尋址 MOV AX , BX 寄存器相對尋址 MOV AX , COUNT SI

2、 基址變址尋址 MOV AX , BP DI 相對基址變址尋址 MOV AX , MASK BX SI ,存儲器尋址,7,2020/9/12,MOV指令,MOV target, source reg, reg mem, reg reg, mem mem, immed reg, immed 存儲器操作數(shù)之間不能相互傳值 兩個操作數(shù)的類型須一致 段寄存器和立即數(shù)之間不能相互傳值 CS不能作為目標(biāo)寄存器使用,(1) 立即尋址方式* 操作數(shù)在指令中給出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A * 只能用于 SRC 字段 MOV 40H, AL * SRC 和 D

3、ST 的字長一致 MOV AH, 3064H ,9,2020/9/12,(2) 寄存器尋址方式* 操作數(shù)在指定的寄存器中 MOV AX, BX MOV AL, BH MOV AX, 3064H * 字節(jié)寄存器只有 AH AL BH BL CH CL DH DL * SRC 和 DST 的字長一致 MOV AH, BX * CS 不能用 MOV 指令改變 MOV CS, AX ,10,2020/9/12,(3) 直接尋址方式* 由指令直接給出 例:MOV AX, 2000H EA=2000H, 假設(shè)(DS)=3000H, 那么PA=32000H,* 隱含的段為數(shù)據(jù)段 DS * 可使用段跨越前綴

4、MOV AX, ES: 2000H * 操作數(shù)地址可由變量(符號地址)表示, 但要注意 VALUE DB 10 變量的屬性 MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE ,50,30,32000,AH AL,30,50,(AX) = 3050H,11,2020/9/12,(4)寄存器間接尋址* EA 在基址寄存器(BX/BP) 或變址寄存器(SI/DI) 中 MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS)

5、 + (BP) * 不允許使用AX、CX、DX 存放 EA MOV AX, CX * SRC 和 DST 的字長一致 MOV DL, BX ; BX指示一個字節(jié)單元 MOV DX, BX ; BX指示一個字單元 * 適于數(shù)組、字符串、表格的處理,12,2020/9/12,(5) 寄存器相對尋址方式* 指令格式: MOV AX, COUNTSI 或 MOV AX, COUNT+SI 假設(shè) (DS)=3000H, (SI)=2000H, COUNT=3000H, 則: PA = 35000H 假設(shè)(35000H)=1234H, 那么 (AX)=1234H * 適于數(shù)組、字符串、表格的處理,13,2

6、020/9/12,(6) 基址變址尋址方式* 指令格式: MOV AX, BX DI MOV AX, BX+DI MOV AX, ES:BX SI * 適于數(shù)組、字符串、表格的處理 * 必須是一個基址寄存器和一個變址寄存器的組合 MOV AX, BX BP MOV AX, SI DI ,有效地址 =,(BX) (SI) (BP) (DI),+,14,2020/9/12,( 7 ) 相對基址變址尋址方式 MOV AX, MASK BX SI 或 MOV AX, MASK BX+SI 或 MOV AX, MASK+BX+SI,有效地址 =,(BX) (SI) 8位 (BP) (DI) 16位,+,

7、+,位移量,15,2020/9/12,2020/9/12,16,訪問存儲器的方式,默認的 段寄存器,可跨越的 段寄存器,偏移地址,取指令 CS 無 IP 堆棧操作 SS 無 SP 一般數(shù)據(jù)訪問 DS CS ES SS 有效地址EA BP作為基址的尋址 SS CS DS ES BP 串操作的源操作數(shù) DS CS ES SS SI 串操作的目的操作數(shù) ES 無 DI,段 寄 存 器 的 使 用 規(guī) 定,17,2020/9/12,例:編寫一段顯示字符串STRING的程序 DATA SEGMENT STRING DB HAPPY NEW YEAR!, 0DH , 0AH , $ COUNT DW 17

8、 DATA ENDS ( 1 ) 直接尋址 mov dl, string mov ah, 2 int 21h ; 顯示字符H mov dl, string+1 mov ah, 2 int 21h ; 顯示字符A : :,18,2020/9/12,2020/9/12,19,( 2 ) 寄存器間接尋址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx Next : mov dl, bx mov ah, 2 int 21h ; 顯示一個字符 inc bx loop next ; 循環(huán)指令 ( 3 ) 寄存器相對尋址 mov

9、 cx, count ; mov cx, 17 mov si, 0 Next : mov dl, stringsi ; mov dl, string+si mov ah, 2 int 21h ; 顯示一個字符 inc si loop next ; 循環(huán)指令,20,2020/9/12,2020/9/12,21,2020/9/12,22,2020/9/12,23,把string在段里的偏移地址送給dx ,offset是個偽操作符,只能在編譯的時候用。 用法: offset label 作用是得到label在段內(nèi)的偏移地址,mov dx,offset string,( 4 ) 基址變址尋址 mov

10、cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx mov si, 0 Next : mov dl, bx si ; mov dl, bx+si mov ah, 2 int 21h ; 顯示一個字符 inc si loop next ; 循環(huán)指令 ( 5 ) DOS 顯示字符串功能 mov dx, offset string ; string的偏址 dx ; lea dx, string mov ah, 9 int 21h ; 顯示一串字符 P471,24,2020/9/12,80 x86 新增的尋址方式,EA= (基址寄存器

11、) + (變址寄存器) 比例因子 + 位移量,( 1 ) 比例變址尋址方式-P43 例:MOV EAX, COUNT ESI 4 ,25,2020/9/12,(2) 基址比例變址尋址方式- -P44-39 例:MOV ECX, EAX EDI 4 (3) 相對基址比例變址尋址方式 例:MOV EAX, TABLE EBP EDI 4 16位和32位尋址的差異 地址成分 16位尋址 32位尋址 基址寄存器 BX、BP 任何32位通用寄存器 變址寄存器 SI、DI 除ESP外的任何32位通用寄存器 比例因子 1 1、2、4、8,26,2020/9/12,與轉(zhuǎn)移地址有關(guān)的尋址方式:,段內(nèi)尋址 段內(nèi)直

12、接尋址 JMP NEAR PTR NEXT 段內(nèi)間接尋址 JMP TABLE BX 段間尋址 段間直接尋址 JMP FAR PTR NEXT 段間間接尋址 JMP DWORD PTR BX ,用來確定轉(zhuǎn)移指令及轉(zhuǎn)子指令的轉(zhuǎn)向地址。,27,2020/9/12,(1) 段內(nèi)直接尋址-P45,轉(zhuǎn)向的有效地址 = 當(dāng)前(IP) + 位移量(8bit/16bit),28,2020/9/12,例: JMP NEAR PTR NEXT 近轉(zhuǎn)移 -32768 +32767 JMP SHORT NEXT 短轉(zhuǎn)移 -128 +127,29,2020/9/12,P87,2020/9/12,30,2020/9/12,

13、31,2020/9/12,32,(2) 段內(nèi)間接尋址 轉(zhuǎn)向的有效地址是一個寄存器或存儲單元的內(nèi)容。 (可用除立即數(shù)以外的任何一種數(shù)據(jù)尋址方式得到) 例: TABLE = 20A2H (BX) = 1256H (SI) = 528EH (DS) = 2000H (232F8H) = 3280H (264E4H) = 2450H JMP BX ; (IP)=1256H JMP TABLEBX JMP WORD PTR TABLEBX ; (IP)=3280H JMP BXSI JMP WORD PTR BXSI ; (IP)=2450H,33,2020/9/12,code1 segment jmp

14、 far ptr next code1 ends,code2 segment next: . code2 ends,(3) 段間直接尋址 用指令中提供的轉(zhuǎn)向段地址和偏移地址取代CS 和 IP 例:,34,2020/9/12,(4) 段間間接尋址 用存儲器中的兩個相繼字的內(nèi)容取代CS 和 IP (存儲單元的地址可用存儲器尋址方式得到) 例: JMP DWORD PTR INTERS+BX PA=(DS)24 + (BX) + INTERS (PA+1, PA)IP (PA+3, PA+2) CS,35,2020/9/12,第3章 練習(xí) Page 107 3.1 3.3 3.5 3.7 3.11

15、3.13,36,2020/9/12, 數(shù)據(jù)傳送指令 算術(shù)指令 邏輯指令 串處理指令 控制轉(zhuǎn)移指令 處理機控制與雜項操作指令,2. 8086的指令系統(tǒng),37,2020/9/12,重點關(guān)注: 指令的匯編格式 指令的基本功能 指令支持的尋址方式 指令的執(zhí)行對標(biāo)志位的影響 指令的特殊要求,38,2020/9/12,數(shù)據(jù)傳送指令: 通用數(shù)據(jù)傳送指令 MOV、PUSH、POP、XCHG 累加器專用傳送指令 IN、OUT、XLAT 地址傳送指令 LEA、LDS、LES 標(biāo)志寄存器傳送指令 LAHF、SAHF、PUSHF、POPF 類型轉(zhuǎn)換指令 CBW、CWD,39,2020/9/12,傳送指令: MOV D

16、ST, SRC 執(zhí)行操作: (DST) (SRC) 注意: * DST、SRC 不能同時為段寄存器 MOV DS, ES * 立即數(shù)不能直接送段寄存器 MOV DS, 2000H * DST 不能是立即數(shù)和CS * DST、SRC 不能同時為存儲器尋址 * 不影響標(biāo)志位, 通用數(shù)據(jù)傳送指令,MOV AX, DSEG MOV DS, AX,40,2020/9/12,進棧指令: PUSH SRC 執(zhí)行操作: (SP) (SP) 2 ( (SP)+1, (SP) ) (SRC) 出棧指令: POP DST 執(zhí)行操作: (DST) ( (SP)+1, (SP) ) (SP) (SP) + 2 堆棧:先

17、進后出的存儲區(qū),段地址存放在SS中, SP在任何時候都指向棧頂,進出棧后自動修改SP。 注意: * 堆棧操作必須以字為單位。 * 不影響標(biāo)志位 * 不能用立即尋址方式 PUSH 1234H * DST不能是CS POP CS ,41,2020/9/12,例:假設(shè) (AX) = 2107 H , 執(zhí)行 PUSH AX,* * * * * * * *,(SP),PUSH AX 執(zhí)行前,(SP),* * * * * * * *,07H 21H,低地址 高地址,PUSH AX 執(zhí)行后,42,2020/9/12,(SP),* * * * * * * *,07H 21H,POP BX 執(zhí)行前,(SP),*

18、 * * * * * * *,07H 21H,低地址 高地址,POP BX 執(zhí)行后 (BX) = 2107H,例: POP BX,43,2020/9/12,例: PUSH DS SUB AX, AX PUSH AX RET 例: PUSH AX PUSH BX PUSH CX ;其間用到AX、BX、CX POP CX ; 后進先出 POP BX POP AX,44,2020/9/12,交換指令: XCHG OPR1, OPR2 執(zhí)行操作: (OPR1) (OPR2) 注意: * 不影響標(biāo)志位 * 不允許使用段寄存器 例:XCHG BX, BP+SI XCHG AL, BH,45,2020/9/

19、12, 累加器專用傳送指令(只限使用AX或AL) 輸入指令 IN (I/O CPU) 長格式: IN AL, PORT (字節(jié)) IN AX, PORT (字) 執(zhí)行操作:(AL) ( PORT ) (字節(jié)) (AX) ( PORT+1, PORT )(字) 短格式: IN AL, DX (字節(jié)) IN AX, DX (字) 執(zhí)行操作:(AL) ( (DX) ) (字節(jié)) (AX) ( (DX)+1, (DX) )(字),46,2020/9/12,輸出指令 OUT (CPU I/O) 長格式: OUT PORT, AL (字節(jié)) OUT PORT, AX (字) 執(zhí)行操作:( PORT ) (

20、AL) (字節(jié)) ( PORT+1, PORT ) (AX)(字) 短格式: OUT DX, AL (字節(jié)) OUT DX, AX (字) 執(zhí)行操作:( (DX) ) (AL) (字節(jié)) ( (DX)+1, (DX) ) (AX)(字),47,2020/9/12,注意: * 不影響標(biāo)志位 * 前256個端口號00HFFH可直接在指令中指定(長格式) * 如果端口號 256,端口號 DX(短格式) 例: IN AX, 28H MOV DATA_WORD, AX 例: MOV DX, 3FCH IN AX, DX 例: OUT 5, AL 例:測試某狀態(tài)寄存器(端口號27H)的第2位是否為1 IN

21、 AL, 27H TEST AL, 00000100B ;p69 JNZ ERROR ;若第2位為1,轉(zhuǎn)ERROR處理,48,2020/9/12,例:Sound程序 -P286,mov dx, 100 in al, 61h and al,11111100b sound: xor al, 2 ; 1 0 1 out 61h, al ;ON OFF ON mov cx, 140h ;脈寬 Wait1: loop wait1 dec dx jne sound,設(shè)備控制寄存器,端口61H,1 / 0 0,控制其它外部設(shè)備,與門,放大器,2號定時器門控,1 0,49,2020/9/12,(BX) 30

22、H F0040,31 H F0041,32 H F0042,(AL) = 3 33 H F0043,TABLE,(DS)=F000H,換碼指令:XLAT 或XLAT OPR 執(zhí)行操作:(AL) ( (BX) + (AL) ) 例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令執(zhí)行后 (AL)=33H 注意: * 不影響標(biāo)志位 * 字節(jié)表格(長度不超過256) 首地址 (BX) * 需轉(zhuǎn)換的代碼位移量 (AL),50,2020/9/12, 地址傳送指令 有效地址送寄存器指令: LEA REG, SRC 執(zhí)行操作: (REG) S

23、RC 指針?biāo)图拇嫫骱虳S指令: LDS REG, SRC 執(zhí)行操作: (REG) (SRC) (DS) (SRC+2) 相繼二字 寄存器、DS 指針?biāo)图拇嫫骱虴S指令: LES REG, SRC 執(zhí)行操作: (REG) (SRC) (ES) (SRC+2) 相繼二字 寄存器、ES,51,2020/9/12,例:LEA BX, BX+SI+0F62H LDS SI, 10H LES DI, BX,40 H 00 H 00 H 30 H,TABLE (DS):1000H,MOV BX, TABLE ; (BX)=0040H MOV BX, OFFSET TABLE ; (BX)=1000H LEA

24、 BX, TABLE ; (BX)=1000H LDS BX, TABLE ; (BX)=0040H ; (DS)=3000H LES BX, TABLE ; (BX)=0040H ; (ES)=3000H,注意: * 不影響標(biāo)志位 * REG 不能是段寄存器 * SRC 必須為存儲器尋址方式,52,2020/9/12, 標(biāo)志寄存器傳送指令 標(biāo)志送AH指令: LAHF 執(zhí)行操作: (AH) (FLAGS的低字節(jié)) AH送標(biāo)志寄存器指令: SAHF 執(zhí)行操作: (FLAGS的低字節(jié)) (AH) 標(biāo)志進棧指令: PUSHF 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1, (SP) )

25、(FLAGS) 標(biāo)志出棧指令: POPF 執(zhí)行操作: (FLAGS) ( (SP)+1, (SP) ) (SP) (SP) + 2 * 影響標(biāo)志位,53,2020/9/12, 類型轉(zhuǎn)換指令 CBW AL AX 執(zhí)行操作: 若(AL)的最高有效位為0,則(AH)= 00H 若(AL)的最高有效位為1,則(AH)= FFH CWD AX (DX,AX) 執(zhí)行操作:若(AX)的最高有效位為0,則(DX)= 0000H 若(AX)的最高有效位為1,則(DX)= FFFFH 例:(AX) = 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H 注意

26、: * 無操作數(shù)指令 * 隱含對AL 或AX 進行符號擴展 * 不影響條件標(biāo)志位,54,2020/9/12,算術(shù)指令: 加法指令 ADD、ADC、INC 減法指令 SUB、SBB、DEC、NEG、CMP 乘法指令 MUL、IMUL 除法指令 DIV、IDIV 十進制調(diào)整指令 DAA、DAS、 AAA、AAS、AAM、AAD,55,2020/9/12, 加法指令 加法指令: ADD DST, SRC 執(zhí)行操作: (DST) (SRC) + (DST) 帶進位加法指令: ADC DST, SRC 執(zhí)行操作: (DST) (SRC) + (DST) + CF 加1指令: INC OPR 執(zhí)行操作:

27、(OPR) (OPR) + 1,注意: * 除INC指令不影響CF標(biāo)志外,均對條件標(biāo)志位有影響。,56,2020/9/12,加法指令對條件標(biāo)志位的影響,CF 位表示 無符號數(shù) 相加的溢出。 OF 位表示 帶符號數(shù) 相加的溢出。,1 結(jié)果為負 0 否則,SF=,1 結(jié)果為0 0 否則,ZF=,1 和的最高有效位 有 向高位的進位 0 否則,CF=,1 兩個操作數(shù)符號相同,而結(jié)果符號與之相反 0 否則,OF=,57,2020/9/12,舉例: n=8 bit 帶符號數(shù)(-128127) , 無符號數(shù)(0255),0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1

28、 1 1 1 帶:(+4)+(+11)=+15 OF=0 無:4+11=15 CF=0,帶符號數(shù)和無符號數(shù)都不溢出,0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 帶: (+9)+(+124)=-123 OF=1 無: 9+124=133 CF=0,帶符號數(shù)溢出,無符號數(shù)溢出,0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0 帶:(+7)+(-5)=+2 OF=0 無:7+251=2 CF=1,帶符號數(shù)和無符號數(shù)都溢出,1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 1

29、 0 1 1 1 1 1 0 0 帶:(-121)+(-11)=+124 OF=1 無:135+245=124 CF=1,58,2020/9/12,例:雙精度數(shù)的加法 (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 8100H 指令序列 ADD AX, CX ; (1) ADC DX, BX ; (2) (1) 執(zhí)行后,(AX) = 7465H CF=1 OF=1 SF=0 ZF=0 (2) 執(zhí)行后,(DX) = 0008H CF=0 OF=0 SF=0 ZF=0,59,2020/9/12, 減法指令 減法指令: SUB DST, SRC 執(zhí)行操作

30、: (DST) (DST) - (SRC) 帶借位減法指令: SBB DST, SRC 執(zhí)行操作: (DST) (DST) - (SRC) - CF 減1指令: DEC OPR 執(zhí)行操作: (OPR) (OPR) - 1 求補指令: NEG OPR 執(zhí)行操作: (OPR) - (OPR) 比較指令: CMP OPR1, OPR2 執(zhí)行操作: (OPR1) - (OPR2),注意: * 除DEC指令不影響 CF標(biāo)志外,均對條 件標(biāo)志位有影響。,60,2020/9/12,減法指令對條件標(biāo)志位(CF/OF/ZF/SF)的影響:,CF 位表示 無符號數(shù) 減法的溢出。 OF 位表示 帶符號數(shù) 減法的溢出

31、。,1 被減數(shù)的最高有效位 有 向高位的借位 0 否則,CF=,1 兩個操作數(shù)符號相反,而結(jié)果的符號與減數(shù)相同 0 否則,OF=,1 減法轉(zhuǎn)換為加法運算時 無 進位 0 否則,CF=,或,61,2020/9/12,NEG 指令對CF/OF的影響,0 操作數(shù)為0 1 否則,CF =,1 操作數(shù)為 -128 (補碼80H,字節(jié)運算)或 操作數(shù)為 -32768 (補碼8000H,字運算) 0 否則,OF =,0 0 0 1 1 1 1 0 + 0 0 0 1 1 1 1 1,62,2020/9/12,求補指令把操作數(shù)按位取反后末位加1,NEG 指令對CF/OF的影響,0 操作數(shù)為0 1 否則,CF

32、=,1 操作數(shù)為 -128 (字節(jié)運算)或 操作數(shù)為 -32768 (字運算) -+128+32768超出補碼表示范圍,溢出 0 否則,OF =,0 0 0 0 1 1 1 1 + 0 0 0 1 1 0 0 0 0,1 0 0 0 0 1 1 1 + 0 0 0 1 1 0 0 0,63,2020/9/12,2020/9/12,64,2020/9/12,65,例:x、y、z 均為雙精度數(shù),分別存放在地址為X, X+2; Y, Y+2;Z, Z+2的存儲單元中,用指令序列實現(xiàn) w x + y + 24 - z ,并用W, W+2單元存放w,MOV AX, X MOV DX, X+2 ADD A

33、X, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 結(jié)果存入W, W+2單元,66,2020/9/12, 乘法指令 無符號數(shù)乘法指令: MUL SRC 帶符號數(shù)乘法指令: IMUL SRC 執(zhí)行操作: 字節(jié)操作數(shù) (AX) (AL) * (SRC) 字操作數(shù) (DX, AX) (AX) * (SRC),注意: * AL (AX) 為隱含的乘數(shù)寄存器。 * AX (DX,AX) 為隱含的乘積寄存器。 * SRC不能為立即數(shù)。 *

34、除CF和OF外,對條件標(biāo)志位無定義。,67,2020/9/12,乘法指令對 CF/OF 的影響:,例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) (AL) * (BL) ; A5*11 5B*11=060B F9F5 ; (AX) = 0F9F5H CF=OF=1 (2) MUL BX ; (DX, AX) (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX)=0089H (AX)=5EF5H CF=OF=1,00 乘積的高一半為零 11 否則,MUL指令: CF,OF =,00 乘積的高一半是低一半的符號擴展 11 否

35、則,IMUL指令: CF,OF =,1010 0101 0101 1011,68,2020/9/12,2020/9/12,69, 除法指令-P67 無符號數(shù)除法指令: DIV SRC 帶符號數(shù)除法指令: IDIV SRC 執(zhí)行操作: 字節(jié)操作 (AL) (AX) / (SRC) 的商 (AH) (AX) / (SRC) 的余數(shù) 字操作 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余數(shù) 注意: * AX (DX,AX) 為隱含的被除數(shù)寄存器。 * AL (AX) 為隱含的商寄存器。 * AH (DX) 為隱含的余數(shù)寄存器。 * SRC不能為立即

36、數(shù)。 * 對所有條件標(biāo)志位均無定義。如何判別結(jié)果有效?,70,2020/9/12,例:x , y , z , v 均為16位帶符號數(shù),計算 ( v - ( x*y + z 540 ) ) / x,MOV AX, X IMUL Y ; x*y (DX,AX) MOV CX, AX MOV BX, DX MOV AX, Z CWD ;Z (DX,AX) ADD CX, AX ADC BX, DX ; x*y+z (BX,CX) SUB CX, 540 SBB BX, 0 ; x*y+z-540 MOV AX, V CWD ;V (DX,AX) SUB AX, CX SBB DX, BX ; v-(

37、x*y+z-540) IDIV X ; (v-(x*y+z-540)/x(AX) 余數(shù)(DX),71,2020/9/12, 十進制調(diào)整指令 BCD碼(8421碼):用二進制編碼的十進制數(shù),又稱二-十進制數(shù) 壓縮的BCD碼:用 4 位二進制數(shù)表示 1 位十進制數(shù) 例:( 59 )10 ( 0101 1001 )BCD 非壓縮的BCD碼:用 8 位二進制數(shù)表示 1 位十進制數(shù) 例:( 59 )10 ( 0000 0101 0000 1001 )BCD 數(shù)字的 ASCII 碼是一種 非壓縮的 BCD 碼 DIGIT ASCII BCD 030H0011 0000 131H0011 0001 232H

38、0011 0010 939H0011 1001,72,2020/9/12,高4位無意義,例:寫出( 3590 )10的壓縮 BCD 碼和非壓縮BCD碼,并分 別 把它們存入數(shù)據(jù)區(qū) PAKED 和 UNPAK 壓縮BCD:( 3590 )10( 0011 0101 1001 0000 )BCD 非壓縮BCD: ( 3590 )10( 00000011 00000101 00001001 00000000 )BCD,PAKED 90H 35H,UNPAK 00H 09H 05H 03H,73,2020/9/12,問題的提出:,十進制調(diào)整指令,19 壓縮BCD: 0001 1001,27 0010

39、0001 + 110,+ 08 + 0000 1000,(0010 0111)BCD,AF=1,74,2020/9/12,06H,(1)壓縮的BCD碼調(diào)整指令 DAA 加法的十進制調(diào)整指令 DAS 減法的十進制調(diào)整指令 (2)非壓縮的BCD碼調(diào)整指令 AAA 加法的ASCII碼調(diào)整指令 AAS 減法的ASCII碼調(diào)整指令 AAM 乘法的ASCII碼調(diào)整指令 AAD 除法的ASCII碼調(diào)整指令,75,2020/9/12,壓縮BCD運算舉例: (1) MOV AL, BCD1 ; BCD1=34H ADD AL, BCD2 ; BCD2=59H, (AL)=8DH DAA ; 8DH+06H=93

40、H MOV BCD3, AL ; BCD3=93H (2) MOV AL, BCD1 ; BCD1=34H SUB AL, BCD2 ; BCD2=59H , (AL)=0DBH DAS ; 0DBH60H06H=75H MOV BCD3, AL ; BCD3= 75 = - 25 (10n補碼),76,2020/9/12,非壓縮BCD運算舉例:-略 (1) MUL BL ; (AX)=(AL)(BL)=08 09 AAM ; (AL)/0AH= 48H /0AH 0702 (2)AAD ; (AX) (AH) 0AH+(AL)=48H DIV BL ; (AL) = (AX)/(BL)=48

41、H/4=12H AAM ; (AL)/0AH=12H/0AH=0108,77,2020/9/12,第3章作業(yè) Page 109 3.14 3.17,78,2020/9/12,邏輯指令: 邏輯運算指令 AND、OR、NOT、XOR、TEST 移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR,79,2020/9/12,邏輯非指令:NOT OPR * OPR不能為立即數(shù) 執(zhí)行操作: (OPR) (OPR) * 不影響標(biāo)志位 邏輯與指令:AND DST, SRC 執(zhí)行操作: (DST) (DST) (SRC) 邏輯或指令:OR DST, SRC 執(zhí)行操作: (DST)

42、(DST) (SRC) 異或指令: XOR DST, SRC 執(zhí)行操作: (DST) (DST) (SRC) 測試指令: TEST OPR1, OPR2執(zhí)行操作: (OPR1) (OPR2),CF OF SF ZF PF AF 0 0 * * * 無定義,根據(jù)運算結(jié)果設(shè)置, 邏輯運算指令,80,2020/9/12,例:屏蔽AL的第0、1兩位 AND AL, 0FCH 例:置AL的第5位為1 OR AL, 20H 例:使AL的第0、1位變反 XOR AL, 3 例:測試某些位是0是1 TEST AL, 1 JZ EVEN,* * * * * * * * OR 0 0 1 0 0 0 0 0 *

43、* 1 * * * * *,* * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0,* * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0,* * * * * * * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *,81,2020/9/12,邏輯左移 SHL OPR, CNT 邏輯右移 SHR OPR, CNT 算術(shù)左移 SAL OPR, CNT(同邏輯左移) 算術(shù)右移 SAR OPR, CNT,CF 0,0 CF,CF, 移位指令,82,2020/9/12,循環(huán)左移 R

44、OL OPR, CNT 循環(huán)右移 ROR OPR, CNT 帶進位循環(huán)左移 RCL OPR, CNT 帶進位循環(huán)右移 RCR OPR, CNT,CF,CF,CF,CF,83,2020/9/12,84,2020/9/12,例:(AX)= 0012H,(BX)= 0034H,把它們裝配成(AX)= 1234H,例:(BX) = 84F0H (1) (BX) 為無符號數(shù),求 (BX) / 2 SHR BX, 1 ; (BX) = 4278H (2) (BX) 為帶符號數(shù),求 (BX) 2 SAL BX, 1 ; (BX) = 09E0H, OF=1 (3) (BX) 為帶符號數(shù),求 (BX) / 4

45、 MOV CL, 2 SAR BX, CL ; (BX) = 0E13CH,MOV CL, 8 ROL AX, CL ADD AX, BX,85,2020/9/12,MOV CH, 4 ; 循環(huán)次數(shù) MOV CL, 4 ; 移位次數(shù) NEXT: ROL BX, CL MOV AX, BX AND AX, 0FH PUSH AX DEC CH JNZ NEXT,0008,0004,000F,0000 (SP),(3) (BX)=84F0H,把 (BX) 中的 16 位數(shù)每 4 位壓入堆棧,86,2020/9/12,2單元,串處理指令: 設(shè)置方向標(biāo)志指令 CLD、STD ; ( CLD 使 DF=

46、0增,STD 使 DF=1減) 串處理指令 串重復(fù)前綴 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE / REPNZ CMPSB / CMPSW SCASB / SCASW,87,2020/9/12,與 REP 配合工作的 MOVS / STOS / LODS REP 執(zhí)行操作: (1) 如 (CX)=0 則退出 REP,否則轉(zhuǎn)(2) (2) (CX) (CX) -1 (3) 執(zhí)行 MOVS / STOS / LODS (4) 重復(fù) (1) (3),88,2020/9/12,MOVS 串傳送指令: MOVS DS

47、T, SRC MOVSB (字節(jié)) MOVSW (字) 例:MOVS ES: BYTE PTR DI, DS: SI 執(zhí)行操作: (1) (DI) (SI) (2) 字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2 方向標(biāo)志 DF=0 時用 + ,DF=1 時用 - 。 REP MOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。 源串(數(shù)據(jù)段) 目的串(附加段),89,2020/9/12,執(zhí)行 REP MOVS 之前,應(yīng)先做好: (1) 源串首地址(末地址) SI (2) 目的串首地址(末地址) DI (3) 串長度 CX (4) 建立方向標(biāo)志

48、 ( CLD 使 DF=0,STD 使 DF=1 ),90,2020/9/12,(SI) (DI),數(shù)據(jù)段 附加段,(SI) (DI),91,2020/9/12,data segment mess1 db personal_computer data ends extra segment mess2 db 17 dup (?) extra ends code segment mov ax, data movds,ax movax, extra mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb code ends,92

49、,2020/9/12,2020/9/12,93,2020/9/12,94,2020/9/12,95,96,2020/9/12,LODS 從串取指令: LODS SRC LODSB (字節(jié)) LODSW (字) 執(zhí)行操作: 字節(jié)操作:(AL)(SI), (SI)(SI)1 字操作:(AX)(SI), (SI)(SI)2,注意: * LODS 指令一般不與 REP 聯(lián)用 * 源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改), 目的串必須在附加段中 * 不影響條件標(biāo)志位,97,2020/9/12,與 REPE / REPZ(REPNE / REPNZ)配合工作的 CMPS 和 SCAS REPE /

50、REPZ REPNE / REPNZ 執(zhí)行操作: (1) 如 (CX)=0 或 ZF=0 (ZF=1) 則退出串操作, 否則轉(zhuǎn)(2) (2) (CX)(CX) -1 (3) 執(zhí)行 CMPS / SCAS (4) 重復(fù) (1) (3),98,2020/9/12,CMPS 串比較指令: CMPS SRC, DST CMPSB (字節(jié)) CMPSW (字) 執(zhí)行操作: (1) (SI) - (DI) 根據(jù)比較結(jié)果置條件標(biāo)志位:相等 ZF=1 不等 ZF=0 (2) 字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2,99,2020/9/12,SCA

51、S 串掃描指令: SCAS DST SCASB (字節(jié)) SCASW (字) 執(zhí)行操作: 字節(jié)操作:(AL) - (DI), (DI)(DI)1 字操作: (AX) - (DI), (DI)(DI)2,100,2020/9/12,例:從一個字符串中查找一個指定的字符 mess db COMPUTER lea di, mess mov al, T mov cx, 8 cld repne scasb,C,O,M,P,U,T,E,R,(di) ,(CX)=2,101,2020/9/12,例:比較兩個字符串,找出它們不相匹配的位置,例:反向傳送,lea si, mess1 lea di, mess2

52、mov cx, 8 cld repe cmpsb,lea si, mess1+7 lea di, mess2+7 mov cx, 8 STd rep movsb,102,2020/9/12,控制轉(zhuǎn)移指令: 無條件轉(zhuǎn)移指令 JMP 條件轉(zhuǎn)移指令 JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ 循環(huán)指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE 子程序調(diào)用和返回指令 CALL、RET 中斷與中斷返回指令 INT、INTO、IRET,103,2020/9/12,無條件轉(zhuǎn)移指令: 段內(nèi)直接短轉(zhuǎn)移:JMP SHORT OPR 執(zhí)行操作:(IP) (IP) + 8位位移量 段內(nèi)直接近轉(zhuǎn)移:JMP NEAR PTR OPR 執(zhí)行操作:(IP) (IP) + 16位位移量 段內(nèi)間接轉(zhuǎn)移: JMP WORD PTR OPR 執(zhí)行操作: (IP) (EA),104,2020/9/12,段間直接遠轉(zhuǎn)移:JMP FAR PTR OPR 執(zhí)行操作:(IP) OPR 的段內(nèi)偏移地址 (CS) OPR 所在段的段地址 段間間接轉(zhuǎn)移: JMP DWORD PTR OPR

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論