热门标签 | 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

推荐阅读
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
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社区 版权所有