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…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...