算術邏輯運算類_第1頁
算術邏輯運算類_第2頁
算術邏輯運算類_第3頁
算術邏輯運算類_第4頁
算術邏輯運算類_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

算術運算類指令用來執行二進制的算術運算:加減乘除。這類指令會根據運算結果影響狀態標志,有時要利用某些標志才能得到正確的結果;使用他們時請留心有關狀態標志重點掌握加法指令:ADD、ADC、INC減法指令:SUB、SBB、DEC、CMP、NEG4.3.2算術運算類指令算術運算類指令

可處理:不帶符號/帶符號的8/16位二進制數不帶符號的壓縮型(2位BCD碼)/非壓縮型(一位BCD碼,高4位補0)十進制數

對于加法和減法指令,帶符號和不帶符號的加減運算的操作過程無區別,可用同一條加法/減法指令完成

對于乘法除法運算,運算過程完全不同,分別設有不帶符號和帶符號的乘法除法的指令

對于十進制運算,先采用二進制運算指令,后進行十進制調整的方式來實現加法指令:ADD,ADC和INC減法指令:SUB,SBB,DEC,NEG和CMP他們分別執行字或字節的加法和減法運算,除INC和DEC不影響CF標志外,其他按定義影響全部狀態標志位操作數組合:運算指令助記符reg,imm/reg/mem運算指令助記符mem,imm/reg4.3.2.1加法和減法指令

ADD

dest,src

;加法:dest←dest+src

;ADD指令使目的操作數加上源操作數,和的結果送到目的操作數

SUB

dest,src

;減法:dest←dest-src

;SUB指令使目的操作數減去源操作數,差的結果送到目的操作數1.加和減指令MOVAX,7348H ;AX=7348HADDAL,27H

;AL=48H+27H=6FH,AX=736FH

;OF=0,SF=0,ZF=0,PF=1,CF=0ADDAX,3fffH

;AX=736FH+3FFFH=B36EH

;OF=1,SF=1,ZF=0,PF=0,CF=0例4加法SUBAH,0F0H

;AH=B3H-F0H=C3H,AX=C36EH

;OF=0,SF=1,ZF=0,PF=1,CF=1MOVwordptr[200H],0EF00H

;[200H]=EF00H,標志不變SUB[200H],AX

;[200H]=EF00H-C36EH=2B92H

;OF=0,SF=0,ZF=0,PF=0,CF=0SUBSI,SI ;SI=0

;OF=0,SF=0,ZF=1,PF=1,CF=0例5減法ADC

dest,src

;加法:dest←dest+src+CF

;ADC指令除完成ADD加法運算外,還要加上進位CF,結果送到目的操作數SBB

dest,src

;減法:dest←dest-src-CF

;SBB指令除完成SUB減法運算外,還要減去借位CF,結果送到目的操作數2.帶進位加和減指令MOVAX,7856H ;AX=7856HMOVDX,8234H ;DX=8234HADDAX,8998H ;AX=01EEH,CF=1ADCDX,1234H ;DX=9469H,CF=0SUBAX,4491H ;AX=BD5DH,CF=1SBBDX,8000H ;DX=1468H,CF=0例6無符號雙字加法和減法CMP

dest,src

;做減法運算:dest-src

;CMP指令將目的操作數減去源操作數,但差值不回送目的操作數比較指令通過減法運算影響狀態標志,用于比較兩個操作數的大小關系,后面跟轉移指令判斷兩個無符號數大小用JC/JNC或JA/JNBE或JB/JNAE指令判斷兩個帶符號數大小用JG/JNLE或JL/JNGE3.比較指令CMP(compare)INC

reg/mem

;增量(加1):reg/mem←reg/mem+1DEC

reg/mem

;減量(減1):reg/mem←reg/mem-1INC指令和DEC指令是單操作數指令與加法和減法指令實現的加1和減1不同的是:INC和DEC不影響CF標志INCSI ;SI←SI+1DECbyteptr[SI] ;[SI]←[SI]-14.增量和減量指令例7比較指令CMP(compare)若自BLOCK開始的內存緩沖區中,有100個帶符號字數據,要找出其中的最大數,把它存到MAX單元中

MOVBX,OFFSETBLOCKMOVAX,[BX]INCBXINCBXMOVCX,99AGAIN:CMPAX,[BX]JGNEXTMOVAX,[BX]NEXT:INCBX,INCBXDECCXJNZAGAINMOVMAX,AXHLTNEGreg/mem

;reg/mem←0-reg/memNEG指令對操作數執行求補運算,即用零減去操作數,然后結果返回操作數求補運算可表達成:將操作數按位取反后加1NEG指令對標志的影響與用零作減法的SUB指令一樣NEG指令也是一個單操作數指令NEG指令執行的結果一般總是使CF=1除非操作數為0時CF=05.求補指令NEG(negtive)MOVAX,0FF64HNEGAL

;AL=0-64H=9CH,AX=FF9CH

;OF=0SF=1,ZF=0,PF=1,CF=1SUBAL,9DH;AL=FFH,AX=FFFFH

;OF=0,SF=1,ZF=0,PF=1,CF=1NEGAX

;AX=0-FFFFH=0001H

;OF=0,SF=0,ZF=0,PF=0,CF=1DECAL

;AL=01H-1=0,AX=0000H

;OF=0,SF=0,ZF=1,PF=1,CF=1NEGAX

;AX=0-0=0

;OF=0,SF=0,ZF=1,PF=1,CF=0例8求補運算十進制數調整指令對二進制運算的結果進行十進制調整,以得到十進制的運算結果,以此實現十進制BCD碼運算8086指令系統支持兩種BCD碼調整運算壓縮BCD碼就是通常的8421碼;它用4個二進制位表示一個十進制位,一個字節可以表示兩個十進制位,即00~99非壓縮BCD碼用8個二進制位表示一個十進制位,只用低4個二進制位表示一個十進制位0~9,高4位為04.3.2.2十進制調整指令十進制調整指令DAA/DAS指令:十進制調整指令它跟在ADD/ADC或SUB/SBB之后,功能是將AL中十進制數相加/減后的結果進行校正,產生一個組合的十進制和/差,仍保留在AL中

AAA/AAS指令:十進制調整指令它跟在ADD/ADC或SUB/SBB之后,對AL中兩個未組合的十進制數相加/減后的結果進行校正,產生一個未組合的十進制和/差

,仍保留在AL中

乘法指令分無符號和有符號乘法指令

MULreg/mem ;無符號乘法

IMULreg/mem ;有符號乘法AL或AX與另一個操作數相乘,結果送到AL和AH(兩個字節相乘),或送到AX和它的擴展部分DX(兩個字相乘)除法指令分無符號和有符號除法指令

DIVreg/mem ;無符號除法

IDIVreg/mem ;有符號除法字節除法:AX÷源操作數(8位),商在AL中,余數在AH中字除法:DX,AX

÷源操作數(16位),商在AX中,余數DX中4.3.2.3乘法和除法指令真值(十進制)

8 64二進制編碼

08H 40H壓縮BCD碼

08H 64H非壓縮BCD碼

08H 0604HASCII碼

38H 3634H壓縮BCD碼加減法調整指令DAADAS非壓縮BCD碼加減法調整指令AAAAASAAMAAD編碼的比較位操作類指令以二進制位為基本單位進行數據的操作當需要對字節或字數據中的各個二進制位操作時,可以考慮采用位操作類指令注意這些指令對標志位的影響1.邏輯運算指令ANDORXORNOTTEST2.移位指令SHLSHRSARSAL3.循環移位指令ROLRORRCLRCR4.3.3邏輯運算指令雙操作數邏輯指令AND、OR、XOR和TEST,根據結果設置SF、ZF和PF狀態,而對AF未定義;指令的執行使CF=OF=0

:運算指令助記符

reg,imm/reg/mem運算指令助記符

mem,imm/reg

單操作數邏輯指令NOT不影響標志位:NOTreg/mem4.3.3.1邏輯運算指令對兩個操作數執行邏輯與運算,結果送目的操作數ANDdest,src

;dest←dest∧src

只有相“與”的兩位都是1,結果才是1;否則,“與”的結果為01.邏輯與指令AND對兩個操作數執行邏輯或運算,結果送目的操作數ORdest,src

;dest←dest∨src只要相“或”的兩位有一位是1,結果就是1;否則,結果為02.邏輯或指令OR對兩個操作數執行邏輯異或運算,結果送目的操作數XORdest,src

;dest←dest⊕src只有相“異或”的兩位不相同,結果才是1;否則,結果為03.邏輯異或指令XOR對兩個操作數執行邏輯與運算,結果并不送目的操作數,僅按AND指令影響標志TESTdest,src

;dest∧src

AND與TEST指令的關系,同SUB與CMP指令的關系一樣4.測試指令TEST對一個操作數執行邏輯非運算NOTreg/mem

;reg/mem←~reg/mem

按位取反,原來是“0”的位變為“1”;原來是“1”的位變為“0”5.邏輯非指令NOTMOVAL,75H ;AL=75HANDAL,32H ;AL=30H

;CF=OF=0,SF=0,ZF=0,PF=1ORAL,71H ;AL=71H

;CF=OF=0,SF=0,ZF=0,PF=1XORAL,0F1H ;AL=80H

;CF=OF=0,SF=1,ZF=0,PF=0NOTAL ;AL=7FH,標志不變例9邏輯運算ANDBL,11110110B

;BL中D0和D3清0,其余位不變ORBL,00001001B

;BL中D0和D3置1,其余位不變XORBL,00001001B

;BL中D0和D3求反,其余位不變

AND指令可用于復位某些位(同0相與),不影響其他位

OR指令可用于置位某些位(同1相或),不影響其他位

XOR指令可用于求反某些位(同1相異或),不影響其他位例10邏輯運算指令的應用將操作數移動一位或多位,分成邏輯移位和算術移位,分別具有左移或右移操作移位指令的第一個操作數是指定的被移位的操作數,可以是寄存器或存儲單元;后一個操作數表示移位位數:該操作數為1,表示移動一位該操作數為CL,CL寄存器值表示移位位數(移位位數大于1只能用CL表示)按照移入的位設置進位標志CF,根據移位后的結果影響SF、ZF、PF4.3.3.2移位指令SHLreg/mem,1/CL

;reg/mem左移1或CL位 ;最低位補0,最高位進入CF演示1.邏輯左移指令SHLSHRreg/mem,1/CL

;reg/mem右移1/CL位 ;最高位補0,最低位進入CF演示2.邏輯右移指令SHRSALreg/mem,1/CL

;與SHL是同一條指令演示3.算術左移指令SALSARreg/mem,1/CL

;reg/mem右移1/CL位 ;最高位不變,最低位進入CF演示4.算術右移指令SARMOVDX,6075H

;DX=0110000001110101BSHLDX,1

;DX=1100000011101010B

;CF=0,SF=1、ZF=0、PF=0SARDX,1

;DX=1110000001110101B

;CF=0,SF=1、ZF=0、PF=0SHRDX,1

;DX=0111000000111010B ;CF=1,SF=0、ZF=0、PF=1MOVCL,4

;CL=4,標志不變SARDX,CL

;DX=0000011100000011B

;CF=1,SF=0、ZF=0、PF=1例11數據移位XORAH,AH

;實現AH=0,同時使CF=0SHLAX,1

;AX←2×ALMOVBX,AX

;BX←AX=2×ALSHLAX,1

;AX←4×ALSHLAX,1

;AX←8×ALADDAX,BX

;AX←8×AL+2×AL=10×ALSUBAH,AHANDAH,0

邏輯左移一位相當于無符號數乘以2

邏輯右移一位相當于無符號數除以2例13將AL寄存器中的無符號數乘以10循環移位指令類似移位指令,但要將從一端移出的位返回到另一端形成循環。分為:ROL

reg/mem,1/CL;不帶進位循環左移ROR

reg/mem,1/CL;不帶進位循環右移RCL

reg/mem,1/CL;帶進位循環左移RCRreg/mem,1/CL;帶進位循環右移循環移位指令的操作數形式與移位指令相同,按指令功能設置進位標志CF,但不影響SF、ZF、PF、AF標志演示演示演示演示4.3.3.3循環移位指令;將DX.AX中32位數值左移一位SHLAX,1RCLDX,1DXAXCF032位數據移位32位無符號數(DX.AX)右移一位32位無符號數(DX.AX)循環右移一位32位無符號數(DX.AX)左移一位例12把數字ASCII碼轉換為BCD碼

若是奇數個ASCII碼,則把地址最低位的一個轉換為BCD碼(高4位為0),然后把剩下的偶數個數按統一的方法處理(每兩個ASCII碼轉換成一個壓縮的BCD碼,且地址高的放在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論