程序的机器即代码表示

高级语言与机器级代码之间的对应

x86汇编语言指令基础

image.png
mov指令
mov目的操作数d,源操作数s destination:目的地 source:来源、发源地
#mov指令功能: 将源操作数s复制到目的操作数d所指的位置

mov eax, ebx
#将寄存器ebx的值复制到寄存器eax
mov eax, 5
#将立即数5复制到寄存器eax
mov eax, dword ptr [af996h]
#将内存地址 af996h所指的32bit值复制到寄存器eax
mov byte ptr [af996h], 5
#将立即数5复制到内存地址 af996h所指的一字节中

指明内存的读写长度:
dword ptr一一双字,32bit
word ptr一一单字,16bit
byte ptr一一字节,8bit
寄存器
image.png
image.png
image.png
mov eax, dword ptr [ebx]
#将ebx所指主存地址的32bit复制到eax寄存器中
mov dword ptr [ebx], eax
#将eax的内容复制到ebx所指主存地址的 32bit
mov eax, byte ptr [ebx]
#将ebx所指的主存地址的8bit复制到eax
mov eax, [ebx]
#若未指明主存读写长度,默认32 bit
mov [af996h], eax
#将eax的内容复制到 af996h所指的地址(未指明长度默认32bit)
mov eax, dword ptr [ebx+8]
#将ebx+8所指主存地址的32bit复制到eax寄存器中
mov eax, dword ptr [af996-12h]
#将 af996-12所指主存地址的32bit复制到eax寄存器中
image.png

常用的x86汇编指令

常见的算数运算指令
image.png
常见的逻辑运算指令
image.png

AT&T格式和Intel格式

image.png
image.png

选择语句的机器级表示

无条件转移指令
jmp <地址> #PC无条件转移至<地址>
jmp 128 #<地址>可以用常数给出
jmp eax #<地址>可以来自于寄存器
jmp [999] #<地址>可以来自于主存
jmp NEXT #<地址>可以用“标号”锚定
image.png
image.png
条件转移指令–jxxx
image.png
image.png
image.png
cmp指令的底层原理
image.png

循环语句的机器级表示.

image.png
所有loop指令实现循环
image.png
理论上,能用loop指令实现的功能一定能用条件转移指令实现
使用loop指令可能会使代码更清晰简洁

补充: loopx指令―一如 loopnz, loopz
loopnz—当ecx!=0 && ZF==0时,继续循环
loopz—当ecx!=0 && ZF==1时,继续循环

CISC和RISC

CISC:Complex Instruction Set Computer
设计思路:一条指令完成一个复杂的基本功能。
代表:x86架构,主要用于笔记本、台式机等
80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令

RISC: Reduced Instruction Set Computer
设计思路:一条指令完成一个基本“动作”;
多条指令组合完成一个复杂的基本功能。
代表:ARM架构,主要用于手机、平板等

比如设计一套能实现整数、矩阵加/减/乘运算的指令集:
CISC的思路:
除了提供整数的加减乘指令除之外,还提供矩阵的加法指令、矩阵的减法指令、矩阵的乘法指令
一条指令可以由一个专门的电路完成有的复杂指令用纯硬件实现很困难
->采用“存储程序”的设计思想,由一个比较通用的电路配合存储部件完成一条指令

RISC的思路:
只提供整数的加减乘指令
一条指令一个电路,电路设计相对简单,功耗更低“并行”、“流水线”
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题-二叉树】--110.平衡二叉树

110.平衡二叉树 方法一&#xff1a;自顶向下递归 对于当前遍历到的节点&#xff0c;首先计算左右子树的高度&#xff0c;如果左右子树的高度差是否不超过 111&#xff0c;再分别递归地遍历左右子节点&#xff0c;并判断左子树和右子树是否平衡。这是一个自顶向下的递归的过程。…

GoWeb开发框架gin-基础路由使用

文章目录 1.安装并写一个demo2.配置GoLang热加载脚手架3.配合net/http使用完整示例4.返回值4.1String返回值4.2Json返回值4.3struct结构体返回值4.4jsonp返回值4.5XML返回值 5.接收前端传过来的参数5.1get请求传值5.2form表单传值5.3接收结构体5.4路由地址传参 6.完整代码 1.安…

00.仿简道云公式实战-学前须知

简道云介绍&#xff1a;简道云作为一款个性化应用搭建工具&#xff0c;支持用户在线无编程、免费搭建管理应用&#xff0c;如进销存系统&#xff0c;OA系统等常见应用&#xff0c;公式可以帮助用户提高填写表单的效率&#xff0c;将一些数据自动计算出来。了解简道云公式的小伙…

flstudio21.3.2304高级版水果编曲音乐软件

flstudio高级版是一款适用于广泛领域的音频编辑软件。它支持多通道混音器和VST插件&#xff0c;包括数百种乐器和效果插件。它还为您提供了一个乐谱编辑器&#xff0c;需要对不同乐器的节奏进行必要的编辑。Flstudio具有许多内置电子合成声音&#xff0c;可提供更广泛的电子声音…

代码随想录二刷 |二叉树 | 二叉树的右视图

代码随想录二刷 &#xff5c;二叉树 &#xff5c; 二叉树的右视图 题目描述解题思路代码实现 题目描述 199.二叉树的右视图 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例…

推荐4个优秀的 Python 时间序列分析库

时间序列分析在金融和医疗保健等领域至关重要&#xff0c;在这些领域&#xff0c;理解随时间变化的数据模式至关重要。在本文中&#xff0c;我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库…

【unity实战】一个通用的FPS枪支不同武器射击控制脚本

文章目录 前言模型素材文章用到的粒子火光特效射击效果换弹瞄准开枪抖动效果设置显示文本最终代码不同武器射击效果1. 手枪2. 机枪3. 狙击枪4. 霰弹枪5. 加特林 其他感谢完结 前言 实现FPS枪支不同武器效果&#xff0c;比如手枪&#xff0c;喷子&#xff0c;狙击枪&#xff0c…

Redis生产实战-Redis集群故障探测以及降级方案设计

Redis 集群故障探测 在生产环境中&#xff0c;如果 Redis 集群崩溃了&#xff0c;那么会导致大量的请求打到数据库中&#xff0c;会导致整个系统都崩溃&#xff0c;所以系统需要可以识别缓存故障&#xff0c;限流保护数据库&#xff0c;并且启动接口的降级机制 降级方案设计 …

贪心算法及相关题目

贪心算法概念 贪心算法是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;算法得到的是在某种意义上的局部最优解 。 贪心算法性质&#xff08;判断是否可以使用贪心算法&#xff09; 1、贪…

【力扣周赛】第 372 场周赛( ⭐查询 离线做法)TODO

文章目录 竞赛链接Q1&#xff1a;2937. 使三个字符串相等竞赛时代码——检查三个字符串的最长公共前缀子串 Q2&#xff1a;2938. 区分黑球与白球竞赛时代码 Q3&#xff1a;2939. 最大异或乘积竞赛时代码——位运算解法2—— O ( 1 ) O(1) O(1)做法&#x1f44d;&#xff08;大量…

php中json_encode编码json中出现HTML代码导致无法正常输出的解决办法

$options JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT; $data array(key > <p>test</p>);echo json_encode($data, $options);JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, 和 JSON_HEX_QUOT 是 PHP 中 json_encode() 函数的常量选项&#…

Pytorch-CNN轴承故障一维信号分类(二)

目录 前言 1 数据集制作与加载 1.1 导入数据 1.2 数据加载&#xff0c;训练数据、测试数据分组&#xff0c;数据分batch 2 CNN-2D分类模型和训练、评估 2.1 定义CNN-2d分类模型 2.2 定义模型参数 2.3 模型结构 2.4 模型训练 2.5 模型评估 3 CNN-1D分类模型和训练、评…

【密码学基础】Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…

java应用打包运行的4种方法

文章目录 1、方法一&#xff1a;打成jar部署运行2、方法二&#xff1a;通过自制启动器的方式运行3、方法三&#xff1a;使用jpackage把java和jdk一起打包4、方法四&#xff1a;使用GraalVM编译为原生应用4.1、使用native-image-agent(Graalvm内工具)工具来收集这些运行库信息4.…

软件无线电SDR-频谱采集python实现

sdr做的频谱采集&#xff0c;保存的500张频谱图&#xff0c;能看出来是什么东西吗&#xff1f;

成都工业学院Web技术基础(WEB)实验四:CSS3布局应用

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

perl使用Archive::Tar模块进行文件打包

使用perl的Archive::Tar 模块打包文件夹中的指定文件&#xff0c;输出格式 .tar.gz 。下面是perl代码&#xff1a; #! /usr/bin/perl use v5.14; use File::Find; use Archive::Tar;my filesArry (); my $callback sub {push filesArry, $File::Find::name if -f; };find($c…

【Hive】启动beeline连接hive报错解决

1、解决报错2、在datagrip上连接hive 1、解决报错 刚开始一直报错&#xff1a;启动不起来 hive-site.xml需要配置hiveserver2相关的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bin…

如何打印富文本控件中的内容?

出于某种原因&#xff0c;人们确实对打印富文本控件中的内容感到困惑。 我并非打印方面的专家&#xff0c;但是经过对资料的研究的&#xff0c;我也算弄明白了&#xff0c;今天在此记录一下。 解决问题的关键是这个消息&#xff1a;EM_FORMATRANGE。 每次发送这个消息的时候&a…