考研拓展:汇编基础

news2024/11/28 12:50:03

一.说明

本篇博客是基于考研之计算机组成原理中的程序机器级代码表示进行学习的,并不是从汇编语言这一门单独的课程来学习的,涉及的汇编语言知识多是帮助你学习考研之计算机组成原理中对应的考点。

二.相关寄存器

1.相关寄存器

X86处理器中有8个32位的通用寄存器,各寄存器及说明:

名称说明作用
EAX累加器什么数据都可以存
EBX基地址寄存器什么数据都可以存
ECX计数寄存器什么数据都可以存
EDX数据寄存器什么数据都可以存
ESI变址寄存器用于线性表、字符串的处理
EDI变址寄存器用于线性表、字符串的处理
EBP堆栈基指针用于实现函数调用
ESP堆栈顶指针用于实现函数调用

注意:上面四个寄存器的使用非常灵活,可以只使用它的16位,甚至只使用它的8位,而后面四个寄存器则比较呆,只能单独一起使用32位。

单独使用前4个寄存器,名称如下:

TuZl.jpg

2.读取长度

如何指明内存地址的读写长度:

dword ptr               //双字,32bit
word ptr                //单字,16bit
byte ptr                //字节,8bit

三.常用指令

1.常见算术运算指令

功能汇编指令格式注释
add d,s计算d+s,结果存入d
sub d,s计算d-s,结果存入d
mul d,s无符号数d*s,乘积存入d
div d,s无符号数除法:edx:eax/s,商存入eax,余数存入edx
取负数neg d,s将d取负数,结果存入d
自增++inc d,s将d++,结果存入d
自减–dec d,s将d–,结果存入d
imul d,s有符号数d*s,乘积存入d
idiv d,s有符号数除法:edx:eax/s,商存入eax,余数存入edx

注意1:这里面需要注意的是除法运算edx:eax是什么意思,在除法运算时,首先被除数要进行位扩展,把32位扩展为64位,再用64位的被除数除32位的除数,商存入eax,余数存入edx。这里面使用的隐含寻址的数据寻址方式,2个寄存器(32位)连起来使用存储64位的被除数,所以用:号连接。

2.常见逻辑运算指令

功能汇编指令格式注释
add d,s将d、s逐位相与,结果放回d
or d,s将d、s逐位相或,结果放回d
not d将d逐位取反,结果放回d
异或xor d,s将d、s逐位异或,结果放回d
左移shl d,s将d逻辑左移s位,结果放回d(通常s是常量,即立即数)
右移shr d,s将d逻辑右移s位,结果放回d(通常s是常量,即立即数)

补充:这里常见的逻辑运算和算术运算,如果你不了解,可以查看逻辑与算术运算

3.补充指令

  • 功能:数据传送
  • 指令格式:mov d,s
  • 注释:将第二个操作数复制到第一个操作数,但不能用于直接从内存复制到内存

四.汇编格式

使用不同的编程工具开发程序时,用到的汇编程序也不同,一般有两种不同的汇编格式:AT&T格式和Intel格式。

我们之前学的X86汇编语言都是Intel格式。

T6tq.jpg

两种格式需要注意的点都在这里了。

五.选择语句的机器级表示

1.无条件转移指令-jmp

  • jmp <地址> PC无条件转移至<地址>
  • jmp 128 <地址>可以用常数给出
  • jmp [999] <地址>可以来自于主存
  • jmp eax <地址>可以来自于寄存器
  • jmp NEXT <地址>可以用“标号”锚定

2.有条件转移指令

THLx.jpg

需要注意的是,因为是有条件注意,所以它经常和cmp比较指令一起组合使用

例如:

cmp eax,ebx                    #比较寄存器eax和ebx里的值
jg NEXT                        #若eax > ebx,则跳转到NEXT:

3.C语言程序编译成汇编程序

示例如下:

TwkH.jpg

六.循环语句机器级表示

循环语句我们非常熟悉了,也知道他们之间可以互相转换。

例如:

int result = 0;
for(int i=0;i<=100<i++){
	result +=i;
}

可以转化为while循环

int i=1;
int result = 0;
while(i<=100){
result +=i;
i++;
}

那么转化的汇编语言程序是什么呢?

mov eax 0            #用eax保存result, 初值为0
mov edx, 1           #用edx保存i, 初始值为1
cmp edx,100          #比较i和100
jg L2                #若i>100,转跳到L2执行
L1 :                 #循环主体
add eax,edx          #实现result +=i
inc edx              #inc自增指令,实现i++
cmp edx,100          #i和100
jleL1                #若i<=100,转跳到L1执行
L2 :                 #跳出循环主体

这里补充介绍一条命令:

loop  NEXT
<===>
dec ecx
cmp ecx,0
jne NEXT

理论上能用loop指令实现的功能,也一定能用条件转移实现。

补充:本篇博客仅仅针对于考研之计算机组成原理指令系统这一章节,仅作了解即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【三十天精通Vue 3】第二十天 Vue 3的性能优化详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue3 性能优化的概念1.1 为什么需要性能优化1.2 性能优化…

基于dsp+fpga+AD+ENDAC的半导体运动台高速数据采集电路仿真设计(四)

整个调试验证与仿真分析分三个步骤&#xff1a;第一步是进行 PCB 检查及电气特性测试&#xff0c;主 要用来验证硬件设计是否正常工作&#xff1b;第二步进行各子模块功能测试&#xff0c;包括高速光纤串行 通信的稳定性与可靠性测试&#xff0c; A/D 及 D/A 转换特性测…

26从零开始学Java之如何对数组进行排序与二分查找?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了数组的扩容、缩容及拷贝方式。接下来在今天的文章中&…

深眸科技|深度学习、3D视觉融入机器视觉系统,实现生产数智化

随着“中国制造2025”战略加速落实&#xff0c;制造业生产线正在加紧向智能化、自动化和数字化转型之路迈进。而人工智能技术的兴起以及边缘算力持续提升的同时&#xff0c;机器视觉及其相关技术也在飞速发展&#xff0c;并不断渗透进工业领域&#xff0c;拓展应用场景的同时&a…

Apache Druid中Kafka配置远程代码执行漏洞(MPS-2023-6623)

漏洞描述 Apache Druid 是一个高性能的数据分析引擎。 Kafka Connect模块曾出现JNDI注入漏洞(CVE-2023-25194)&#xff0c;近期安全研究人员发现Apache Druid由于支持从 Kafka 加载数据的实现满足其利用条件&#xff0c;攻击者可通过修改 Kafka 连接配置属性进行 JNDI 注入攻…

软件架构中间件技术

中间件的定义 其实中间件是属于构件的一种。是一种独立的系统软件或服务程序&#xff0c;可以帮助分布式应用软件在不同技术之间共享资源。 我们把它定性为一类系统软件&#xff0c;比如我们常说的消息中间件&#xff0c;数据库中间件等等都是中间件的一种体现。一般情况都是…

减少 try catch ,可以这样干

软件开发过程中&#xff0c;不可避免的是需要处理各种异常&#xff0c;就我自己来说&#xff0c;至少有一半以上的时间都是在处理各种异常情况&#xff0c;所以代码中就会出现大量的try {...} catch {...} finally {...}代码块&#xff0c;不仅有大量的冗余代码&#xff0c;而且…

d3.js学习笔记①创建html文档

本人之前从未学过HTML、CSS、JavaScript&#xff0c;然而我导是做前端的&#xff0c;要求我必须在三周内掌握d3.js&#xff0c;我只能从0学起并以此记录自己的学习过程。 首先对这三种语言有一个初步的认识&#xff1a;HTML是用于搭建网页框架&#xff0c;CSS是美化网页的&…

软件设计师考试——计算机网络、系统安全分析和设计部分

计算机网路 七层模型 OSI/RM七层模型 网络技术标准与协议 TCP协议 DHCP协议 DNS协议 计算机网络的分类——拓扑结构 按分布范围&#xff1a; 局域网城域网广域网因特网 按拓扑结构&#xff1a; 总线型星型环型 网络规划与设计 逻辑网络设计 物理网络设计 分层设计 IP地址…

VirboxLM-免服务版授权码,快速实现一机一码

一、产品介绍 ​ 授权码是由深盾科技开发的一款软件保护及授权管理产品 ​&#xff0c;一方面要保护软件代码不被逆向&#xff0c;另一方面要控制软件的授权使用。软件用户只需要输入授权码&#xff08;由数字和字母组成的一串字符&#xff09;&#xff0c;激活授权码后即可使…

这年头,谁还在「贩卖」生活方式?

【潮汐商业评论/原创】 “我已经很久没有追寻过品牌购物了”Anna如是说。 如今的Anna对商品的选择往往会考虑性价比以及简洁的外观&#xff0c;去品牌化、简单已经成为其新的生活方式。 日本作者三浦展在《第四消费时代》一书中提到&#xff0c;在第三消费社会&#xff0c;新…

Java版本企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

Android 获取奔溃crash的日志(adb logcat或者dropbox)

1.通过adb logcat 来获取&#xff1a; 使用场景&#xff1a;测试或者开发小伙伴 抓取。 先执行adb logcat -c 清理缓存日志 接着&#xff0c;抓取当前时间段开始的日志: adb logcat -v time >D:/crash.log 也可以抓取指定进程的日志&#xff1a; adb logcat -v time | fi…

利用POSIX多线程API函数进行多线程开发

本书文字内容源自 <<linux C/C服务器开发实践>> 支持正版图书&#xff0c;测试代码根据测试目的&#xff0c;可自行修改测试。 前言 在用POSIX多线程API函数进行开发之前&#xff0c;我们首先要熟悉这些API函数。常见的与线程有关的基本API函数见下表 使用这些A…

亚马逊云科技综合解决方案助力美的智能化,成本节省30%

很多人都有和客服打交道的体验&#xff0c;而这种体验大概率不佳&#xff0c;人工客服迟迟不应&#xff0c;解答问题也不精准&#xff0c;糟糕的客服体验对于面向消费者的企业来说亦是一大难题&#xff0c;严重者甚至会导致客户流失、评价滑坡等后果&#xff0c;作为知名科技电…

FileInputStream.read和FileChannel.read的区别

FileChannel怎么来的 FileChannel channel new FileInputStream("").getChannel() FileChannel的read()方法 channel.read(byteBuffer) 实现类FileChannelImpl 首先映入眼帘的就是非常熟悉的synchronized关键字&#xff0c; private final Object positionLock ne…

宏基因组组装 | 就现在!做出改变!!

微生态研究的核心难点是什么&#xff01; 基因组组装&#xff01; 从宏基因组数据中组装获得细菌的完整基因组&#xff08;complete MAGs&#xff09;是微生物组研究的长期目标&#xff0c;但基于NGS的宏基因组测序和组装方法是无法实现完整的细菌基因组组装的。即便是红极一…

appium-app测试-环境搭建手机和adb设置

1、手机设置&#xff08;Android手机-readMI k50&#xff09;&#xff1a; 1.1开发者模式设置 入口&#xff1a;设置–我的设备–全部参数与信息&#xff1b; 连续点击MIUI版本7下&#xff0c;进入开发者模式 1.2、开发者选项设置 入口&#xff1a;设置–更多设置–开发者选项…

np.convolve(x,h, mode=‘##‘)的使用

用法&#xff1a; np.convolve(a,v,mode) a代表卷积数据&#xff0c;v卷积核大小&#xff0c;mode卷积方式&#xff0c;mode卷积方式有三种 same full valid mode可能的三种取值情况&#xff1a; full’ 默认值&#xff0c;返回每一个卷积值&#xff0c;长度是NM-1,在卷积的…

MyBatis:使用 MyBatis 实现增删改查、各种配置解析

文章目录 MyBatis&#xff1a;Day 01一、简介二、第一个 MyBatis 程序1. 步骤2. 注意 三、增、删、改、查四、扩展1. Map2. 模糊查询 五、配置解析&#xff08;参考手册&#xff09;1. 环境配置&#xff1a;environments2. 属性优化&#xff1a;properties3. 类型别名&#xff…