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…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
