汇编语言-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.mzph.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…