日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)

發布時間:2023/12/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1: 表驅動選擇,用查表來代替多路選擇結構的一種方法

.386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data CaseTable BYTE 'A' ;查詢值DWORD Process_A ;過程地址 EntrySize = ($ - CaseTable)BYTE 'B' ;查詢值DWORD Process_B ;過程地址BYTE 'C' ;查詢值DWORD Process_C ;過程地址BYTE 'D' ;查詢值DWORD Process_D ;過程地址 NumberOfEntries = ($ - CaseTable) / EntrySize prompt BYTE "Press capital A,B,C or D",0msgA BYTE "Process_A",0 msgB BYTE "Process_B",0 msgC BYTE "Process_C",0 msgD BYTE "Process_D",0.code main PROCmov edx,OFFSET promptcall WriteStringcall ReadCharmov ebx ,OFFSET CaseTablemov ecx,NumberOfEntries L1:cmp al,[ebx]jne L2call NEAR PTR [ebx+1]call WriteStringcall Crlfjmp L3 L2:add ebx,EntrySizeloop L1 L3:exit main ENDPProcess_A PROCmov edx,OFFSET msgAret Process_A ENDPProcess_B PROCmov edx,OFFSET msgBret Process_B ENDPProcess_C PROCmov edx,OFFSET msgCret Process_C ENDPProcess_D PROCmov edx,OFFSET msgDret Process_D ENDPEND main

2: 條件控制流偽指令,在匯編器預處理時生成ASM代碼,可在反匯編窗口查看

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data val1 DWORD 10 result DWORD ?.code main PROCmov eax,6.IF eax > val1mov result,1.ENDIFINVOKE ExitProcess,0 main ENDP END main

3: 條件控制流偽指令,例子應用 ||

.386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCINVOKE ExitProcess,0 main ENDPSetCursorPosition PROC .data BadXCoordMsg BYTE "X-Coordinate out of range!",0Dh,0Ah,0 BadYCoordMsg BYTE "Y-Coordinate out of range!",0Dh,0Ah,0.code.IF (dl < 0 )||( dl > 79)mov edx,OFFSET BadXCoordMsgcall WriteStringjmp quit.ENDIF.IF(dh < 0 )||(dh > 24)mov edx,OFFSET BadYCoordMsgcall WriteStringjmp quit.ENDIFcall Gotoxy quit:retSetCursorPosition ENDPEND main

4: 條件控制流偽指令,例子應用 &&

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data TRUE = 1 FALSE = 0 gradeAverage WORD 275 ;要檢查的數值 credits WORD 12 ;要檢查的數值 OkToRegister BYTE ? .code main PROCmov OkToRegister,FALSE.IF gradeAverage > 350mov OkToRegister,TRUE.ELSEIF (gradeAverage > 250) && (credits <= 16)mov OkToRegister,TRUE.ELSEIF (credits <= 12)mov OkToRegister,TRUE.ENDIFINVOKE ExitProcess,0 main ENDP END main

5: 條件控制流偽指令,.REPEAT .UNTIL和 .WHILE循環的使用

.386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov eax,0.WHILE eax<10inc eaxcall WriteDeccall Crlf.ENDWmov eax,0.REPEATinc eaxcall WriteDeccall Crlf.UNTIL eax == 10INVOKE ExitProcess,0 main ENDP END main

6: .WHILE 循環內包含 .IF語句的使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data X DWORD 0 op1 DWORD 2 ;被檢測的數據 op2 DWORD 4 ;被檢測的數據 op3 DWORD 5 ;被檢測的數據.code main PROCmov eax,op1mov ebx,op2mov ecx,op3.WHILE eax < ebxinc eax.IF eax == ecxmov X,2.ELSEmov X,3.ENDIF.ENDWINVOKE ExitProcess,0 main ENDP END main

7: 若DX的無符號數小于等于CX就跳轉 若AX的有符號數大于CX就跳轉

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCINVOKE ExitProcess,0 main ENDPproc_1 PROCcmp dx,cxjbe L1ret L1:ret proc_1 ENDPproc_2 PROCcmp ax,cxjg L2ret L2:ret proc_2 ENDPEND main

8: 清除AL的位0和位1,若目的操作數等于0,跳轉到L3,否則跳轉到L4

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov al,5and al,0FChjnz L4 L3:mov ecx,0jmp quit L4:mov ecx,1 quit:INVOKE ExitProcess,0 main ENDP END main

9: 奇偶性檢查,使用字節XOR的方式對數組所占的字節空間進行奇偶性檢查,判斷是偶校驗還是奇校驗

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data bList1 BYTE 1,2,3,4,5,6,7,8,9,10 ;奇校驗的 bList2 BYTE 1,2,3,4,5,6,7,8,9,2 ;偶校驗的.code main PROCmov ebx,OFFSET bList1mov ecx,SIZEOF bList1call myCheckmov ebx,OFFSET bList2mov ecx,SIZEOF bList2call myCheckINVOKE ExitProcess,0 main ENDPmyCheck PROCdec ecxmov dl,[ebx] L1:pushfdinc ebxpopfdxor dl,[ebx]loop L1lahf ;加載8位標志位到AHmov dl,ah ;保存到DLand dl,4 ;與位運算后,只保留奇偶位了cmp dl,0jne L2mov eax,0ret L2:mov eax,1ret myCheck ENDPEND main

10: 邏輯移位SHL,SHR 算術移位SAL,SAR

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;左移mov bl,8Fh ;BL = 10001111bshl bl,1 ;CF = 1 ,BL = 00011110bmov al,10000000bshl al,2 ;CF = 0,AL=00000000b;右移mov al,0D0h ;AL = 11010000bshr al,1 ;AL = 01101000b CF = 0mov al,00000010b shr al,2 ;AL = 00000000b , CF =1;算術左移mov bl,8Fh ;BL = 10001111bsal bl,1 ;CF = 1 ,BL = 00011110bmov al,10000000bsal al,2 ;CF = 0,AL=00000000b;算術右移mov al,0F0h ;AL = 11110000b (-16)sar al,1 ;AL = 11111000b (-8) CF = 0;AXt符號擴展到EAXmov ax,-128 ;EAX = ????FF80hshl eax,16 ;EAX = FF800000hsar eax,16 ;EAX = FFFFFF80hINVOKE ExitProcess,0 main ENDP END main

總結

以上是生活随笔為你收集整理的汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。