[教育]運算程序設(shè)計及應(yīng)用舉例_第1頁
已閱讀1頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微機原理與匯編語言,第5章 運算程序設(shè)計及應(yīng)用舉例 5.1 算術(shù)運算 5.2 數(shù)碼轉(zhuǎn)換 5.3 邏輯運算 5.4 字符串處理,算術(shù)指令:? 加法指令 ADD、ADC、INC? 減法指令 SUB、SBB、DEC、NEG、CMP? 乘法指令 MUL、IMUL

2、? 除法指令 DIV、IDIV? 十進制調(diào)整指令 DAA、DAS、 AAA、AAS、AAM、AAD,? 加法指令 加法指令: ADD DST, SRC 執(zhí)行操作: (DST) ? (SRC) + (DST) 帶進位加法指令: ADC DST, SRC 執(zhí)行操作: (DST) ? (SRC) + (DST)

3、 + CF 加1指令: INC OPR 執(zhí)行操作: (OPR) ? (OPR) + 1,注意: * 除INC指令不影響CF標志外,均對條件標志位有影響。,加法指令對條件標志位的影響,CF 位表示 無符號數(shù) 相加的溢出。OF 位表示 帶符號數(shù) 相加的溢出。,1 結(jié)果為負0 否則,SF=,,1 結(jié)果為00 否則,Z

4、F=,,1 和的最高有效位 有 向高位的進位0 否則,CF=,,1 兩個操作數(shù)符號相同,而結(jié)果符號與之相反0 否則,OF=,,舉例: n=8 bit 帶符號數(shù)(-128~127) , 無符號數(shù)(0~255),0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1帶:(+4)+(+11)=+15

5、 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

6、 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 0 1 1 1 1 1 0 0帶:(-121)+(-11

7、)=+124 OF=1無:135+245=124 CF=1,,例:雙精度數(shù)的加法 (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 8100H 指令序列 ADD AX, CX ; (1) ADC DX, BX ; (2)

8、 (1) 執(zhí)行后,(AX) = 7465H CF=1 OF=1 SF=0 ZF=0 (2) 執(zhí)行后,(DX) = 0008H CF=0 OF=0 SF=0 ZF=0,? 減法指令減法指令: SUB DST, SRC

9、 執(zhí)行操作: (DST) ? (DST) - (SRC)帶借位減法指令: SBB DST, SRC 執(zhí)行操作: (DST) ? (DST) - (SRC) - CF減1指令: DEC OPR 執(zhí)行操作: (OPR) ? (OPR) - 1求補指令: NEG OPR 執(zhí)行操作: (OPR) ? - (OP

10、R)比較指令: CMP OPR1, OPR2 執(zhí)行操作: (OPR1) - (OPR2),注意: * 除DEC指令不影響 CF標志外,均對條 件標志位有影響。,減法指令對條件標志位(CF/OF/ZF/SF)的影響:,CF 位表示 無符號數(shù) 減法的溢出。OF 位表示 帶符號數(shù) 減法的溢出。,1 被減數(shù)的最高有效位 有 向高位的借位0 否則,CF=,,1 兩

11、個操作數(shù)符號相反,而結(jié)果的符號與減數(shù)相同0 否則,OF=,,1 減法轉(zhuǎn)換為加法運算時 無 進位0 否則,CF=,,或,NEG 指令對CF/OF的影響,0 操作數(shù)為01 否則,CF =,,1 操作數(shù)為 -128 (字節(jié)運算)或 操作數(shù)為 -32768 (字運算)0 否則,OF =,,0 0 0 1 1 1 1 0

12、 + 0 0 0 1 1 1 1 1,NEG 指令對CF/OF的影響,0 操作數(shù)為01 否則,CF =,,1 操作數(shù)為 -128 (字節(jié)運算)或 操作數(shù)為 -32768 (字運算)0 否則,OF =,,0 0 0 0 1 1 1 1 + 0 0 0 1 1 0 0 0 0,,,1 0

13、0 0 0 1 1 1 + 0 0 0 1 1 0 0 0,,,例: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, XMOV DX, X+2ADD AX, YA

14、DC DX, Y+2 ; x+yADD AX, 24ADC DX, 0 ; x+y+24SUB AX, ZSBB DX, Z+2 ; x+y+24-zMOV W, AXMOV W+2, DX ; 結(jié)果存入W, W+2單元,? 乘法指令 無符號數(shù)乘法指令: MUL SRC 帶符號數(shù)乘法指令:

15、 IMUL SRC 執(zhí)行操作: 字節(jié)操作數(shù) (AX) ? (AL) * (SRC) 字操作數(shù) (DX, AX) ? (AX) * (SRC),注意: * AL (AX) 為隱含的乘數(shù)寄存器。* AX (DX,AX) 為隱含的乘積寄存器。* SRC不能為立即數(shù)。* 除CF和OF外,對條件標志位無定義

16、。,乘法指令對 CF/OF 的影響:,例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) ? (AL) * (BL) ; A5*11 ? 5B*11=060B ? F9F5 ; (AX) = 0F9

17、F5H CF=OF=1 (2) MUL BX ; (DX, AX) ? (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX)=0089H (AX)=5EF5H CF=OF=1,00 乘積的高一半

18、為零11 否則,MUL指令: CF,OF =,,00 乘積的高一半是低一半的符號擴展11 否則,IMUL指令: CF,OF =,,1010 01010101 1011,,? 除法指令 無符號數(shù)除法指令: DIV SRC 帶符號數(shù)除法指令: IDIV SRC 執(zhí)行操作: 字節(jié)操作 (AL) ? (AX) / (SRC)

19、 的商 (AH) ? (AX) / (SRC) 的余數(shù) 字操作 (AX) ? (DX, AX) / (SRC) 的商 (DX) ? (DX, AX) / (SRC) 的余數(shù)注意: * AX (DX,AX) 為隱含的被除數(shù)寄存器

20、。 * AL (AX) 為隱含的商寄存器。 * AH (DX) 為隱含的余數(shù)寄存器。 * SRC不能為立即數(shù)。 * 對所有條件標志位均無定義。如何判別結(jié)果有效?,例:x , y , z , v 均為16位帶符號數(shù),計算 ( v - ( x*y + z – 540 ) ) / x,MOV AX,

21、 X IMUL Y ; x*y →(DX,AX)MOV CX, AXMOV BX, DXMOV AX, ZCWD ;Z →(DX,AX)ADD CX, AXADC BX, DX ; x*y+z →(BX,CX)SUB CX, 540 SBB BX, 0 ; x*y+z-540MOV AX, VCWD

22、 ;V →(DX,AX)SUB AX, CXSBB DX, BX ; v-(x*y+z-540)IDIV X ; (v-(x*y+z-540))/x→(AX) 余數(shù)→(DX),? 十進制調(diào)整指令BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)壓縮的BCD碼:用 4 位二進制數(shù)表示 1 位十進制數(shù) 例:( 59 )1

23、0 =( 0101 1001 )BCD非壓縮的BCD碼:用 8 位二進制數(shù)表示 1 位十進制數(shù) 例:( 59 )10 =( 0000 0101 0000 1001 )BCD數(shù)字的 ASCII 碼是一種 非壓縮的 BCD 碼 DIGIT ASCII BCD030H0011 0000131H0011 0001232H0011 0010……

24、 …939H0011 1001,,例:寫出( 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,P

25、AKED 90H 35H,,,,,,,,UNPAK 00H 09H 05H 03H,問題的提出:,十進制調(diào)整指令,19 壓縮BCD: 0001 1001,27 0010 0001 +

26、 110,+ 08 + 0000 1000,,,(0010 0111)BCD,,,AF=1,,,(1)壓縮的BCD碼調(diào)整指令● DAA 加法的十進制調(diào)整指令 ● DAS 減法的十進制調(diào)整指令 (2)非壓縮的BCD碼調(diào)整指令● AAA 加法的ASCII碼調(diào)整指令● AAS 減

27、法的ASCII碼調(diào)整指令● AAM 乘法的ASCII碼調(diào)整指令● AAD 除法的ASCII碼調(diào)整指令,邏輯指令: ? 邏輯運算指令 AND、OR、NOT、XOR、TEST ? 移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR,邏輯指令:AND“與”運算兩個對應(yīng)位同時為1,運算結(jié)果的對應(yīng)位

28、為1,否則為0。OR“或”運算兩個對應(yīng)位同時為0,運算結(jié)果的對應(yīng)位為0,否則為1。XOR“異或”運算兩個對應(yīng)位相同時,運算結(jié)果的對應(yīng)位為0,否則為1。NOT“非”運算將原操作數(shù)的各位取反,即“1”變?yōu)椤?”,“0”變?yōu)椤?”,邏輯與指令:AND DST, SRC執(zhí)行操作: (DST) ? (DST) ? (SRC)邏輯或指令:OR DST, SRC執(zhí)行操作: (DST) ? (DST) ? (SR

29、C)異或指令: XOR DST, SRC執(zhí)行操作: (DST) ? (DST) ⊕ (SRC)測試指令: TEST OPR1, OPR2執(zhí)行操作: (OPR1) ? (OPR2)邏輯非指令:NOT OPR * OPR不能為立即數(shù)執(zhí)行操作: (OPR) ? (OPR) * 不影響標志位,,CF OF SF ZF PF AF 0

30、 0 * * * 無定義,,根據(jù)運算結(jié)果設(shè)置,? 邏輯運算指令,,例:屏蔽AL的第0、1兩位 AND AL, 0FCH例:置AL的第5位為1 OR AL, 20H 例:使AL的第0、1位變反 XOR AL, 3例:測試某些

31、位是0是1 TEST AL, 1 JZ EVEN,* * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * *,,* * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * *

32、* * * * 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 *,,邏輯左移 SHL OPR, CNT邏輯右移 SHR OPR, CNT

33、算術(shù)左移 SAL OPR, CNT(同邏輯左移)算術(shù)右移 SAR OPR, CNT,,,,,,,,CF 0,,,,,,0 CF,CF,,,,,,,,,,? 移位指令,,,,循

34、環(huán)左移 ROL OPR, CNT循環(huán)右移 ROR OPR, CNT帶進位循環(huán)左移 RCL OPR, CNT帶進位循環(huán)右移 RCR OPR, CNT,CF,,,,,CF,,,,,,,CF,,,,,,,,,,,,,,,CF,,,帶進位的循環(huán)左移指令,例:將32位數(shù)12345678H算術(shù)左移一位。MOV AX,5678HMOV DX,1234HSAL AX,1RCL DX,1結(jié)果為(A

35、X)=0ACF0H, (DX)=2468H,例:(AX)= 0012H,(BX)= 0034H,把它們裝配成(AX)= 1234H,例:(BX) = 84F0H (1) (BX) 為無符號數(shù),求 (BX) / 2 SHR BX, 1 ; (BX) = 4278H (2) (BX) 為帶符號數(shù),求 (BX) ×2

36、 SAL BX, 1 ; (BX) = 09E0H, OF=1 (3) (BX) 為帶符號數(shù),求 (BX) / 4 MOV CL, 2 SAR BX, CL ; (BX) = 0E13CH,MOV CL, 8ROL AX, CLADD AX, BX,MOV C

37、H, 4 ; 循環(huán)次數(shù)MOV CL, 4 ; 移位次數(shù)NEXT: ROL BX, CLMOV AX, BXAND AX, 0FHPUSH AXDEC CHJNZ NEXT,,,,,,,0008,0004,000F,0000 ? (SP),(3) (BX)=84F0H,把 (BX) 中的 16 位數(shù)每 4 位壓入堆棧,第4章 8086指令系統(tǒng)及尋址

38、方式,4.5 表達式與操作符常量、變量、標號常量字符串常量用單引號‘ ’、或者雙引號“ ”括起來的一個或多個ASCⅡ字符,如‘A1’、‘B’、‘5’、‘GOOD’匯編程序把字符串常量表示成一個字節(jié)序列,一個字節(jié)對應(yīng)一個字符,并把該字符翻譯成它的ASCⅡ碼值進行存儲。如‘5’轉(zhuǎn)換成ASCⅡ碼值就是273527H,串處理指令: ? 設(shè)置方向標志指令 CLD、STD ? 串處理指

39、令 ? 串重復(fù)前綴 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE /

40、REPNZ CMPSB / CMPSW SCASB / SCASW,與 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),MOVS 串傳送

41、指令:MOVS DST, SRCMOVSB (字節(jié))MOVSW (字)例:MOVS ES: BYTE PTR [DI], DS: [SI] 執(zhí)行操作: (1) ((DI)) ← ((SI)) (2) 字節(jié)操作:(SI)←(SI)±1, (DI)←(DI)±1

42、 字操作: (SI)←(SI)±2, (DI)←(DI)±2 方向標志 DF=0 時用 + ,DF=1 時用 - 。 REP MOVS:將數(shù)據(jù)段中的整串數(shù)據(jù)傳送到附加段中。 源串(數(shù)據(jù)段)→ 目的串(附加段),執(zhí)行 REP MOVS 之前,應(yīng)先做好:(1) 源串首地址(末地址)→

43、SI(2) 目的串首地址(末地址)→ DI(3) 串長度 → CX(4) 建立方向標志 ( CLD 使 DF=0,STD 使 DF=1 ),(SI)? ?(DI),數(shù)據(jù)段 附加段,,,,,,,(SI)?

44、 ?(DI),,,,,,data segment mess1 db ‘personal_computer’data endsextra segment mess2 db 17 dup (?)extra endscode segment mov ax, data movds,ax mo

45、vax, extra mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb …code ends,data segment mess1 db ‘personal_computer’ mess2 db 17 dup (?)data endscode segment mov ax, data mo

46、vds, ax mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb …code ends,LODS 從串取指令: LODS SRC LODSB (字節(jié)) LODSW (字)執(zhí)行操作: 字節(jié)操作:(AL)←((SI)), (SI

47、)←(SI)±1 字操作:(AX)←((SI)), (SI)←(SI)±2,注意: * LODS 指令一般不與 REP 聯(lián)用* 源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改), 目的串必須在附加段中* 不影響條件標志位,與 REPE / REPZ(REPNE / REPNZ)配合工作的 CMPS 和 SCAS REPE / REP

48、Z 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),CMPS 串比較指令:

49、 CMPS SRC, DST CMPSB (字節(jié)) CMPSW (字) 執(zhí)行操作: (1) ((SI)) - ((DI)) 根據(jù)比較結(jié)果置條件標志位:相等 ZF=1

50、 不等 ZF=0 (2) 字節(jié)操作:(SI)←(SI)±1, (DI)←(DI)±1 字操作: (SI)←(SI)±2, (DI)←(DI)±2,SCAS 串掃描指令: SCAS DST SCASB (字節(jié)) SCASW (字)

51、執(zhí)行操作: 字節(jié)操作:(AL) - ((DI)), (DI)←(DI)±1 字操作: (AX) - ((DI)), (DI)←(DI)±2,例:從一個字符串中查找一個指定的字符 mess db ‘COMPUTER’ lea di, mess mov al, ‘T’ mov cx, 8 cld repne scasb,

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論