Intel匯編-Chapter-07-整數算術指令_第1頁
Intel匯編-Chapter-07-整數算術指令_第2頁
Intel匯編-Chapter-07-整數算術指令_第3頁
Intel匯編-Chapter-07-整數算術指令_第4頁
Intel匯編-Chapter-07-整數算術指令_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 整數算術指令要點:移位和循環(huán)移位指令移位和循環(huán)移位的應用乘法和除法指令擴展加法和減法ASCII和未壓縮十進制算術指令1. 簡介如何使用移位和循環(huán)移位指令移動數字的若干位?為什么計算機能實現大整數的加減法?編譯器如何將復雜的表達式分解并翻譯成獨立的機器語言指令的?在將表達式翻譯成匯編語言的時候如何使用運算符優(yōu)先級和寄存器優(yōu)化規(guī)則?2. 移位和循環(huán)移位指令SHL/SHR:邏輯左右移位SAL/SAR:算術左右移位ROL/ROR:循環(huán)左右移位RCL/RCR:帶進位的循環(huán)左右移位SHLD/SHRD:雙精度左右移位所有指令都影響CF和OFSHL指令SHL(shift left):對目的操作數執(zhí)行邏

2、輯左移操作,低位以0填充,移出的最高位被送到CF中;SHL 目的操作數,移位位數格式:SHL reg/mem,imm8/CL 例1:mov bl,8fh shl bl,1SHL指令快速乘法SHR指令SHR(shift right):對目的操作數執(zhí)行邏輯右移操作,移出的數據位以0填充,最低位被送到CF中;SHR 目的操作數,移位位數格式:SHR reg/mem,imm8/CL 例2:mov al,0d0h shr al,1快速除法(無符號)SHR指令SAL指令與SHL指令等價;SAR指令:用最高位填充空出的位,最低位拷貝至CF;比較SAR與SHR:SAL和SAR指令MOV AL, 0F0HSAR

3、 AL, 1MOV AL, 0F0HSHR AL, 1快速除法(有符號)ROL指令ROL(rotate left)指令向左移動,并將最高位同時拷貝到CF和最低位中;MOV AL, 40HROL AL, 1ROL AL, 1ROL AL, 1MOV AL, 26HROL AL, 4交換一個字節(jié)的高4位和低4位!ROR指令ROR(rotate right)指令向右移動,并將最低位同時拷貝到CF和最高位中;MOV AL, 01HROR AL, 1ROR AL, 1RCL和RCR指令RCL(rotate carry left)指令按位左移,并將CF拷貝到最低有效位,然后將最高有效位拷貝至CF中;CLC

4、MOV BL, 88HRCL BL, 1RCL BL, 1.datatestval byte 01101010b.codeshrtestval, 1jcquitrcltestval, 1RCL和RCR指令RCR(rotate carry right)指令按位右移,并將CF拷貝到最高有效位,然后將最低有效位拷貝至CF中;STCMOV AH, 10HRCR AH, 1SHLD/SHRD指令SHLD (shift left double)指令將目的操作數左移指定的位數;左移空出來的位用源操作數的高位來填充;SHLD 目的操作數,源操作數,移位位數格式:SHLD reg16/32, reg16/32,

5、 imm8/CLSHLD mem16/32, mem16/32, imm8/CL SHLD/SHRD指令SHRD (shift right double)指令將目的操作數右移指定的位數;右移空出來的位用源操作數的低位來填充;SHRD 目的操作數,源操作數,移位位數格式:SHRD reg16/32, reg16/32, imm8/CLSHRD mem16/32, mem16/32, imm8/CL SHLD/SHRD指令 將wval左移4位并且將ax的高4位插入到wval的低4位中.datawval word 9ba6h.codemov ax, 0ac3bhshld wval, ax, 4; s

6、hrd wval, ax, 43. 移位和循環(huán)移位的應用多雙字移位二進制乘法顯示二進制位分離位串多雙字移位例子:一個包含三個雙字的數組內所有位集體向右移動1位:將ESI設置為array的偏移值;將ESI+8位置處的雙字右移一位,最低位拷貝到CF中;將ESI+4處的值右移一位,最高位以CF值填充,最低位拷貝到CF中;將ESI+0處的雙字右移一位,最高位以CF值填充,最低位拷貝到CF中;二進制乘法為了應用SHL,將任意二進制乘數分解成2的冪的和:EAX * 36= EAX * 32 + EAX * 4 = EAX * 25 + EAX * 22顯示二進制位字節(jié)數據在每次左移的時候,最高位都會被拷貝

7、至CF中,我們可以利用這一點!分離位串0 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0DHDL年(915)月(58)日(04)將要提取的位移位到寄存器的最低部分,然后清除不相關的位。4. 乘法和除法指令無符號乘法MUL指令有符號乘法IMUL指令無符號除法DIV指令有符號整數除法算術表達式的實現MUL指令MUL指令:無符號乘法指令 將8位、16位、32位的操作數與AL、AX、EAX相乘。 單操作數指令指令格式:MULr/m8 ;AX MULr/m16 ;DX:AXMULr/m32 ;EDX:EAXMUL指令mov al , 5hmov bl , 10hmul bl被乘數是AL,乘積

8、被放入AX中根據乘積中高半部分是否為0,設置或清除CF位和OF位因為處理的是無符號數,所以只關心CF標志位AX=0050HCF = 0.dataval1 word 2000hval2 word 0100h.codemov ax , val1mul val2MUL指令被乘數是AX,乘積被放入DX:AX中;根據乘積中高半部分是否為0,設置或清除CF位和OF位;因為處理的是無符號數,所以只關心CF標志位;AX=0000HDX=0020HCF = 1MUL指令mov eax , 12345hmov ebx , 1000hmul ebx被乘數是EAX,乘積被放入EDX:EAX中;根據乘積中高半部分是否為

9、0,設置或清除CF位和OF位;因為處理的是無符號數,所以只關心CF標志位;EAX = 12345000HEDX = 00000000HCF = 0IMUL指令IMUL指令:有符號乘法指令 保留乘積的符號位指令格式:單操作數IMULr/m8 ;AX IMULr/m16;DX:AXIMULr/m32;EDX:EAX雙操作數會根據目的操作數的大小裁減乘積如果有效位丟失,則設置CF和OF IMULr16/32, r/m16/32 IMULr16/32,imm8 IMULr/m16/32,imm16/32三操作數IMULr16/32,r/m16/32,imm8IMULr16/32,r/m16/32,im

10、m16/32IMUL指令mov al , 48mov bl , 4imul bl被乘數是AL,乘積被放入AX中根據乘積中高半部分是不是低半部分的擴展,設置或清除CF位和OF位因為處理的是有符號數,所以關心OF標志位IMUL指令AX=00C0HOF = 1mov al , -4mov bl , 4imul blAX=FFF0HOF = 0mov ax ,-16mov bx , 2imul bx,ax被乘數是BX,乘積被放入BX中根據乘積中的有效位是否被裁減,設置或清除CF位和OF位因為處理的是有符號數,所以關心OF標志位IMUL指令BX=-32OF = 0mov ax ,-32000imul a

11、x,2AX=0600HOF = 1乘法操作的性能測試 編程用移位指令和乘法指令測試其性能。DIV指令:無符號除法指令 執(zhí)行8位、16位、32位無符號除法 單操作數指令 被除數、商以及余數都有除數的大小決定DIV指令DIV指令mov ax , 0083hmov bl , 2div bl除數是8位的,那么被除數就應該放入16位的AX中商被放入AL中,余數被放入AH中AL = 41HAH = 01HDIV指令mov dx , 0mov ax , 8003hmov cx , 100hdiv cx除數是16位時,那么被除數的高16位放入DX中,低16位放入AX中商被放入AX中,余數被放入DX中AX =

12、0080HDX = 0003H.datadividendqword0020hdivisor dword00000100h.codemov edx , dword ptr dividend+4mov eax , dword ptr dividenddiv divisorEAX = 08003000HEDX = 00000020HDIV指令有符號除法CBW、CWD、CDQ指令IDIV指令除法溢出 三條整數符號擴展的指令CBW、CWD、CDQ指令用于整數符號擴展CBW指令將AL中的符號位擴展到AH中CWD指令將AX中的符號位擴展到DX中CDQ指令將EAX中的符號位擴展到EDX中 三條整數符號擴展的指

13、令.databyteVal sbyte -65.codemov al,byteValcbw.datawordVal sword -65.codemov ax,wordValcwd.datadwordVal sdword -65.codemov eax,dwordValcdq IDIV指令IDIV指令:有符號除法指令,指令格式DIV相同 當執(zhí)行8位除法指令前必須把被除數符號擴展到AH中;當執(zhí)行16位除法指令前必須把被除數符號擴展到DX中;當執(zhí)行32位除法指令前必須把被除數符號擴展到EDX中;8位有符號除法.databyteVal sbyte -48.code mov al,byteVal cbw

14、 mov bl , 5 idiv bl必須將被除數的符號位從AL擴展到AH商被放入AL中,余數被放入AH中AL = -9AH = -316位有符號除法.datawordVal sword -5000.code mov ax,wordVal cwd mov bx , 256 idiv bx必須將被除數的符號位從AX擴展到DX商被放入AX中,余數被放入DX中AX = -19DX = -13632位有符號除法.datadwordVal sword -5000.code mov eax,dwordVal cdq mov ebx , 256 idiv ebx必須將被除數的符號位從EAX擴展到EDX商被放入EAX中,余數被放入EDX中EAX = -195EDX = +80 除法溢出當除法產生的商太大而無法容納在目的操作數中的時候,就會導致除法溢出試圖執(zhí)行除0運算時這會導致CPU觸發(fā)一個中斷,當前程序會被終止算術表達式的實現下列內存操作數均為32位整數:var4 = (var1 + var2) * var3var4 = (v

溫馨提示

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

評論

0/150

提交評論