1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 汇编语言-009(表驱动选择 条件控制流伪指令 逻辑移位SHL SHR 算术移位SAL SAR)

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

时间:2021-04-03 13:45:08

相关推荐

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

1: 表驱动选择,用查表来代替多路选择结构的一种方法

.386.model flat,stdcallinclude Irvine32.inc.stack 4096ExitProcess PROTO,dwExitCode:DWORD.dataCaseTable BYTE 'A' ;查询值DWORD Process_A;过程地址EntrySize = ($ - CaseTable)BYTE 'B' ;查询值DWORD Process_B;过程地址BYTE 'C' ;查询值DWORD Process_C;过程地址BYTE 'D' ;查询值DWORD Process_D;过程地址NumberOfEntries = ($ - CaseTable) / EntrySizeprompt BYTE "Press capital A,B,C or D",0msgA BYTE "Process_A",0msgB BYTE "Process_B",0msgC BYTE "Process_C",0msgD BYTE "Process_D",0.codemain PROCmov edx,OFFSET promptcall WriteStringcall ReadCharmov ebx ,OFFSET CaseTablemov ecx,NumberOfEntriesL1:cmp al,[ebx]jne L2call NEAR PTR [ebx+1]call WriteStringcall Crlfjmp L3L2:add ebx,EntrySizeloop L1L3:exitmain ENDPProcess_A PROCmov edx,OFFSET msgAretProcess_A ENDPProcess_B PROCmov edx,OFFSET msgBretProcess_B ENDPProcess_C PROCmov edx,OFFSET msgCretProcess_C ENDPProcess_D PROCmov edx,OFFSET msgDretProcess_D ENDPEND main

2: 条件控制流伪指令,在汇编器预处理时生成ASM代码,可在反汇编窗口查看

.386.model flat,stdcall.stack 4096ExitProcess PROTO,dwExitCode:DWORD.dataval1 DWORD 10result DWORD ?.codemain PROCmov eax,6.IF eax > val1mov result,1.ENDIFINVOKE ExitProcess,0main ENDPEND main

3: 条件控制流伪指令,例子应用 ||

.386.model flat,stdcallinclude Irvine32.inc.stack 4096ExitProcess PROTO,dwExitCode:DWORD.codemain PROCINVOKE ExitProcess,0main ENDPSetCursorPosition PROC.dataBadXCoordMsg BYTE "X-Coordinate out of range!",0Dh,0Ah,0BadYCoordMsg 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 Gotoxyquit:retSetCursorPosition ENDPEND main

4: 条件控制流伪指令,例子应用 &&

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

5: 条件控制流伪指令,.REPEAT .UNTIL和 .WHILE循环的使用

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

6: .WHILE 循环内包含 .IF语句的使用

.386.model flat,stdcall.stack 4096ExitProcess PROTO,dwExitCode:DWORD.dataX DWORD 0op1 DWORD 2 ;被检测的数据op2 DWORD 4 ;被检测的数据op3 DWORD 5 ;被检测的数据.codemain PROCmov eax,op1mov ebx,op2mov ecx,op3.WHILE eax < ebxinc eax.IF eax == ecxmov X,2.ELSEmov X,3.ENDIF.ENDWINVOKE ExitProcess,0main ENDPEND main

7: 若DX的无符号数小于等于CX就跳转 若AX的有符号数大于CX就跳转

.386.model flat,stdcall.stack 4096ExitProcess PROTO,dwExitCode:DWORD.codemain PROCINVOKE ExitProcess,0main ENDPproc_1 PROCcmp dx,cxjbe L1retL1:retproc_1 ENDPproc_2 PROCcmp ax,cxjg L2retL2:retproc_2 ENDPEND main

8: 清除AL的位0和位1,若目的操作数等于0,跳转到L3,否则跳转到L4

.386.model flat,stdcall.stack 4096ExitProcess PROTO,dwExitCode:DWORD.codemain PROCmov al,5and al,0FChjnz L4L3:mov ecx,0jmp quitL4:mov ecx,1quit:INVOKE ExitProcess,0main ENDPEND main

9: 奇偶性检查,使用字节XOR的方式对数组所占的字节空间进行奇偶性检查,判断是偶校验还是奇校验

.386.model flat,stdcall.stack 4096ExitProcess PROTO,dwExitCode:DWORD.databList1 BYTE 1,2,3,4,5,6,7,8,9,10 ;奇校验的bList2 BYTE 1,2,3,4,5,6,7,8,9,2 ;偶校验的.codemain PROCmov ebx,OFFSET bList1mov ecx,SIZEOF bList1call myCheckmov ebx,OFFSET bList2mov ecx,SIZEOF bList2call myCheckINVOKE ExitProcess,0main ENDPmyCheck PROCdec ecxmov dl,[ebx]L1:pushfdinc ebxpopfdxor dl,[ebx]loop L1lahf;加载8位标志位到AHmov dl,ah ;保存到DLand dl,4 ;与位运算后,只保留奇偶位了cmp dl,0jne L2mov eax,0retL2:mov eax,1retmyCheck ENDPEND main

10: 逻辑移位SHL,SHR 算术移位SAL,SAR

.386.model flat,stdcall.stack 4096ExitProcess PROTO,dwExitCode:DWORD.codemain 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,0main ENDPEND main

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。