热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

汇编语言008(条件跳转应用、loopnz条件循环指令使用、loopz条件循环指令使用、if语句编写汇编时、while语句编写汇编时、循环内的if语句嵌套)

1:条件跳转应用,三个数中最小数.386.modelflat,stdcall.stack4096ExitProcessPROTO,dwExitCo

1: 条件跳转应用,三个数中最小数

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
V1 WORD 1
V2 WORD 2
V3 WORD 3.code
main PROCmov ax,V1 ;假设V1是最小值cmp ax,V2 ;如果AX小于等于V2jbe L1mov ax,v2
L1:cmp ax,V3jbe L2mov ax,V3
L2:INVOKE ExitProcess,0
main ENDP
END main

2: 条件跳转应用,循环直到按下按键

.386
.model flat,stdcallinclude Irvine32.inc.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
char BYTE ?.code
main PROCL1:mov eax,10call Delay ;10毫秒的延迟call ReadKey ;检查按键jz L1 ;如果没有按键就循环mov char,AL ;保存字符INVOKE ExitProcess,0
main ENDP
END main

3: 条件跳转应用,顺序搜索数组

.386
.model flat,stdcallinclude Irvine32.inc.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
intArray SWORD 0,0,0,0,1,20,35,-12,66,4,0
noneMsg BYTE "A non-zero value was not found",0.code
main PROCmov ebx,OFFSET intArraymov ecx,LENGTHOF intArray
L1:cmp WORD PTR[ebx],0jnz foundadd ebx,2loop L1jmp notFound
found:movsx eax,WORD PTR[ebx]call WriteIntjmp quit
notFound:mov edx,OFFSET noneMsgcall WriteString
quit:call CrlfINVOKE ExitProcess,0
main ENDP
END main

4: 条件跳转应用,简单字符串加密

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORDinclude Irvine32.incKEY = 239
BUFMAX = 128.data
sPrompt BYTE "Enter the plain text:",0
sEncrypt BYTE "Cipher text: ",0
sDecrypt BYTE "Decrypted: ",0
buffer BYTE BUFMAX+1 DUP(0)
bufSize DWORD ?.code
main PROCcall InputTheStringcall TranslateBuffermov edx,OFFSET sEncryptcall DisplayMessagecall TranslateBuffermov edx,OFFSET sDecryptcall DisplayMessageINVOKE ExitProcess,0
main ENDP;提示用户输入一个纯文本字符串
;保存字符串和它的长度
;接收:无
;返回:无
InputTheString PROCpushadmov edx,OFFSET sPromptcall WriteStringmov ecx,BUFMAXmov edx,OFFSET buffercall ReadStringmov bufSize,eaxcall Crlfpopadret
InputTheString ENDP;显示加密或解密消息
;接收:EDX指向消息
;返回:无
DisplayMessage PROCpushadcall WriteStringmov edx,OFFSET buffercall WriteStringcall Crlfcall Crlfpopadret
DisplayMessage ENDP;字符串的每个字符与密钥字节进行异或实现转换
;接收:无
;返回:无
TranslateBuffer PROCpushadmov ecx,bufSizemov esi,0
L1:xor buffer[esi],KEYinc esiloop L1popadret
TranslateBuffer ENDP
END main

5: loopnz 条件循环指令使用,查找数组第一个非负数

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
array SWORD -3,-6,-1,-10,10,30,40,4
sentinel SWORD 0.code
main PROCmov esi,OFFSET arraymov ecx,LENGTHOF array
L1:test WORD PTR[esi],8000h ;测试符号位pushfd ;标志位入栈add esi,TYPE array ;移动到下一个位置popfdloopnz L1 ;当ZF=0时继续循环 jnz quit ;没有发现非负数sub esi,TYPE array ;ESI指向数值
quit:INVOKE ExitProcess,0main ENDP
END main

6: loopz 条件循环指令使用,查找数组第一个负数

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
array SWORD 3,6,1,10,-10,-30,-40,-4
sentinel SWORD 0.code
main PROCmov esi,OFFSET arraymov ecx,LENGTHOF array
L1:test WORD PTR[esi],8000h ;测试符号位pushfd ;标志位入栈add esi,TYPE array ;移动到下一个位置popfdloopz L1 ;当ZF=1时继续循环 jz quit ;没有发现非负数sub esi,TYPE array ;ESI指向数值
quit:INVOKE ExitProcess,0main ENDP
END main

7: if语句编写汇编时的情况

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD;if(al > bl) & (bl > cl)
; X = 1.data
X DWORD ?.code
main PROCINVOKE ExitProcess,0
main ENDPproc_1 PROCcmp al,blja L1jmp nextL1:cmp bl,clja L2jmp nextL2:mov X,1next:
proc_1 ENDP;如果将ja 换成 jbe,代码减少2
proc_2 PROCcmp al,bljbe nextcmp bl,cljbe nextmov X,1next:proc_2 ENDPEND main

8: if语句编写汇编时的情况

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
X DWORD ?;if(al > bl) || (bl > cl)
;X =1.code
main PROCcmp al,blja L1cmp bl,cljbe next
L1: mov X,1
next:INVOKE ExitProcess,0
main ENDP
END main

9: while语句编写汇编时的情况

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
val1 DWORD 10
val2 DWORD 20;while (val1 < val2)
;{
; val1 &#43;&#43;;
; val2 --;
;}.code
main PROCmov eax,val1
beginwhile:cmp eax,val2jnl endwhileinc eaxdec val2jmp beginwhile
endwhile:mov val1,eaxINVOKE ExitProcess,0
main ENDP
END main

10&#xff1a; 循环内的if语句嵌套

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
sum DWORD 0
sample DWORD 50 ;计算数组所有大于sample的数之和
array DWORD 10,60,20,33,72,89,45,72,18
arraySize &#61; ($ - array)/TYPE array.code
main PROCmov eax,0mov edx,samplemov esi,0mov ecx,arraySize
L1:cmp esi,ecxjl L2jmp L5
L2:cmp array[esi*4],edxjg L3jmp L4
L3:add eax,array[esi*4]
L4:inc esijmp L1
L5:mov sum,eaxINVOKE ExitProcess,0
main ENDP
END main

推荐阅读
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • Activity跳转动画 无缝衔接
    Activity跳转动画 无缝衔接 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 本文深入探讨了HTML5中十五个重要的新特性,为开发者提供了详细的指南。 ... [详细]
  • 本文探讨了Codeforces 580C题目——Kefa与公园的问题,深入分析了如何在给定条件下帮助Kefa找到合适的餐厅。 ... [详细]
  • HDU1085 捕获本·拉登!
    问题描述众所周知,本·拉登是一位臭名昭著的恐怖分子,他已失踪多年。但最近有报道称,他藏匿在中国杭州!虽然他躲在杭州的一个洞穴中不敢外出,但近年来他因无聊而沉迷于数学问题,并声称如果有人能解出他的题目,他就自首。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 解决jQuery Spinner按钮垂直排列问题
    本文探讨了如何通过CSS调整jQuery Spinner组件中的上下按钮,实现它们的垂直堆叠布局。 ... [详细]
  • 本文详细介绍了如何将After Effects中的动画相机数据导入到Vizrt系统中,提供了一种有效的解决方案,适用于需要在广播级图形制作中使用AE动画的专业人士。 ... [详细]
  • BL550721、特点液晶驱动输出:Common输出4线,Segment输出36线内置显示寄存器364144bit2线串行接口(SCL,SDA)内置震荡电路内置液晶驱动电源电路13 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 近期在研究Java IO流技术时,遇到了一个关于如何正确读取Doc文档而不出现乱码的问题。本文将详细介绍使用Apache POI库处理Doc和Docx文件的具体方法,包括必要的库引入和示例代码。 ... [详细]
  • electronvue使用electronupdater实现自动更新
    今天呢,给大家带来一篇干货满满的electron-vue自动升级的教程,话不多说,开始我的表演!配置文件package.jsonbu ... [详细]
  • 转自:http:blog.sina.com.cnsblog_67419c420100vmkt.html 1.为什么要使用blocks将一个blocks作为函数或者方法的参数传递,可 ... [详细]
  • 本文档详细介绍了Excel VBA编程中的基本语法,包括循环结构、条件判断、数据处理以及用户界面设计等内容,旨在帮助初学者快速掌握VBA编程技巧。 ... [详细]
author-avatar
纠结丿灬情殇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有