考研拓展:汇编基础
一.说明
本篇博客是基于考研之计算机组成原理中的程序机器级代码表示进行学习的,并不是从汇编语言这一门单独的课程来学习的,涉及的汇编语言知识多是帮助你学习考研之计算机组成原理中对应的考点。
二.相关寄存器
1.相关寄存器
X86处理器中有8个32位的通用寄存器,各寄存器及说明:
| 名称 | 说明 | 作用 |
|---|---|---|
| EAX | 累加器 | 什么数据都可以存 |
| EBX | 基地址寄存器 | 什么数据都可以存 |
| ECX | 计数寄存器 | 什么数据都可以存 |
| EDX | 数据寄存器 | 什么数据都可以存 |
| ESI | 变址寄存器 | 用于线性表、字符串的处理 |
| EDI | 变址寄存器 | 用于线性表、字符串的处理 |
| EBP | 堆栈基指针 | 用于实现函数调用 |
| ESP | 堆栈顶指针 | 用于实现函数调用 |
注意:上面四个寄存器的使用非常灵活,可以只使用它的16位,甚至只使用它的8位,而后面四个寄存器则比较呆,只能单独一起使用32位。
单独使用前4个寄存器,名称如下:

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格式。

两种格式需要注意的点都在这里了。
五.选择语句的机器级表示
1.无条件转移指令-jmp
jmp <地址>PC无条件转移至<地址>jmp 128<地址>可以用常数给出jmp [999]<地址>可以来自于主存jmp eax<地址>可以来自于寄存器jmp NEXT<地址>可以用“标号”锚定
2.有条件转移指令

需要注意的是,因为是有条件注意,所以它经常和cmp比较指令一起组合使用
例如:
cmp eax,ebx #比较寄存器eax和ebx里的值
jg NEXT #若eax > ebx,则跳转到NEXT:
3.C语言程序编译成汇编程序
示例如下:

六.循环语句机器级表示
循环语句我们非常熟悉了,也知道他们之间可以互相转换。
例如:
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指令实现的功能,也一定能用条件转移实现。
补充:本篇博客仅仅针对于考研之计算机组成原理指令系统这一章节,仅作了解即可。
相关文章:
考研拓展:汇编基础
一.说明 本篇博客是基于考研之计算机组成原理中的程序机器级代码表示进行学习的,并不是从汇编语言这一门单独的课程来学习的,涉及的汇编语言知识多是帮助你学习考研之计算机组成原理中对应的考点。 二.相关寄存器 1.相关寄存器 X86处理器中有8个32位…...
10 【Sass语法介绍-继承】
1.前言 在我们编写样式的时候,很多情况下我们几个不同的类会有相同的样式代码,同时这几个类又有其自己的样式代码,这使我们就可以通过 Sass 提供的继承 extend 来实现。本节内容我们将讲解 Sass 继承的语法以及继承的多重延伸等等࿰…...
魔兽worldserver.conf 服务端配置文件说明
魔兽worldserver.conf 服务端配置文件说明 我是艾西,今天把很多小伙伴需要的魔兽worldserver.conf 服务端配置文件说明分享给大家,大家可以自己研究参考下 worldserver.conf 这个文件是服务端的配置文件,可以在这里做很多个性化修改 注意&a…...
关于电信设备进网许可制度若干改革举措的通告
Q:3月1日后,不再实行进网许可管理的11种电信设备是否还需要继续申请和使用标志? A:3月1日起,对不再实行进网许可管理的11种电信设备停止核发进网许可标志,已申请的标志可在证书有效期内继续使用。 Q&#…...
TuGraph 开源数据库体验
TuGraph 开源数据库体验 文章目录 TuGraph 开源数据库体验1. 简单介绍2. 可视化界面体验:查询界面:数据建模:数据导入: 3. 体验心得: 1. 简单介绍 TuGraph 是蚂蚁集团自主研发的大规模图计算系统,提供图数…...
【C++】18.哈希
1.unordered_set和unordered_map 使用与set和map的用法一样 #include <iostream> #include <unordered_map> #include <unordered_set> #include <map> #include <set> #include <string> #include <vector> #include <time.h&…...
C# 利用TabControl控件制作多窗口切换
TabControl控件切换时触发的事件 选项卡切换触发的是TabControl控件的SelectedIndexChanged事件。 当TabControl控件的任何一个TabPage被点击或选择,即发生SelectedIndexChanged事件事件。 代码如下: private void tabControl1_SelectedIndexChanged(o…...
论文阅读《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID》
论文地址:https://arxiv.org/pdf/2206.02066.pdf 源码地址:https://github.com/XuJiacong/PIDNet 概述 针对双分支模型在语义分割任务上直接融合高分辨率的细节信息与低频的上下文信息过程中细节特征会被上下文信息掩盖的问题,提出了一种新的…...
SOA与中间件、基础件的发展
应运而生的SOA 美国著名的IT市场研究和顾问咨询公司Gartner预测:到2006年,采用面向服务的企业级应用将占全球销售出的所有商业应用产品的80 以上到2008年,SOA将成为绝对主流的软件工程实践方法。近几年全球各大IT巨头纷纷推出自己的面向服务的应用平…...
渗透测试 | 目录扫描
0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…...
基于Springboot的班级综合测评管理系统的设计与实现
摘要 随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要…...
比较全的颜色RGB值对应表 8位 16位
实色效果英文名称R.G.B16色实色效果英文名称R.G.B16色Snow255 250 250#FFFAFAPaleTurquoise1187 255 255#BBFFFFGhostWhite248 248 255#F8F8FFPaleTurquoise2174 238 238#AEEEEEWhiteSmoke245 245 245#F5F5F5PaleTurquoise3150 205 205#96CDCDGainsboro220 220 220#DCDCDCPaleT…...
freertos使用基础
FreeRtos快速入门 一,基础知识1.工作方式简介(不深入介绍原理)2,移值3,什么是内存管理 二,API的作用跟使用方法1,创建任务 最近跟着韦东山老师学习 FreeRTOS ,记录下来加…...
Spring Boot引用外部JAR包和将自己的JAR包发布到本地Maven库
Spring Boot引用外部JAR包 Spring Boot 项目可以通过在项目中引入外部 JAR 包来增强功能。以下是使用Spring Boot引用外部JAR包的步骤: 将外部JAR包添加到项目中,可以通过直接将JAR包复制到项目目录下的“lib”目录中,或者使用Maven的方式添…...
微信小程序原生开发功能合集十二:编辑界面的实现
本章实现编辑界面的实现处理,包括各编辑组件的使用及添加数据保存数据流程的实现处理。 另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下: 1. CSDN课程: https://edu.csdn.net/course/…...
基于3D渲染和基于虚拟/增强现实的IIoT原理的数字孪生平台的方案论文阅读笔记
基于3D渲染和基于虚拟/增强现实的IIoT原理的数字孪生平台的方案论文阅读笔记 论文原文链接:https://ieeexplore.ieee.org/abstract/document/9039804 本笔记对部分要点进行了翻译和批注,原文和翻译可参考链接阅读,此处不进行完整翻译。 论文…...
腾讯云镜YunJing——Agent定时任务脚本分析
缘起 如果你有台腾讯云主机,会发现默认有个叫 YunJing 的进程。 把它kill掉后,发现一段时间又出现了 这是为什么捏? 分析定时任务配置文件 通过crontab定时任务目录, 会发现有个叫yunjing的配置文件。 */30 * * * * root /usr/local/qc…...
如何使用java编写差分进化算法
差分进化算法属于一种进化算法,以全局最优性、收敛速度快等特点,得到很多学者的关注,并将其扩展到参数优化、数值优化、工程优化、路径优化、机器学习等一系列研究中。 而差分进化算法的原理即过程又是什么呢? 一、什么是差分进…...
Enterprise:如何在 Elastic 企业搜索引擎中添加对更多语言的支持
作者:Ioana-Alina Tagirta Elastic App Search 中的引擎(engines)使你能够索引文档并提供开箱即用的可调搜索功能。 默认情况下,引擎支持预定义的语言列表。 如果你的语言不在该列表中,此博客将说明如何添加对其他语言…...
SqlServer数据库中文乱码问题解决方法
这个问题在网上找了很多资料都没找到真正解决问题的办法,最终去了官网,终于找到问题的答案了,整理出来做个记录。 问题描述: 项目中遇到一个问题,sqlserver中的数据是ok的,结果保存到mysql中是乱码&#…...
Lingtrain Aligner:如何让多语言文本对齐变得像拼图一样简单?
Lingtrain Aligner:如何让多语言文本对齐变得像拼图一样简单? 【免费下载链接】lingtrain-aligner Lingtrain Aligner — ML powered library for the accurate texts alignment. 项目地址: https://gitcode.com/gh_mirrors/li/lingtrain-aligner …...
AI 挖洞新思路、深度解析两大间接提示词注入漏洞攻防思路,注入也能获得上万美金
0x01 简介 在移动 AI 领域,我已经很久没有关注过提示词注入漏洞了,在前两天关注到 Gemini 的漏洞之前,我对提示词注入的印象还停留在两年前,当时搞搞越狱,觉得这东西是纯内容安全,也只能等未来对能够进…...
SaaS ERP和传统ERP,到底差在哪?
这几年,ERP这个词越来越火。但有意思的是,很多企业老板、管理层,甚至已经在用ERP的人,其实都没真正分清:“SaaS ERP”和“传统ERP”,到底差在哪。很多人会觉得:“不都是ERP吗?不就是…...
别再为485传感器没文档发愁了!一个USB转485模块+两款免费软件,5分钟搞定Modbus通信测试
5分钟极简方案:用USB转485模块与开源工具破解Modbus传感器通信 当你拿到一个没有文档的485温湿度传感器时,是否曾为如何读取数据而头疼?本文将分享一套经过实战验证的极简工具组合——仅需一个常见的USB转485转换器和两款免费软件,…...
DP/eDP协议深度解析--control symbol的插入时机与实现逻辑
1. 深入理解DP/eDP协议中的control symbol 第一次接触DP/eDP协议时,最让我困惑的就是那些神秘的control symbol。它们就像交通信号灯一样,指挥着视频数据的传输流程。简单来说,control symbol是嵌入在视频数据流中的特殊控制字符,…...
WarcraftHelper:魔兽争霸3终极增强插件,让经典游戏在现代电脑焕发新生
WarcraftHelper:魔兽争霸3终极增强插件,让经典游戏在现代电脑焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper Warcraf…...
实验室新到Franka机器人?保姆级Ubuntu20.04+ROS Noetic配置避坑指南
Franka机器人开箱配置全攻略:Ubuntu 20.04与ROS Noetic深度适配指南 当实验室那台崭新的Franka Emika机械臂拆箱时,整个团队都围了上来——这台价值不菲的协作机器人即将成为我们最重要的研究伙伴。但很快我们就发现,从开箱到真正让机械臂流畅…...
Haneke最佳实践:10个技巧让你的图片缓存更高效
Haneke最佳实践:10个技巧让你的图片缓存更高效 【免费下载链接】Haneke A lightweight zero-config image cache for iOS, in Objective-C. 项目地址: https://gitcode.com/gh_mirrors/ha/Haneke Haneke是一款适用于iOS平台的轻量级零配置图片缓存库…...
避坑指南:Tina Linux下MIPI DSI与LVDS屏调试的那些‘坑’(以V853/D1s为例)
Tina Linux下MIPI DSI与LVDS屏调试实战避坑指南(V853/D1s开发板为例) 1. 高速差分接口调试的"死亡陷阱" 当V853开发板首次连接那块7英寸MIPI屏时,我遭遇了职业生涯最诡异的显示故障——屏幕上半部正常显示,下半部却呈现…...
ECB02蓝牙模块与手机通信避坑指南:从AT指令调试到数据收发实战
ECB02蓝牙模块与手机通信实战:从AT指令调试到数据收发的全流程解析 当你第一次拿到ECB02蓝牙模块时,可能会被这个小巧的硬件和复杂的AT指令集弄得手足无措。作为一名嵌入式开发者,我清楚地记得自己初次尝试让手机与模块通信时的挫败感——明明…...
