匯編語言-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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何解決EDM郵件營銷中的圖片難題

隨著互聯網的高速發展&#xff0c;已然進入到了讀圖時代&#xff0c;EDM郵件營銷尤為注重圖片的運用。純文本的郵件太枯燥&#xff0c;巧借圖片&#xff0c;可以提高內容的可讀性&#xff0c;吸引用戶注意力。然而&#xff0c;我們卻常常不得不面對這樣的尷尬&#xff1a;打開郵…

實驗2 SQL Server 表操作

實驗2 SQL Server 表操作一、實驗目的 1.了解表設計和表結構相關知識。 2.掌握管理工具創建、修改、查看和刪除表的方法。 3.掌握T-SQL語句創建、修改、查看和刪除表的方法。 4.了解表和數據庫的關系。 二、實驗要求 1.創建好的“網上購物系統”數據庫eshop中的members表、pro…

深入理解.net的事件與委托機制

首先介紹一個為什么要在事件中引入委托這個概念&#xff1a;  事件是對象發送的消息&#xff0c;以發信號通知操作的發生。操作可能是由用戶交互&#xff08;例如鼠標單擊&#xff09;引起的&#xff0c;也可能是由某些其他的程序邏輯觸發的。引發事件的對象稱為事件發送方。…

Java ObjectOutputStream flush()方法與示例

ObjectOutputStream類flush()方法 (ObjectOutputStream Class flush() method) flush() method is available in java.io package. flush()方法在java.io包中可用。 flush() method is used to flush this stream and write bytes immediately of any buffered output to the u…

ffmpeg 命令裁剪合并

1 mp4格式&#xff1a; 裁剪從一個視頻中的1分鐘、2分鐘、3分鐘開始截取10秒 ffmpeg -i test_1280x720.mp4 -ss 00:01:00 -t 10 -codec copy copy1.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:02:00 -t 10 -codec copy copy2.mp4 ffmpeg -i test_1280x720.mp4 -ss 00:03:00 -t 10…

Struts2初始化流程及源碼分析

1.1 Struts2初始化 在講Struts2的初始化之前&#xff0c;應該為大家描述下Web應用中的過濾器Filter&#xff0c;這關系到我們對核心過濾器FilterDispatcher的正確理解。 Filter&#xff1a;一個filter是一個對象&#xff0c;為每個請求資源(一個servlet或靜態內容) &#xff0c…

實驗1 數據庫操作

實驗1 數據庫操作一、實驗目的 1.掌握管理工具、T-SQL創建數據庫的方法。 2.掌握管理工具、T-SQL修改和查看數據庫的方法。 3.掌握管理工具、T-SQL刪除數據庫的方法。 4.掌握數據庫的附加與分離 二、實驗要求 1.創建實驗所用到的“網上購物系統”數據庫eshop。 三、實驗內容 1…

Java FileInputStream finalize()方法與示例

FileInputStream類的finalize()方法 (FileInputStream Class finalize() method) finalize() method is available in java.io package. finalize()方法在java.io包中可用。 finalize() method is used to assure that close() method of this FileInputStream invokes when th…

逆風飛揚,吳仁宏

摘自逆風飛揚,吳仁宏自傳 它是一個從"生而自卑"到"個性飛揚"的故事&#xff0c;當然具有傳奇色彩 中國人幾千年都不是天生的贏家&#xff0c;讓我們努力&#xff0c;為國為家為自己&#xff0c;做贏家&#xff01; 生存哲學 尼采 痛苦,挫折使生命遷長,使人…

ffmpeg 命令圖片和視頻相互轉換

1當前文件環境&#xff1a; ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp 使用ffplay test.jpb ffplay test.bmp 都是可以打開的 參數介紹&#xff1a; -y 如…

如何點擊鏈接直接跳轉到app store指定應用下載頁面

轉載自&#xff1a;http://blog.csdn.net/zengconggen/article/details/6789420 NSString *str [NSString stringWithFormat:"http://itunes.apple.com/us/app/id%d", 436957167]; [[UIApplication sharedApplication] openURL:[NSURL urlWithString:str]];其中&…

COLLEGE.sql(復制的時候注意路徑!!!)

USE [master] GO /****** Object: Database [COLLEGE] Script Date: 2019/11/25 星期一 上午 08:57:11 / CREATE DATABASE [COLLEGE] ON PRIMARY ( NAME N’COLLEGE_m’, FILENAME N’F:\COLLEGE\COLLEGE.mdf’ , SIZE 51200KB , MAXSIZE UNLIMITED, FILEGROWTH 10240KB )…

【管理】「本能叛逆」與「理性叛逆」

叛逆是一般人認知的負面名詞&#xff0c;但是&#xff0c;很多人都忽略掉&#xff0c;它卻是人類進步的重要因子。觀察孩童的成長過程&#xff0c;十歲以后都會出現叛逆行為&#xff0c;相當令父母及師長頭痛。然而&#xff0c;叛逆卻是促使孩童突破家庭單一環境養成的認知與觀…

Java Double類parseDouble()方法的示例

Double類parseDouble()方法 (Double class parseDouble() method) parseDouble() method is available in java.lang package. parseDouble()方法在java.lang包中可用。 parseDouble() method is used to return the double value corresponding to the given String or in oth…

ffmpeg命令 拉流

1&#xff1a; 拉流播放:rtmp &#xff08;ffplay rtmp://server/live/streamName&#xff09; ffplay -x 480 -y 320 rtmp://58.200.131.2:1935/livetv/cctv1 2&#xff1a; 拉流存儲到文件:rtmp ffmpeg -i rtmp://58.200.131.2:1935/livetv/cctv1 -codec copy cctvrtmp.f…

小心pthread_cond_signal和SetEvent之間的差異

ZZ FROM: http://blog.csdn.net/absurd/article/details/1402433 轉載時請注明出處和作者聯系方式&#xff1a;http://blog.csdn.net/absurd 作者聯系方式&#xff1a;Li XianJing <xianjimli at hotmail dot com> 更新時間&#xff1a;2006-12-19 今天幫同事查一個多線…

eshop.sql(復制的時候注意路徑!!!)

USE [master] GO /****** Object: Database [eshop] Script Date: 2019/11/25 星期一 上午 08:54:14 / CREATE DATABASE [eshop] ON PRIMARY ( NAME N’eshop_dat’, FILENAME N’D:\eshop\eshop_dat.mdf’ , SIZE 10240KB , MAXSIZE 51200KB , FILEGROWTH 5120KB ) LOG O…

doublevalue_Java Double類doubleValue()方法與示例

doublevalueDouble類doubleValue()方法 (Double class doubleValue() method) doubleValue() method is available in java.lang package. doubleValue()方法在java.lang包中可用。 doubleValue() method is used to return the value denoted by this Double object converted…

ffmpeg 命令過濾器裁剪

1 圖片操作&#xff1a; 原圖&#xff1a; 使用ffplay 顯示左半邊 ffplay -i input.png -vf cropiw/2:ih:0:0 可以通過ffmpeg 保存 ffmpeg -i input.png -vf cropiw/2:ih:0:0 out.png 2 視頻操作&#xff1a; 原視頻&#xff1a; 顯示左半邊 ffplay -i cctvhttp.flv -vf …

去除aspx生成的頁面最開始的空行

使用.aspx生成的頁面一般都會有一個或多個空行&#xff0c;當然這些空行不會影響頁面在瀏覽器中的渲染結果&#xff0c;不過在查看源代碼的時候感覺有些別扭&#xff0c;我曾試著去刪除這些空行&#xff0c;但沒有成功&#xff0c;你知道你們有沒有去嘗試。 1 <% Page Langu…