![第3部分80x86匯編語言程序設計方案上16位匯編版本ppt課件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/a50ff216-837d-4f17-b22f-1640753927d4/a50ff216-837d-4f17-b22f-1640753927d41.gif)
![第3部分80x86匯編語言程序設計方案上16位匯編版本ppt課件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/a50ff216-837d-4f17-b22f-1640753927d4/a50ff216-837d-4f17-b22f-1640753927d42.gif)
![第3部分80x86匯編語言程序設計方案上16位匯編版本ppt課件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/a50ff216-837d-4f17-b22f-1640753927d4/a50ff216-837d-4f17-b22f-1640753927d43.gif)
![第3部分80x86匯編語言程序設計方案上16位匯編版本ppt課件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/a50ff216-837d-4f17-b22f-1640753927d4/a50ff216-837d-4f17-b22f-1640753927d44.gif)
![第3部分80x86匯編語言程序設計方案上16位匯編版本ppt課件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/a50ff216-837d-4f17-b22f-1640753927d4/a50ff216-837d-4f17-b22f-1640753927d45.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第3章章 80 x86匯編言語程序設計匯編言語程序設計(上上)16位匯編版本位匯編版本80 x86的操作數尋址方式有:的操作數尋址方式有:1、立刻尋址、立刻尋址2、存放器尋址、存放器尋址3、存儲器尋址、存儲器尋址4、端口尋址、端口尋址3.1 80 x86的尋址方式的尋址方式3.1.1 操作數尋址操作數尋址1、立刻尋址、立刻尋址 操作數以常量方式直接放在指令中,緊跟在操作碼之后操作數以常量方式直接放在指令中,緊跟在操作碼之后 機器碼存放方式如下:機器碼存放方式如下:立刻尋址例如立刻尋址例如 MOV AH, -40 ; -40AH MOV AX, 34D8H ; 34HAH, D8HAL MOV
2、 AX, -40 ; 0FFD8H(-40)AXOPD8操作碼操作碼8位操作數位操作數低地址低地址高地址高地址OP操作碼操作碼D16高高8位位D16低低8位位16位操作數位操作數代碼段代碼段代碼段代碼段2、存放器尋址、存放器尋址 操作數存放在某個存放器中,指令指定存放器號操作數存放在某個存放器中,指令指定存放器號 存放器號存放器號操作數操作數存放器尋址例如存放器尋址例如 MOV AH, BL ;(BL)-AH MOV DS, AX ;(AX)-DS MOV SI, AX ;(AX)-SI指令指令存放器存放器有效地址有效地址(EA)的的4種組成成分:種組成成分: 位移量位移量displaceme
3、nt 存放在指令中的存放在指令中的8位、位、16位或位或32位的數,是一個地址位的數,是一個地址 有效地址的計算:有效地址的計算: EA=基址基址 +變址變址*比例因子比例因子+ 位移量位移量 比例因子比例因子scale factor 32位匯編才有位匯編才有 其值可為其值可為1,2,4或或8,386及其后繼機型新添加的及其后繼機型新添加的 變址變址index 存放在變址存放器中的內容,用于訪問數組的某個元存放在變址存放器中的內容,用于訪問數組的某個元素素 基址基址base 存放在基址存放器中的內容,用于指向數組的首地址存放在基址存放器中的內容,用于指向數組的首地址四種成分四種成分16位尋址位
4、尋址位移量位移量0, 8, 16位位0, 8, 32位位基址寄存器基址寄存器BX, BP任何任何32位通用寄存器位通用寄存器(包括包括ESP)變址寄存器變址寄存器SI, DI除除ESP以外的以外的32位通用寄存器位通用寄存器比例因子比例因子 無無1, 2, 4, 81, 2, 4, 8訪存類型訪存類型 所用段及寄存器所用段及寄存器缺省選擇規(guī)則缺省選擇規(guī)則指令指令代碼段代碼段 CS用于取指用于取指堆棧堆棧堆棧段堆棧段 SSn所有的堆棧的進棧和出棧所有的堆棧的進棧和出棧n任何用任何用ESP或或EBP或或BP作作為基址寄存器的訪存為基址寄存器的訪存目的串目的串附加數據段附加數據段 ES串處理指令的目
5、的串串處理指令的目的串局部數據局部數據數據段數據段 DS除相對于堆棧以及串處理的除相對于堆棧以及串處理的目的串以外的所有數據訪問目的串以外的所有數據訪問1串操作指令的目的串必需用串操作指令的目的串必需用ES段段2PUSH指令的目的和指令的目的和POP指令的源必需用指令的源必需用SS段段3程序的指令必需存放在程序的指令必需存放在CS段段數據的存放比較靈敏,除了放在默許的數據的存放比較靈敏,除了放在默許的DS段,還可以段,還可以存放在別的段,此時訪問他們需求運用段超越前綴,存放在別的段,此時訪問他們需求運用段超越前綴,可用的段超越前綴有可用的段超越前綴有CS:, DS:, ES:, SS:, FS
6、:, GS:。3、直接尋址、直接尋址 操作數地址的偏移量操作數地址的偏移量EA在指令中在指令中段基地址段基地址EA操作數操作數+指令指令存儲器存儲器MOV AX, 2000H ; 立刻尋址立刻尋址MOV AX, 2000H ; 直接尋址直接尋址直接尋址例如直接尋址例如1 MOV AX, 1000H 物理地址物理地址 設設(DS)=10A0H 代碼段代碼段 + OP 00H 10H 數據段數據段 11A00H 30H 50H 50H 30H AX(本章中圖示存儲器地址從上到下遞增本章中圖示存儲器地址從上到下遞增低地址低地址10A00H1000H11A00H10A0H30H50H11A00H直接尋
7、址例如直接尋址例如2MOV BL, ES:0100H 物理地址物理地址 設設(ES)=3000H 30000H (DS)=2000H + 0100H 30100H 4B 00 BL4B在匯編言語指令中,可以用符號地址替代數值地址在匯編言語指令中,可以用符號地址替代數值地址如:如:MOV AX, BUFF或或 MOV AX, BUFF其中其中BUFF為存放數據單元的符號地址。為存放數據單元的符號地址。3000H30100H30100H4B4、存放器間接尋址、存放器間接尋址 操作數在存儲器中,操作數地址的偏移量操作數在存儲器中,操作數地址的偏移量EA在存放器中在存放器中EA操作數操作數+存儲器存儲
8、器指令指令存放器存放器段基地址段基地址存放器間接尋址例如存放器間接尋址例如 MOV AL, BX MOV AX, CS:SI MOV BP, AH MOV AH, BPMOV BX, SIMOV CX, SI設設 (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH 物理地址物理地址 物理地址物理地址 10000H 20000H + 0B10H + 032AH 40H 00H 3EH 46H40H AH10B10H2032AH463EH BX2032BH10B11H SI032AH032AH1000H2000H0B10H032AH10B10H10B10
9、H2032AH2032AH40H3EH46032AH5、基址尋址、基址尋址 操作數的有效地址是基址存放器的內容加上指令操作數的有效地址是基址存放器的內容加上指令中指定的位移量中指定的位移量地址地址+操作數操作數指指 令令基址存放器基址存放器段基地址段基地址存儲器存儲器EA基址尋址例如基址尋址例如 MOV AX, 3000HBX (或或BX+3000H) MOV AX, COUNTBX ; COUNT是符號地址是符號地址 或或 MOV AX,COUNT+BX 假設假設(DS)=3000H, (BX)=2000H,COUNT=4000H 30000H 2000H + 4000H 1234H3600
10、0H 34H 12HAX3000H2000H4000H36000H36000H34H12 6、變址尋址、變址尋址 地址地址+操作數操作數指指 令令變址存放器變址存放器段基地址段基地址存儲器存儲器EA變址尋址例如變址尋址例如 MOV CX, 6020HSI (或或SI+6020H) MOV DX, COUNTSI ; COUNT是符號地址是符號地址 或或 MOV AX,COUNT+SI 假設假設(DS)=3000H, (SI)=2000H,COUNT=1000H 30000H 2000H + 1000H 6734H33000H 34H 67HDX3000H2000H1000H33000H3300
11、0H34H67 7、基址變址尋址、基址變址尋址1無位移量的基址變址尋址無位移量的基址變址尋址 操作數的有效地址是一個基址存放器和一個變址存操作數的有效地址是一個基址存放器和一個變址存放器的內容之和放器的內容之和變址值變址值基址值基址值+操作數操作數指指 令令變址存放器變址存放器基址存放器基址存放器段基地址段基地址存儲器存儲器EA無位移量基址變址尋址例如無位移量基址變址尋址例如 MOV AX, BX+DI MOV AX, BXDI 假設假設 (DS)=2100H, (BX)=0158H, (DI)=10A5H,物理地址物理地址 21000H 0158H+ 10A5H 221FDH 34H 12H
12、1234HAX2100H0158H10A5H221FDH221FDH34H122基址變址相對尋址基址變址相對尋址 操作數的有效地址是一個基址存放器的內容、操作數的有效地址是一個基址存放器的內容、一個變址存放器的內容及位移量之和一個變址存放器的內容及位移量之和 變址值變址值基址值基址值+操作數操作數指指 令令變址存放器變址存放器基址存放器基址存放器段基地址段基地址存儲器存儲器EA基址變址相對尋址例如基址變址相對尋址例如 MOV AX, MASKBX+SI;MASK是符號地址是符號地址 假設假設 (DS)=3000H, (BX)=2000H, (SI)=1000H, MASK=0250H 物理地址
13、物理地址 30000H 2000H 1000H + 0250H 33250H 20H 43H 4320H AX3000H2000H1000H0250H33250H33250H20H438、端口尋址、端口尋址1直接尋址直接尋址I/O Port Direct Addressing直接尋址是運用一字節(jié)立刻數尋址,因此直接尋址是運用一字節(jié)立刻數尋址,因此I/O端口的端口的尋址范圍為尋址范圍為00HFFH,最多為,最多為256個。個。 2間接尋址間接尋址I/O Port Indirect Addressing 間接尋址由間接尋址由DX存放器間接給出存放器間接給出I/O端口地址,為兩個端口地址,為兩個字節(jié)
14、,所以最多可尋址字節(jié),所以最多可尋址216=64K個端口地址。個端口地址。 MOVDX, 3FCHINAL, DX;從;從3FCH端口讀入端口讀入1個字節(jié)個字節(jié)3.1.2 轉移操作尋址轉移操作尋址段內直接尋址段內直接尋址轉向的有效地址是當前轉向的有效地址是當前IP/EIP存放器的內容和指令存放器的內容和指令中指定的位移量之和。位移量在條件轉移以及短轉移中指定的位移量之和。位移量在條件轉移以及短轉移中只需中只需8位,其它情況下為位,其它情況下為16位。位。 偏移量偏移量機器碼機器碼程序程序00000405PROG_S: ADD AL,05H000290 NOP0003EBFB JMP SHORT
15、 PROG_S000590 NOP段內間接尋址段內間接尋址轉向有效地址是一個存放器或是一個存儲單元的內轉向有效地址是一個存放器或是一個存儲單元的內容容 。所得到的轉向的有效地址用來取代。所得到的轉向的有效地址用來取代IP/EIP存放器存放器的內容。的內容。 設:設:DS=2000H,BX=1000H,變量,變量TABLE的有效地址為的有效地址為1000H,21000H=0040H,22000H=5678H,那么以下三條指令分別執(zhí)行后結果如下:,那么以下三條指令分別執(zhí)行后結果如下: JMP BX;執(zhí)行后;執(zhí)行后IP=1000H JMP BX ;執(zhí)行后;執(zhí)行后IP=0040H JMP TABLEB
16、X ;執(zhí)行后;執(zhí)行后IP=5678H段間直接尋址段間直接尋址指令中直接提供了轉向段地址和偏移地址,用指令指令中直接提供了轉向段地址和偏移地址,用指令中提供的偏移地址取代中提供的偏移地址取代IP/EIP存放器,用指令中提供存放器,用指令中提供的段地址取代的段地址取代CS存放器的內容就完成從一個段到另一存放器的內容就完成從一個段到另一個段的轉移操作。個段的轉移操作。 JMP FAR PTR NEXT_PRO段間間接尋址段間間接尋址用存儲器中的相繼字的內容來取代用存儲器中的相繼字的內容來取代IP/EIP和和CS存放器存放器中的原始內容以到達段間轉移的目的。中的原始內容以到達段間轉移的目的。 設:設:
17、(DS)=2500H,(SI)=1300H,(26300H)=4500H,(26302H)=32F0H, 那么執(zhí)行以下指令后結果如下:那么執(zhí)行以下指令后結果如下:JMP DWORD PTR SI;執(zhí)行后;執(zhí)行后CS=32F0H,IP=4500H3.2 80 x86的指令系統(tǒng)的指令系統(tǒng)n數據傳送指令數據傳送指令n算術運算指令算術運算指令n邏輯運算與移位指令邏輯運算與移位指令n串操作指令串操作指令n控制轉移指令控制轉移指令n處置器控制指令處置器控制指令3.2.1數據傳送指令數據傳送指令 通用數據傳送指令通用數據傳送指令 地址傳送指令地址傳送指令 標志存放器傳送指令標志存放器傳送指令 輸入輸出指令輸
18、入輸出指令 類型轉換指令類型轉換指令1、通用數據傳送指、通用數據傳送指令令PUSH(push onto the stack) 進棧進棧POP(pop from the stack) 出棧出棧XCHG(exchange) 交換交換XLAT(translate) 換碼換碼存儲器存儲器段存放器段存放器CS DS SS ES立刻數立刻數通用存放器通用存放器AX BX CX DXBP SP SI DIMOV指令例如指令例如1MOV VALUE, 100H ;立刻數傳送到存儲單元;立刻數傳送到存儲單元MOV ES:BX, 4BHMOV AL, BL ;存放器之間傳送;存放器之間傳送MOV BP, SIMO
19、V指令例如指令例如2 MOV AX, ARRAYSI設設(DS)=3000H, (SI)=2000H, ARRAY=8000H 物理地址物理地址 30000H 2000H + 8000H 3A000H 3A000H 45H 0BH0B45H AXMOV指令本卷須知:指令本卷須知:闡明:闡明:1) 源操作數可以是存放器或存儲器操作數源操作數可以是存放器或存儲器操作數 2) 必需以字或雙字為單位操作必需以字或雙字為單位操作 3) 32位指令允許位指令允許SRC是是16位或位或32位立刻數,位立刻數,也允許是也允許是32位存放器和存儲器操作數位存放器和存儲器操作數舉例:舉例:PUSH AX PUSH
20、 DATBXSI PUSH 1234H PUSH 87654321H PUSH EAX 壓棧指令例如壓棧指令例如 PUSH AX 執(zhí)行前執(zhí)行前 AX AX 25H 31H SP 52500H 3125H3125H低地址低地址低地址低地址進棧方向進棧方向SP3125H524FEH524FFH52500H執(zhí)行后執(zhí)行后舉例:舉例:POP AX POP DATBXSI POP DS POP ECX出棧指令例如出棧指令例如 POP BX 執(zhí)行前執(zhí)行前 執(zhí)行后執(zhí)行后 BX BX 75C1H 低地址低地址 低地址低地址 SP 6Bh 51000H 6Bh 51000H 48h 1H 48h 1H 9Ah 2
21、H 9Ah 2H 28h 3H 28h 3H出棧方向出棧方向48h48h6BhSP操作:操作:PUSHA指令例如指令例如(DI) -16(SI) -14(BP) -12(SP)原原 -10(BX) -8(DX) -6(CX) -4(AX) -2 0(SP)原原(SP)執(zhí)行前執(zhí)行前執(zhí)行后執(zhí)行后操作:操作:闡明:闡明: 1操作數不允許為段存放器操作數不允許為段存放器 2兩個操作數長度必需一樣兩個操作數長度必需一樣 3本指令不影響形狀標志位本指令不影響形狀標志位 4兩個操作數不能同時為存儲器操作數兩個操作數不能同時為存儲器操作數如:如: XCHG AX, BX ;存放器之間交換;存放器之間交換 XC
22、HG BX, BP+DI ;存放器與存儲器之間交換;存放器與存儲器之間交換 XCHG SI, DX交換指令例如交換指令例如 XCHG DX, DATABP設設(SS)=5000H, (BP)=0400H, DATA=1800H 物理地址物理地址=5000H16+0400H+1800H=51C00H 執(zhí)行前執(zhí)行前 執(zhí)行后執(zhí)行后 DX DX 37CDH 51C00H 42H 51C00H 1H 6DH 1H CDH37H6D42H +6 36H +7 37H 34HAL LDS (load DS with pointer) 指針送存放器和指針送存放器和DS LES (load ES with po
23、inter) 指針送存放器和指針送存放器和ES LFS (load FS with pointer) 指針送存放器和指針送存放器和FS LGS (load GS with pointer) 指針送存放器和指針送存放器和GS LSS (load SS with pointer) 指針送存放器和指針送存放器和SS2、地址傳送指令、地址傳送指令LEA指令例如指令例如設設(DS)=2000H, (BX)=1234H LEA DI, BX MOV SI, BX 執(zhí)行后執(zhí)行后 執(zhí)行后執(zhí)行后 21234H 78H 5H 56H1234H1234HBXSI5678HSI78H1234H565678H78H56
24、21234H5HBUFFERSI1234HSI執(zhí)行后執(zhí)行后執(zhí)行后執(zhí)行后1234H78H56LES 、LFS、LGS、LSS 格式:同格式:同LDS,目的分別是,目的分別是ES,FS,GS,和,和SS存放器存放器 闡明:闡明: 1) 源操作數必需是存儲器操作數源操作數必需是存儲器操作數 2) 目的操作數必需是存放器目的操作數必需是存放器 3) 完成一個邏輯地址的傳送,該邏輯地址完成一個邏輯地址的傳送,該邏輯地址須用偽指令預先定義在當前數據段中須用偽指令預先定義在當前數據段中7659H2000HH 45HH D6HH 00HH 50H D645H5000HDSDIDI DSLDS指令例如指令例如
25、LDS DI, BX設設(DS)=2000H, (BX)=1000H執(zhí)行前執(zhí)行前執(zhí)行后執(zhí)行后LEA與與LDS的區(qū)別的區(qū)別LEA SI, BUFFLDS DI, BUFFBUFF(21000H) 45H +1 D6H +2 00H +3 50H 設設(DS)=2000HEABUFF=1000H執(zhí)行后:執(zhí)行后:SI=1000HDI=D645HDS=5000H3、標志存放器傳送指令、標志存放器傳送指令PUSHF/PUSHFD(push the flags or eflags) 標志進棧標志進棧POPF/POPFD(pop the flags or eflags) 標志出棧標志出棧闡明:闡明:1) 無
26、操作數無操作數 2) FLAGS中含假設干標志位,但中含假設干標志位,但LAHF指令本指令本身不影響標志位身不影響標志位闡明:無操作數闡明:無操作數4、輸入輸出指令、輸入輸出指令 IN(input) 輸入輸入 OUT(output) 輸出輸出闡明:用闡明:用Port指明指明8位端口地址時,地址范圍為位端口地址時,地址范圍為00H-FFH 以以DX間接給出端口地址時,最大地址為間接給出端口地址時,最大地址為0FFFFH操作:操作: AL/AX/EAX-(Port) 從外設讀入字節(jié)或字或雙字數據從外設讀入字節(jié)或字或雙字數據 AL/AX/EAXAL IN AX, 48H ;從端口;從端口48H讀入字
27、數據讀入字數據-AX MOV DX, 3FCH IN EAX, DX ;從端口;從端口03FCH讀入雙字數讀入雙字數-EAXOUT指令例如指令例如 OUT 32H, AX ;傳送字數據到;傳送字數據到32H端口端口 MOV DX,400H MOV AL, 86H OUT DX, AL ;傳送字節(jié)數據到;傳送字節(jié)數據到DX指出的端口指出的端口5、類型轉換指令、類型轉換指令闡明:闡明: 用于在符號數除之前,構成雙倍長度的被除用于在符號數除之前,構成雙倍長度的被除數數6、POP 指令不允許運用立刻數尋址方式,指令不允許運用立刻數尋址方式, 不允許運用不允許運用CS存放器存放器 例:例: POP 12
28、 ;不合法;不合法 POP CS ;不合法;不合法7、段存放器只能在、段存放器只能在MOV、PUSH、POP 指令中作為操作數出現指令中作為操作數出現 例:例:MOV ES, AX PUSH CS POP DS 但以下指令不合法:但以下指令不合法: MOV CS, reg POP CS8、指令有多種格式,普通都遵照以下規(guī)那么:、指令有多種格式,普通都遵照以下規(guī)那么:雙操作數指令中不允許兩個操作數均為存儲器操作數雙操作數指令中不允許兩個操作數均為存儲器操作數單操作數指令不允許立刻尋址方式單操作數指令不允許立刻尋址方式目的操作數不允許運用立刻尋址方式目的操作數不允許運用立刻尋址方式3.2.2 算術
29、運算指令算術運算指令1、無符號二進制數、無符號二進制數 字節(jié)可表示范圍:字節(jié)可表示范圍:0-255 字可表示范圍:字可表示范圍:0-655352、有符號二進制數、有符號二進制數 字節(jié)可表示范圍:字節(jié)可表示范圍:-128-+127 字可表示范圍:字可表示范圍:-32768-+327673、非緊縮十進制數、非緊縮十進制數 一個字節(jié)存放一位十制進數的一個字節(jié)存放一位十制進數的BCD 碼,高碼,高4位為位為0000。 例:十進數例:十進數57表示為:表示為: 00000101 00000111 0507H)4、緊縮十進制數、緊縮十進制數 一個字節(jié)存放兩位十進制數的一個字節(jié)存放兩位十進制數的 BCD碼碼
30、 例:十進數例:十進數57表示為:表示為: 01010111 57H以以8位數加法為例討論溢出位數加法為例討論溢出1、無符號數,有符號數都不溢出、無符號數,有符號數都不溢出 無符號數無符號數 有符號數有符號數 04H 4 4 +0BH + 11 + 11 0FH 15 15 CF=0 OF=02、無符號數溢出,有符號數不溢出、無符號數溢出,有符號數不溢出 無符號數無符號數 有符號有符號數數 07H 7 7 +FBH +251 +(-5) 1 02H 258 +2 (255) CF=1 OF=0指令構成方式:指令構成方式:ADD reg,imme ;存放器與立刻數相加;存放器與立刻數相加ADD
31、reg,reg ;存放器之間;存放器之間ADD reg,mem ;存放器加存儲器操作數;存放器加存儲器操作數ADD mem,imme ;存儲器加立刻數;存儲器加立刻數ADD mem,reg ;存儲器操作數加存放器;存儲器操作數加存放器 闡明:運轉結果對闡明:運轉結果對CF、SF、OF、PF、ZF、AF都會都會影響影響ADD指令例如指令例如1 ADD DX, BX 設設(DX)=4652H, (BX)=0F0F0H 4652H+ F0F0H1 3742H 0100 0110 0101 0010+ 1111 0000 1111 00001 0011 0111 0100 0010進位進位進位進位執(zhí)行
32、后執(zhí)行后 (DX)=3742H ZF=0 結果不為結果不為0 SF=0 結果為正結果為正 CF=1 有進位有進位 OF=0 不溢出不溢出ADD指令例如指令例如2 ADD WORD PTRBX, 9F76H 設設(DS)=2000H, (BX)=1000H 執(zhí)行前:執(zhí)行前: 21000 88H A988H A9H + 9F76H 1 48FEH 執(zhí)行后:執(zhí)行后: 21000 FEH CF=1 有進位有進位 48H OF=1 溢出溢出 ZF=0 結果不為結果不為0 SF=0 結果為正結果為正進位進位ADC指令例如指令例如雙字加法雙字加法 設設32位的目的操作數存放在位的目的操作數存放在DX和和AX
33、中,中,DX存放高位字,存放高位字,32位源操作數存放在位源操作數存放在BX和和CX中,中,BX存放高位字存放高位字 CF ADC ADDDXAXBXCXDXAX +指令序列為:指令序列為: ADD AX, CX ;低位加;低位加 ADC DX, BX ;高位加;高位加 執(zhí)行前執(zhí)行前(DX)=0418H, (AX)=0F365H (BX)=1005H, (CX)=0E024H 0418H DX 0F365H AX 1005H BX + 0E024H CX + 1 CF 141EH DX 1D389H AX CF=1如:如:DX:AX=37A1FFFFH, 那么那么DX:AX1能否用能否用: I
34、NC AX ADC DX,0來實現?來實現?INC指令例如指令例如LEA BX, ARRAYMOV AL, BX INC BXARRAY a1 +1 a2 +2 a3 +3 a4 MOV BX, 0MOV AL, ARRAYBX INC BX 8088中,執(zhí)行中,執(zhí)行INC BYTE PTRBX指令指令已在指令指令已在指令隊列中需求指令隊列中需求 個總線周期。個總線周期。 指令構成如下:指令構成如下: SUB reg, imme ;存放器減立刻數;存放器減立刻數 SUB reg, reg ;存放器之間相減;存放器之間相減 SUB reg, mem ;存放器減存儲器操作數;存放器減存儲器操作數
35、SUB mem, imme ;存儲器操作數減立刻數;存儲器操作數減立刻數 SUB mem, reg ;存儲器操作數減存放器;存儲器操作數減存放器闡明:運轉結果對闡明:運轉結果對CF、SF、OF、PF、ZF、AF都會影響都會影響SUB指令例如指令例如 SUB BX, CX 執(zhí)行前:執(zhí)行前: (BX)=9543H (CX)=28A7H 9543H - 28A7H 6C9CH 執(zhí)行后:執(zhí)行后: (BX)=6C9CH CF=0 OF=1 ZF=0 SF=0 0001HCF=1NEG指令例如指令例如1 NEG DX 執(zhí)行前:執(zhí)行前: (DX)=6780H 0000 - 6780 1 9880 執(zhí)行后:執(zhí)
36、行后: (DX)=9880H CF=1NEG指令例如指令例如2 NEG AL ;AL求補求補 ADD AL, 100 ;(AL)+100-AL 實現的功能為:實現的功能為: 100-(AL)借位借位1、兩個操作數相減,但結果不回送、兩個操作數相減,但結果不回送2、影響標志位的值,下一指令常是條件轉移指令、影響標志位的值,下一指令常是條件轉移指令3、必需區(qū)分無符號數比較與有符號數比較、必需區(qū)分無符號數比較與有符號數比較 如如 比較比較 11111111B 與與 00000000B 無符號數比較:無符號數比較: 255 0 有符號數比較:有符號數比較: -1 04、比較兩數能否相等,根據標志位、比
37、較兩數能否相等,根據標志位ZF判別判別 假設相等,那么假設相等,那么ZF=1;否那么;否那么ZF=0 5、指令構成同、指令構成同SUB指令指令比較兩數的大小比較兩數的大小 CMP DST, SRC1、無符號數比較、無符號數比較 DSTSRC DST0, SRC0 必不溢出必不溢出,OF=0 DST=5AH, SRC=46H DST=46H, SRC=5AH 5AH 46H - 46H - 5AH 14H ECH SF=0, DSTSRC SF=1, DST0, SRCSRC DST=10H SRC=95H DST=62H SRC=95H 10H 62H - 95H - 95H 7BH CDH
38、SF=0, OF=0 SF=1, OF=1 CMP指令例如指令例如1 CMP AL, BL 令令 (AL)= -64 (BL)=10 - 64 - 10 - 74 OF=0 SF=1 結論:結論: (DST)(SRC) CMPXCHG指令例如指令例如 CMPXCHG CX, DX 闡明:闡明: 1SRC可用存放器或存儲器尋址方式可用存放器或存儲器尋址方式 2無符號數乘與有符號數乘不同無符號數乘與有符號數乘不同 如如 11111111B11111111B 無符號數乘:無符號數乘: 255255 有符號數乘:有符號數乘: -1-1 3本指令影響標志位本指令影響標志位CF和和OFMUL, IMUL指
39、令例如指令例如 MUL BL (AL)=0B4H=180 (BL)=11H=17 1011 0100 0001 0001 1011 0100 1011 0100 101111110100(AX)=0BF4H=3060 0100 1100 0001 0001 0100 11000111 11000101 0000 1100(AX)=(-050C)補補 =FAF4H= -1292闡明:闡明:1乘積的字長和源、目的操作數的字長一致乘積的字長和源、目的操作數的字長一致 2能夠溢出能夠溢出 3SRC可用存放器或存儲器尋址方式可用存放器或存儲器尋址方式 REG只能是存放器尋址方式只能是存放器尋址方式 IM
40、M是立刻數是立刻數 4這些指令是這些指令是80186后新添加的后新添加的闡明:闡明: 1) 被除數的長度是指令中操作數的兩倍被除數的長度是指令中操作數的兩倍 2) 源操作數可用除立刻數以外的尋址方式源操作數可用除立刻數以外的尋址方式 3) 假設假設SRC=0或者商大于存放商的存放器的最大數值或者商大于存放商的存放器的最大數值范圍,都會引發(fā)范圍,都會引發(fā)“Divide error錯誤。因此,當被錯誤。因此,當被除數為除數為AX, DX:AX時,商最大是時,商最大是255和和65535DIV指令例如指令例如 MOV AX, 0000H ;裝入被除數;裝入被除數 10000H MOV DX, 000
41、1H MOV BX, 100H ;裝入除數;裝入除數 DIV BX ;10000H/100H MOV N1, AX ;存商;存商 MOV N2, DX ;存余數;存余數IDIV指令例如指令例如 計算計算-127/15,商存入,商存入RESULT單元單元 MOV AL, -127 ;裝入被除數;裝入被除數81H CBW ;字節(jié)擴展到字;字節(jié)擴展到字 MOV BL, 15 ;裝入除數;裝入除數 IDIV BL ;-127/15 MOV RESULT, AL ;存商;存商算術運算指令綜合例算術運算指令綜合例 計算計算(V-(X*Y+Z)/X,其中,其中X,Y,Z,V均為均為16位有符號數,位有符號數
42、,要求商存入要求商存入AX,余數存入,余數存入DX MOV AX, X IMUL Y ; X*Y MOV CX, AX MOV BX, DX ;積存;積存 BX, CX MOV AX, Z CWD ;Z擴展擴展 ADD CX, AX ;X*Y+Z ADC BX, DX MOV AX, V CWD ;V擴展擴展 SUB AX, CX ;相減;相減 SBB DX, BX IDIV X ;除以;除以X 十進制十進制BCD碼運算調整指令碼運算調整指令為什么需求調整?為什么需求調整?BCD碼的碼的10101111是無意義的。是無意義的。例:非緊縮十進數例:非緊縮十進數6和和7相加相加 0000 0110
43、 + 0000 0111 0000 1101 + 110 ;調整;調整 0001 0011 調整指令有兩類:調整指令有兩類:1、非緊縮、非緊縮BCD碼調整指令碼調整指令 AAA AAS AAM AAD2、緊縮、緊縮BCD碼調整指令碼調整指令 DAA DAS調整過程:調整過程: 假設假設 (AL&0FH)9 或或 (AF)=1 那么那么 (AL)+6-AL (AH)+1-AH 1-AF, AF-CF (AL)&0FH-AL 否那么否那么 (AL)&0FH-AL 0-AF, (AF)-CF闡明:闡明: 該指令放在二進制加法指令該指令放在二進制加法指令ADD之后之后 AAA指
44、令例如指令例如 計算十進制數計算十進制數9+4 MOV AL, 9H 09H MOV BL, 4H + 04H ADD AL, BL 0DH ;9 AAA + 06 H ;調整;調整 13H & 0FH 03H (AH)+ 1-AH結果:結果: (AH)=01H (AL)=03H CF=AF=1 AAA指令例如指令例如 計算十進制數計算十進制數9+9 MOV AL, 9H 09H MOV BL, 9H + 09H ADD AL, BL 12H ;AF=1 AAA + 06 H ;調整;調整 18H & 0FH 08H (AH)+ 1-AH結果:結果: (AH)=01H (AL)
45、=08H CF=AF=1 調整過程:調整過程: 假設假設 (AL&0FH)9 或或 (AF)=1 那么那么 (AL)-6-AL (AH)-1-AH (AL)&0FH-AL 1-AF, AF-CF 否那么否那么 (AL)&0FH-AL 0-AF, (AF)-CF AAS指令例如指令例如 計算十進制數計算十進制數16-7 MOV AX, 0106H 06H MOV BL, 7H - 07H SUB AL, BL FFH ; (AL)&0FH9 AAS - 6 H ;調整;調整 F9H & 0FH 09H (AH)-1-AH結果:結果: (AL)=09H CF
46、=AF=1 (AH)=00H調整后,調整后,(AH)=6 (AL)=3AAD指令例如指令例如 MOV AX, 0208H ;AX9 或或 (AF)=1 那么那么(AL)+6-AL 1-AF 假設假設(AL)9FH 或或 (CF)=1 那么那么(AL)+60H-AL 1-CF DAA指令例如指令例如1 計算十進制數計算十進制數29+18 MOV AL, 29H 29H MOV BL, 18H + 18H ADD AL, BL 41H ;AF=1 DAA + 6 ; 調整調整 47HDAA指令例如指令例如2 計算十進制數計算十進制數54+63 MOV AL, 54H 54H MOV BL, 63H
47、 + 63H ADD AL, BL B7 H ;9F DAA + 60H ; 調整調整 1 17H調整過程:調整過程: 假設假設 (AL&0FH)9 或或 (AF)=1 那么那么 (AL)-6-AL 1-AF 假設假設(AL)9FH 或或 (CF)=1 那么那么 (AL)-60H-AL 1-CFDAS指令例如指令例如 計算十進數計算十進數A-B A=4612 B=3576 MOV AL, A 12H SUB AL, B - 76H DAS 1 9CH ;AF,CF均均1 MOV D, AL - 66H ;所以用;所以用-66H調整調整 MOV AL, A+1 36H D SBB AL,
48、 B+1 CF=1 DAS MOV D+1, AL 46H 35H - 1 10H D+1結果結果10363.2.3 邏輯運算指令邏輯運算指令n邏輯非指令邏輯非指令 NOT n邏輯與指令邏輯與指令 ANDn邏輯或指令邏輯或指令 ORn邏輯異或指令邏輯異或指令 XORn測試指令測試指令 TESTNOT指令例如指令例如2 MOV AL, 1 ;1-AL NOT AL ;求反;求反 INC AL ;NOT指令例如指令例如1 MOV AL, 52H NOT AL 執(zhí)行前執(zhí)行前 AL 01010010 執(zhí)行后執(zhí)行后 AL 10101101 -1-ALOF=0AND指令例如指令例如1 MOV AL , 3
49、2H AND AL, 0FH ;屏蔽高四位操作;屏蔽高四位操作 執(zhí)行前執(zhí)行前 AL 00110010 2的的ASCII碼碼 執(zhí)行后執(zhí)行后 AL 00000010 AND指令例如指令例如2 AND AX, AX 執(zhí)行后執(zhí)行后 AX內容不變,內容不變, CF=0OF=0OR指令例如指令例如1 MOV AL, 02H OR AL, 0F0H ; 高四位置位高四位置位 執(zhí)行前執(zhí)行前 AL 00000010 執(zhí)行后執(zhí)行后 AL 11110010 OR指令例如指令例如2 MOV AL, 02H OR AL, 30H 執(zhí)行前執(zhí)行前 AL 00000010 執(zhí)行后執(zhí)行后 AL 00110010 ;2的的ASC
50、II碼碼 XOR指令例如指令例如1 MOV AL, 0B6H 1011 0110 XOR AL, 0FH 0000 1111 1011 1001 不變不變 變反變反XOR指令例如指令例如2 XOR AL, AL ;清零操作,且;清零操作,且CF=0指令指令時鐘數時鐘數指令字指令字節(jié)數節(jié)數8088 286386 486 PentiumMOV AX, 0432112AND AX, 0432113XOR AX, AX322112SUB AX, AX322113MOV BL, 0MUL BL432112143213842113OF=0 TEST指令例如指令例如1 測試測試AL最低位能否為最低位能否為1
51、,假設是,假設是1那么那么轉移轉移 TEST AL, 01H JNZ NEXT ;ZF=0轉轉TEST指令例如指令例如2 測試測試AX最高位能否為最高位能否為1,假設不是,假設不是1那么轉移那么轉移 TEST AX, 8000H JZ THERE ;ZF=1轉轉3.2.4 移位指令移位指令移位指令有移位指令有10條,分三類:條,分三類:1、移位指令:、移位指令:SHL邏輯左移邏輯左移 SHR邏輯右移邏輯右移 SAL算術左移算術左移 SAR算術右移算術右移2、循環(huán)移位指令:、循環(huán)移位指令:ROL循環(huán)左移循環(huán)左移 ROR循環(huán)右移循環(huán)右移 RCL帶進位循環(huán)左移帶進位循環(huán)左移 RCR帶進位循環(huán)右移帶進
52、位循環(huán)右移3、雙精度移位指令:、雙精度移位指令:SHLD雙精度左移雙精度左移 SHRD雙精度右移雙精度右移 SHL/SAL邏輯邏輯/算術左移算術左移SHR邏輯右移邏輯右移SAR 算術右移算術右移 00 CFCFb0 bnb0b0 bn bnCFROL循環(huán)左移循環(huán)左移RCL帶進位循帶進位循環(huán)左移環(huán)左移ROR循環(huán)右移循環(huán)右移RCR帶進位循帶進位循環(huán)右移環(huán)右移 CFCFCFCF知知(AL)=0B4H, (CF)=1, 分析以下指令執(zhí)行后的結果分析以下指令執(zhí)行后的結果 CF AL (1) SAL AL, 1 (2) SAR AL, 1 (3) SHL AL, 1 (4) SHR AL, 1 算術左移與
53、邏輯左移的結果一樣算術左移與邏輯左移的結果一樣 算術右移與邏輯右移的結果不同算術右移與邏輯右移的結果不同110110100101101000011011010101101000001011010執(zhí)行前執(zhí)行前移位指令例如移位指令例如2 MOV CL, 5 SAR AL, CL 執(zhí)行前執(zhí)行前 AL 01100000 60H=96 執(zhí)行后執(zhí)行后 AL 00000011 03H=3 通常通常:算術右移算術右移N位相當于有符號數除以位相當于有符號數除以2N有例外有例外 邏輯右移邏輯右移N位相當于無符號數除以位相當于無符號數除以2N 算術算術/邏輯左移邏輯左移N位相當于無符號數乘以位相當于無符號數乘以2N
54、移位指令例如移位指令例如3 設設(AX)=0012H, (BX)=0034H, 要求裝配成要求裝配成(AX) = 1234H MOV CL, 8 ROL AX, CL ADD AX, BX0110000000000011移位指令例如移位指令例如4 知變量知變量Y中為一字節(jié)無符號數,計算中為一字節(jié)無符號數,計算(Y)*10, 積放積放在在AX中。中。變換:變換:(Y)*10(Y)*(8+2)=(Y)*2+(Y)*8 (為什么要這樣變換?為什么要這樣變換? MOV AL, Y ; AL-(Y) MOV AH, 0 SHL AX, 1 ; (Y)*2 MOV BX, AX SHL AX, 1 ; (
55、Y)*4 SHL AX, 1 ; (Y)*8 ADD AX, BX ; (Y)*10綜合運用例綜合運用例1 將將ASCII碼轉換成碼轉換成BCD碼碼 如:如: ASC 9 BCD 6 96H MOV AL, ASC ; AL90H MOV BL, AL ;BL-90H MOV AL, ASC+1 ;AL-36H (6) AND AL, 0FH ;AL-06H OR BL, AL ;BLSI目的區(qū)首偏址目的區(qū)首偏址-DI,串長,串長-CXCX=0按按DI所指存此字節(jié)所指存此字節(jié)按按SI所指取一字節(jié)所指取一字節(jié)(SI)+1-SI(DI)+1-DI(CX)-1-CX終了終了YN源區(qū)首偏址源區(qū)首偏址-
56、SI目的區(qū)首偏址目的區(qū)首偏址-DI串長串長-CX,0-DFCX=0串傳送指令串傳送指令(CX)-1-CX終了終了源區(qū)首偏址源區(qū)首偏址-SI目的區(qū)首偏址目的區(qū)首偏址-DI串長串長-CX,0-DF帶前綴帶前綴REP的的串傳送指令串傳送指令YN運用串操作指令時微處置器設計有假設干商定:運用串操作指令時微處置器設計有假設干商定: 1、源串地址由、源串地址由DS:SI指定指定 目的串地址在目的串地址在ES:DI中中 2、串長送、串長送CX存放器存放器 3、設置方向標志位、設置方向標志位DF在在EFLAG存放器中存放器中 當當DF=0指令指令CLD時為增量修正時為增量修正 +1 或或 +2 或或 +4 當
57、當DF=1指令指令STD時為減量修正時為減量修正 -1 或或 2 或或 -4 方向標志對應的指針挪動表示方向標志對應的指針挪動表示 低地址方向低地址方向 A . 源串源串 A J 高地址方向高地址方向目的串目的串 源串源串 目的串目的串1 nn . 正向傳送正向傳送 反向傳送反向傳送DF=0 DF=11J 符號 功能 操作 相關前綴 MOVS 串傳送 ES:DI-(DS:SI) REP SI-(SI)(+/-)1 DI-(DI)(+/-)1CMPS 串比較 (DS:SI)-(ES:DI) REPZ/REPNZ SI-(SI)(+/-)1 DI-(DI)(+/-)1SCAS 串掃描 (ES:DI
58、)-(AL) REPZ/REPNZ DI-(DI)(+/-)1LODS 裝入串 AL-(DS:SI) 普通不聯用 SI-(SI)(+/-)1 STOS 存入串 (ES:DI)-(AL) REP DI-(DI)(+/-)1符號符號 功能功能 操作操作 相關前綴相關前綴INS 串輸入串輸入 ES:DI(DX) REP DI(DI)(+/-)1OUTS 串輸出串輸出 (DX)(DS:SI) REP SI(SI)(+/-)1其中其中DX存放器中存放的是接口電路的端口號存放器中存放的是接口電路的端口號反復前綴反復前綴 終止條件終止條件 否那么否那么 REP CX=0 CX-(CX)-1,繼續(xù),繼續(xù) SI
59、,DI指向下一元素指向下一元素REPZ CX=0 或或 ZF=0 CX-(CX)-1,繼續(xù),繼續(xù)REPE SI,DI指向下一元素指向下一元素 串未終了且串相等時繼續(xù)串未終了且串相等時繼續(xù)REPNZ CX=0 或或 ZF=1 CXSI LEA DI, String2 ;目的串地址;目的串地址-DIMOV CX, 4 ;反復次數;反復次數-CXREPZ CMPSB ;反復比較;反復比較JZ NEXT ;串相等轉移;串相等轉移 .NEXT:SCAS指令例如指令例如 在串在串“That is CAI中查找字符中查找字符a,找到,那,找到,那么轉到標號么轉到標號FOUND處處 String DB Tha
60、t is CAI ;定義串 CLD ;DF=0LEA DI, String ;串地址-DIMOV AL, a ;查找字符-ALMOV CX, 11 ;反復次數-CXREPNZ SCASB ;反復掃描JZ FOUND ;找到目的串元素轉移 FOUND: LEA SI, SOURCE ;源串偏移量;源串偏移量-SILEA DI, DESTIN ;目的串偏移量;目的串偏移量-DICLD ;DF=0MOV CX,100 ;反復比較次數;反復比較次數-CXREPZ CMPSB ;反復串比較;反復串比較JCXZ MATCH ;沒有不匹配元素跳轉;沒有不匹配元素跳轉DEC SI ;指向不匹配元素;指向不匹配元素LODSB ;裝入不匹配元素到;裝入不匹配元素到AL .MATCH: LOD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買貓合同范本
- 中國多普勒血流探測儀市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 業(yè)主房子托管合同范本
- 包材采購合同范例
- 代工生產合同范本
- 勞務公司與臨時工合同范本
- 鋼結構加工制作合同范本
- 兩層鋪面房屋租賃合同范本
- 重慶城區(qū)房屋出租合同范本
- 農業(yè)合作合同范本
- 沖動式與反動式汽輪機的優(yōu)劣比較
- 新起點新作為初二開學第一課主題班會
- 國有企業(yè)內部審計工作制度(3篇)
- 新人教版高中數學必修二全冊教學課件ppt
- 2023年檢驗檢測機構質量手冊(依據2023年版評審準則編制)
- 天冬的栽培技術
- 興??h索拉溝銅多金屬礦礦山地質環(huán)境保護與土地復墾方案
- 輪值安全員制度
- 2022年上海市高三16區(qū)高考一模卷英語聽力試題及原文帶答案(附聽力音頻獲取)合集
- 冀教版七年級下冊英語課文翻譯
- 公司“安全生產”流動紅旗評選實施辦法
評論
0/150
提交評論