Intel汇编语言程序设计(第7版)第六章编程学习过程中写的小例子
1. 根据书上的例子, 自己写的4个过程, 改了一部分
include irvine32.inc
includelib irvine32.lib
include msvcrt.inc
includelib msvcrt.lib.data
dwNum0 DWORD 15
dwNum1 DWORD 21PDWORD TYPEDEF PTR DWORD dwNumAry DWORD 25, 39, 14, 59
NumAryLen DWORD LENGTHOF dwNumAry.code
; 找到两个数中的更大数
BigOne PROC Num0:DWORD, Num1:DWORDmov eax, Num0cmp eax, Num1ja NUM0BIGje EQUALmov eax, Num1jmp NUM0BIG
EQUAL:xor eax, eax
NUM0BIG:ret
BigOne ENDP; 数组求最大值
Biggest PROC USES esi ebx ecx pdwAry:PDWORD, dwCnt:DWORDmov ebx, pdwArymov ecx, dwCntmov esi, 1mov eax, DWORD PTR [ebx]
L0:cmp eax, DWORD PTR [ebx + esi * TYPE DWORD]jae NOMAXmov eax, DWORD PTR [ebx + esi * TYPE DWORD]
NOMAX:inc esi dec ecxor ecx, ecxjnz L0ret
Biggest ENDP; 直到按下按键在退出循环
BrkUntilPushKey PROCL0:mov eax, 100call Delaycall ReadKeyjz L0ret
BrkUntilPushKey ENDP; 在数组中找到对应值, 找到返回1否则0
SearchNum PROC USES esi ecx pdwAry:PDWORD, dwAryCnt:DWORD, dwObj:DWORDmov esi, pdwArymov eax, dwObjmov ecx, dwAryCnt
L0:cmp eax, DWORD PTR [esi]je foundadd esi, TYPE dwAryCntdec ecxtest ecx, ecxjnz L0jmp notfound
found:mov eax, 1jmp quit
notfound:xor eax, eax
quit:ret
SearchNum ENDPstart:push 39push NumAryLenpush OFFSET dwNumArycall SearchNumtest eax, eaxjz Endingcall WriteDeccall WaitMsg
Ending:invoke ExitProcess, 0
end start
2. 书上实现xor加密的例子
include irvine32.inc
includelib irvine32.lib
include msvcrt.inc
includelib msvcrt.lib.data
; 字节类型的指针
PBYTE TYPEDEF PTR BYTE INPUTBUFSIZE = 256RetLine BYTE 0dh, 0ah, 0
szInputPrompt BYTE "输入明文: ", 0
szOutputPrompt BYTE "解密后的明文: ", 0
pszInput PBYTE OFFSET szInputPromptszInputBuf BYTE INPUTBUFSIZE DUP(0)
pszInputBuf PBYTE OFFSET szInputBuf
g_dwInputLen DWORD 0
g_bKey BYTE 0
.code GenKey PROC call Randomizecall Random32and eax, 0FFhretGenKey ENDPNextLine PROCpush eaxmov edx, OFFSET RetLinecall WriteStringpop eaxret
NextLine ENDPSymCryptic PROC USES esi pbTextBuf:PBYTE, dwTextSize:DWORD, bKey:BYTExor esi, esixor eax, eaxmov ebx, pbTextBuf
L0:mov al, BYTE PTR [ebx + esi]xor al, bKeymov BYTE PTR [ebx + esi], alinc esi cmp esi, dwTextSizejb L0retSymCryptic ENDP; 显示提示内容的封装函数
PrintPrompt PROC USES edx pShownString:PBYTE, pInputBuf:PBYTE, dwInputBufSize:DWORD; 打印提示输入mov edx, pShownStringcall WriteString; 让用户输入内容mov edx, pInputBufmov ecx, dwInputBufSizecall ReadStringretPrintPrompt ENDPstart:; 打印输入提示push SIZEOF szInputBufpush OFFSET szInputBufpush OFFSET szInputPromptcall PrintPromptmov g_dwInputLen, eax; 生成密钥call GenKeymov g_bKey, al; 进行对称加密invoke SymCryptic, pszInputBuf, g_dwInputLen, g_bKeymov edx, OFFSET szInputBufcall WriteString; 换行call NextLine; 显示解密后的明文mov edx, OFFSET szOutputPromptcall WriteString; 进行对称解密invoke SymCryptic, pszInputBuf, g_dwInputLen, g_bKeymov edx, pszInputBufcall WriteString; 换行call NextLinecall WaitMsginvoke ExitProcess, 0
end start
3. 计算数组内比50大的元素之和
include irvine32.inc
includelib irvine32.lib
include msvcrt.inc
includelib msvcrt.lib.data
; 字节类型的指针
PBYTE TYPEDEF PTR BYTE array SDWORD 10, 60, 20, 33, 72, 89, 45, 65, 72, 18
ArraySize SDWORD ($ - array) / TYPE arraysample SDWORD 50
index SDWORD 0
sum SDWORD 0.code
start:xor ecx, ecxmov esi, OFFSET arrayxor eax, eaxL0:cmp ecx, ArraySizejge Endingmov ebx, samplecmp ebx, SDWORD PTR [esi]jge NextLoopadd eax, SDWORD PTR [esi]
NextLoop:inc ecxadd esi, TYPE arrayjmp L0
Ending:mov sum, eaxcall WriteIntcall WaitMsginvoke ExitProcess, 0
end start
4. 表驱动选择
如果选择分支过多可以构造一张表专门指向对应的地址
include irvine32.inc
includelib irvine32.lib
include msvcrt.inc
includelib msvcrt.lib.data CaseTable BYTE 'A'DWORD Process_A
EntrySize = ($ - CaseTable)BYTE 'B'DWORD Process_BBYTE 'C'DWORD Process_CBYTE '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
Process_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 ENDPstart:mov edx, OFFSET Promptcall WriteStringcall ReadCharmov ebx, OFFSET CaseTablemov ecx, NumberOfEntries
L1:cmp al, [ebx]jne L2call DWORD PTR [ebx + 1]call WriteStringcall Crlfjmp L3
L2:add ebx, EntrySizeloop L1L3:call WaitMsginvoke ExitProcess, 0
end start
(完)
相关文章:
Intel汇编语言程序设计(第7版)第六章编程学习过程中写的小例子
1. 根据书上的例子, 自己写的4个过程, 改了一部分 include irvine32.inc includelib irvine32.lib include msvcrt.inc includelib msvcrt.lib.data dwNum0 DWORD 15 dwNum1 DWORD 21PDWORD TYPEDEF PTR DWORD dwNumAry DWORD 25, 39, 14, 59 NumAryLen DWORD LENGTHOF dwNum…...
ElementUI之动态树+数据表格+分页
目录 一、动态树 1.1 定义 1.2 导航菜单绑定 1.3 面板内容 1.4 效果展示 二、动态表格 2.1 定义 2.2 搜索框 2.3 数据表格 2.4 分页条 2.5 功能实现 一、动态树 1.1 定义 动态树通常是指在网页或应用程序中创建可展开和折叠的树形结构,其中树的节点是动…...
ReferenceError: primordials is not defined错误解决
问题场景: 从github上拉了一个项目,想要学习一下,在起服务的时候出现了这个问题。 造成的原因: gulp 与 node 版本起冲突。 1)首先,安装 gulp,查看版本; npm install gulp -g g…...
【Element-UI】实现动态树、数据表格及分页效果
一、导言 1、引言 在现代软件开发中,动态树、数据表格以及分页效果成为了许多应用的核心需求。随着业务规模和复杂性的增加,我们往往需要展示大量的层级结构数据,并且实现交互性强且高效的操作。 动态树提供了一种组织结构清晰、可伸缩的展示…...
解决仪器掉线备忘
网络管控越来越严格,老的Mac模式连接的仪器经常断开,要么是网络没活动被断开TCP了,要么是网络波动无法保持TCP。每次重启仪器控制很麻烦,基于之前用M写http服务的基础上改进仪器接口连接。 参照之前实现http服务的逻辑 最终逻辑 …...
Java面向对象高级
文章目录 面向对象高级Object类的常用方法常用方法一(面向对象阶段)** 和 equals 的区别** 关键字native**单例设计模式(Singleton)**前情回顾(学习基础)静态修饰符Static设计模式概念开发步骤**两种实现方…...
渗透测试信息收集方法和工具分享
文章目录 一、域名收集1.OneForAll2.子域名挖掘机3.subdomainsBurte4.ssl证书查询 二、获取真实ip1.17CE2.站长之家ping检测3.如何寻找真实IP4.纯真ip数据库工具5.c段,旁站查询 三、端口扫描1.端口扫描站长工具2.masscan(全端口扫描)nmap扫描3.scanport4.端口表5.利…...
Unity打包出来的APK文件有问题总结
一、Unity打包出来的APK文件安装失败,提示安装失败(-108),或者是提示“包含病毒:a.gray.Bulimia.b” 有可能是遇到如上图所示的问题,提示安装失败(-108)。 有可能是遇到如上图所示的…...
记录:移动设备软件开发(Activity的显式启动和隐式启动)
目录 Intent对象简述Intent的作用Intent开启Activtiy显式启动Activity隐式启动Activity Intent对象简述 Android的应用程序包含三种重要组件:Activity、Service、BroadcastReceiver,应用程序采用了一致的方式来启动它们——都是依靠Intent来启动的&…...
面试题库(十一):MQ和分布式事务
MQ mq 通知时,消费者没消费到怎么办简单聊聊消息中间件?你了解那些具体的消息中间件产品?mq的消费端是怎么处理的? 整理一下你的消费端的整个处理逻辑流程,然后说说你的ack是在哪里返回的。按照你这样画的话,如果数据库突然宕机,你的消息该怎么确认已经接收? 那如果发送…...
Linux日期和时间管理指南:日期、时间、时区、定时任务和时间同步
文章目录 Linux日期和时间管理指南1. 简介1.1 Linux 日期和时间的重要性1.2 日期管理的需求 2. 查看当前日期和时间2.1 date 命令2.2 cal 命令2.3 查看硬件时钟 3. 设置系统日期和时间3.1 设置日期3.2 设置时间3.3 设置硬件时钟 4. 时区管理4.1 查看当前时区4.2 修改系统时区4.…...
tsar-性能监控工具
简介 tsar是淘宝自己开发的一个采集工具,主要用来收集服务器的系统信息(如cpu,io,mem,tcp等),以及应用数据(如squid haproxy nginx等)。收集到的数据存储在磁盘上&#…...
【Linux】系统编程简单线程池(C++)
目录 【1】线程池概念 【1.1】线程池 【1.2】线程池的应用场景 【1.3】线程池的种类 【1.4】线程池示例 【2】线程池代码 【1】线程池概念 【1.1】线程池 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程&a…...
数据结构之道:如何选择适合你的数据存储
文章目录 第1节:数据结构的基本原理1.1 时间复杂度和空间复杂度1.2 数据的访问方式1.3 数据的增删操作 第2节:常见的数据结构2.1 数组(Array)2.2 链表(Linked List)2.3 栈(Stack)2.4…...
MySQL定时删除XX天数据
写在前面 定时删除数据方式有多种方法,在实际工作中很多人可能会通过编码实现,也有人可能会通过脚本定时执行SQL进行定时删除对应数据。 今天使用MySQL自带的删除策略。 MYSQL删除策略 从MySQL5.1.6起,增加了一个非常有特色的功能–事件调…...
vue在js文件中调用$notify
我们在vue组件中可以直接 this.$notify({title: 修改成功,type: success,duration: 2500 })但在js中 我们this的指向就会发生一些不同 但是 其实 学过构造函数和原型链的人会很好理解这一点 每一个vue组件都是通过 vue构造出来的一个实例 所以 他们的this都是指向当前实例对象…...
C++从入门到精通
目录 C 语言特性C 学习大纲初级阶段1. 基础概念2. 数据类型和变量3. 运算符和表达式4. 控制流程 中级阶段5. 函数和模块化编程6. 数据结构7. 面向对象编程(OOP) 高级阶段8. 文件操作和流9. 模板和泛型编程10. 多线程和并发编程11. 高级主题 实际项目 C 语…...
2023网络安全面试题(附答案)+面经
前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,相应的想要进入到网络安全行业的人也越来越多,为了拿到心仪的Offer之外,除了学好网络安全知识以外,还要应对好企业的面试。 所以在这里我归纳总结了一些网…...
数据结构_红黑树
1、二叉树 每一个分支不能超过两个 2、 排序数/查找树 在二叉树的基础上,元素是有大小顺序的左 子树 小,右 子树 大 3、平衡树 左孩子数 和 右孩子数 相等 4、不平衡树 5、 红黑树 特点:趋近于平衡树,查询的速度非常的快…...
一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)
一、目的 指标需要查询以工作日和周末维度的数据统计,因此需要根据数据的日期判断这一天属于星期几,周一到周五为工作日,周六到周日为周末 二、SQL查询 (一)SQL语句 selectday,case when pmod(datediff(create_tim…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
轻量安全的密码管理工具Vaultwarden
一、Vaultwarden概述 Vaultwarden主要作用是提供一个自托管的密码管理器服务。它是Bitwarden密码管理器的第三方轻量版,由国外开发者在Bitwarden的基础上,采用Rust语言重写而成。 (一)Vaultwarden镜像的作用及特点 轻量级与高性…...
设计模式域——软件设计模式全集
摘要 软件设计模式是软件工程领域中经过验证的、可复用的解决方案,旨在解决常见的软件设计问题。它们是软件开发经验的总结,能够帮助开发人员在设计阶段快速找到合适的解决方案,提高代码的可维护性、可扩展性和可复用性。设计模式主要分为三…...
浅谈未来汽车电子电气架构发展趋势中的通信部分
目录 一、引入 1.1市场占比演化 1.2未来发展趋势 二、纯电动汽车与传统汽车的区别 2.1 纯电车和燃油车的架构(干货) 2.2 新能源汽车的分类 ⚡ 1. 纯电动汽车(BEV) 🔋 2. 插电式混合动力(PHEV&#…...
FMC STM32H7 SDRAM
如何无痛使用片外SDRAM? stm32 已经成功初始化了 STM32H7 上的外部 SDRAM(32MB) 如何在开发中无痛使用SDRAM 使它像普通 RAM 一样“自然地”使用? [todo] 重要 MMT(Memory Management Tool) of STM32CubeMx The Memory Management Tool (MMT) disp…...
DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目
参赛成绩 项目介绍 去年参加完这个比赛之后,整理了项目文件和代码,虽然比赛没有获奖,但是参赛过程中自己也很有收获,自己一个人搭建了完整的pipeline并基于此提交了多次提高成绩,现在把这个项目梳理成博客,…...
