汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                汇编语言-009(表驱动选择 、条件控制流伪指令  、逻辑移位SHL,SHR 算术移位SAL,SAR)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                1: 表驅(qū)動(dòng)選擇,用查表來(lái)代替多路選擇結(jié)構(gòu)的一種方法
.386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data CaseTable BYTE 'A' ;查詢(xún)值DWORD Process_A ;過(guò)程地址 EntrySize = ($ - CaseTable)BYTE 'B' ;查詢(xún)值DWORD Process_B ;過(guò)程地址BYTE 'C' ;查詢(xún)值DWORD Process_C ;過(guò)程地址BYTE 'D' ;查詢(xún)值DWORD Process_D ;過(guò)程地址 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 main2: 條件控制流偽指令,在匯編器預(yù)處理時(shí)生成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 main3: 條件控制流偽指令,例子應(yīng)用 ||
.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 main4: 條件控制流偽指令,例子應(yīng)用 &&
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data TRUE = 1 FALSE = 0 gradeAverage WORD 275 ;要檢查的數(shù)值 credits WORD 12 ;要檢查的數(shù)值 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 main5: 條件控制流偽指令,.REPEAT .UNTIL和 .WHILE循環(huán)的使用
.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 main6: .WHILE 循環(huán)內(nèi)包含 .IF語(yǔ)句的使用
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data X DWORD 0 op1 DWORD 2 ;被檢測(cè)的數(shù)據(jù) op2 DWORD 4 ;被檢測(cè)的數(shù)據(jù) op3 DWORD 5 ;被檢測(cè)的數(shù)據(jù).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 main7: 若DX的無(wú)符號(hào)數(shù)小于等于CX就跳轉(zhuǎn) 若AX的有符號(hào)數(shù)大于CX就跳轉(zhuǎn)
.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 main8: 清除AL的位0和位1,若目的操作數(shù)等于0,跳轉(zhuǎn)到L3,否則跳轉(zhuǎn)到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 main9: 奇偶性檢查,使用字節(jié)XOR的方式對(duì)數(shù)組所占的字節(jié)空間進(jìn)行奇偶性檢查,判斷是偶校驗(yàn)還是奇校驗(yàn)
.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data bList1 BYTE 1,2,3,4,5,6,7,8,9,10 ;奇校驗(yàn)的 bList2 BYTE 1,2,3,4,5,6,7,8,9,2 ;偶校驗(yàn)的.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位標(biāo)志位到AHmov dl,ah ;保存到DLand dl,4 ;與位運(yùn)算后,只保留奇偶位了cmp dl,0jne L2mov eax,0ret L2:mov eax,1ret myCheck ENDPEND main10: 邏輯移位SHL,SHR 算術(shù)移位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;算術(shù)左移mov bl,8Fh ;BL = 10001111bsal bl,1 ;CF = 1 ,BL = 00011110bmov al,10000000bsal al,2 ;CF = 0,AL=00000000b;算術(shù)右移mov al,0F0h ;AL = 11110000b (-16)sar al,1 ;AL = 11111000b (-8) CF = 0;AXt符號(hào)擴(kuò)展到EAXmov ax,-128 ;EAX = ????FF80hshl eax,16 ;EAX = FF800000hsar eax,16 ;EAX = FFFFFF80hINVOKE ExitProcess,0 main ENDP END main總結(jié)
以上是生活随笔為你收集整理的汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 摩尔庄园农夫怎么升级
- 下一篇: 今天黄金多少钱克啊?
