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)相关推荐

  1. 汇编语言shl/shr与sal/sar的使用

    移位指令分为逻辑移位指令和算术移位指令 shl 与 shr 属于逻辑移位指令 shl逻辑左移指令 将寄存器或内存单元的数据左移 最低位用 0 补充 最高位进入 CF 例子: mov ax,8fh ;m ...

  2. 汇编 控制流伪指令 .break .continue .else .elseif .endif .endw .if .repeat .until .untilcxz .while

    条件控制流伪指令 .break .continue .else .elseif .endif .endw .if .repeat .until .untilcxz .while 条件控制流语法如下: ...

  3. excel按条件选择工作表_在Excel工作表中选择“实际使用范围”

    excel按条件选择工作表 It's easy to select the current range in Excel – just press Ctrl + A. That shortcut se ...

  4. Mysql优化原则_小表驱动大表IN和EXISTS的合理利用

    //假设一个for循环 for($i = 0; $i < 10000; $i++) { for ($j = 0; $i < 50; $j++){} }for($i = 0; $i < ...

  5. mysql算法优化原则_Mysql优化原则_小表驱动大表IN和EXISTS的合理利用

    //假设一个for循环 for($i = 0; $i < 10000; $i++) { for ($j = 0; $i < 50; $j++) { } } for($i = 0; $i & ...

  6. NL连接一定是小表驱动大表效率高吗

    前言 两表使用nest loop(以下简称NL)方式进行连接,小表驱动大表效率高,这似乎是大家的共识,但事实上这是有条件的,并不总是成立.这主要看大表扫描关联字段索引后返回多少数据量,是否需要回表,如 ...

  7. MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  8. MySql小表驱动大表

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  9. mysql 表与表之间的条件比对_值得收藏 | 一份最完整的MySQL规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

最新文章

  1. 小程序-wepy学习
  2. 电脑病毒反抗杀毒软件的主要手段
  3. chapter14 机器学习之利用SVD简化数据
  4. 也议GetLastKnownLocation!!(独家理解)
  5. iphone屏幕录制_如何将iPhone投屏到Mac上?iphone投屏到苹果电脑方法
  6. python符号运算_用Python做科学计算-SymPy符号运算
  7. java indexof 忽略大小写_javascript的indexOf如何才能忽略大小写
  8. 基于Docker搭建Percona XtraDB Cluster数据库集群
  9. ECCV 2020 论文大盘点-3D人体姿态估计篇
  10. android 小红点自动显示,Android应用图标上的小红点Badge实践代码
  11. Console密码恢复出厂设置
  12. windows11 笔记本开启热点就断网
  13. 怎么开启2345加速浏览器的过滤弹窗广告
  14. Unable to build Hibernate SessionFactory和Caused by: org.hibernate.tool.schema.spi.SchemaManagementEx
  15. 三步必杀(高阶差分系列)
  16. 美业SaaS的创业分享之[销售]:销售和销售管理
  17. WDF开发USB设备驱动教程(2)
  18. Nomad Consul搭建集群
  19. 关于overflow适配IE的问题
  20. IBM ServerGuide 8.41

热门文章

  1. html和php文件怎么连接,html页面跟php文件连接的方法
  2. JQuery(三)-- AJAX的深入理解以及JQuery的使用
  3. es6 includes(), startsWith(), endsWith()
  4. css随堂笔记(一)
  5. 不一样的ZTree,权限树.js插件
  6. js 实现简单的轮询
  7. 生产上完成TopN统计流程
  8. 命令行获取docker远程仓库镜像列表
  9. Java相关资料分享(视频+电子书籍)
  10. [折半搜索][has] Jzoj P4250 路径