【汇编语言基础入门】—— 汇编的基础介绍

news2024/11/20 8:23:23

文章目录

    • 一、机器语言
    • 二、汇编语言
    • 三、CPU 与 CPU 内存
      • 1、CPU 对存储器的读写
    • 四、CPU 的典型构成
      • 1、寄存器
      • 2、通用寄存器
      • 3、物理地址的计算方法
      • 4、CS
      • 5、DS
      • 6、SS SP

一、机器语言

  在学习汇编语言之前,我们应该先了解一下什么是机器语言。机器语言是机器指令的集合,机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将它转变成一系列高低电平,使计算机的电子器件受到驱动,进行运算。
  每一种微处理器由于硬件设计和内部结构的不同,需要不同的电平脉冲来控制它工作,所以每一种微处理器都有自己的机器指令集,也就是机器语言。
  早期的程序设计使用的都是机器语言。程序员们将用 0、1 数字编成的程序代码打印在纸带或者卡片上,1 打孔,0 不打孔,再将程序通过纸带机或者卡片机输入计算机进行运算。下面是应用 8086CPU 运算 s = 768 + 12288 - 1280 的机器码:
在这里插入图片描述
  从上面的案例就可以看出,书写和阅读机器码程序非常的困难,出现了错误也很难排查。一个简单的程序就要有几十行机器码,为了避免这种麻烦,诞生了汇编语言。

二、汇编语言

  汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言。汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法。汇编指令是机器指令便于记忆的书写格式。

  举个例子,机器指令 1000100111011000 表示将寄存器 BX 中的内容送到 AX 中。汇编指令为 mov ax,bx。

  操作:将寄存器 BX 中的内容送到 AX 中。
  机器指令: 1000100111011000
  汇编指令:mov ax,bx

  在这之后,程序员就开始用汇编语言编写源程序,由于计算机只能读懂机器指令,需要一个能够将汇编指令转换成机器指令的翻译程序,这样的程序称为编译器。程序员用汇编语言写出源程序,再用汇编编译器将其编译成机器码,最后由计算机执行。
在这里插入图片描述

汇编语言由以下三类指令组成

  • 汇编指令:机器码的助记符,有对应的机器码。
  • 伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
  • 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。

汇编指令的核心是汇编指令,他决定了汇编语言的特性。

三、CPU 与 CPU 内存

   在学习汇编语言过程中,遇到的绝大部分指令都是跟内存、CPU 有关的。

1、CPU 对存储器的读写

  CPU 要从内存中读数据的时候,首先要指定存储单元的地址,还要指明要对哪一个器件进行操作,是读数据还是写入数据。
在这里插入图片描述
  CPU 通过地址总线来指定存储器单元,地址总线上能传送多少不同的信息,CPU 就可以对多少个存储单元进行寻址。CPU 通过数据总线与内存或其他器件之间进行数据传送。数据总线的宽度决定了 CPU 和外界的数据传送速度。CPU 通过控制总线对外部器件进行控制,有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制,控制总线的宽度决定了 CPU 对外部器件的控制能力。

四、CPU 的典型构成

  一个 CPU 由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。在 CPU 中,运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作,内部总线连接各种器件,在它们之间进行数据的传送。寄存器是 CPU 中程序员可以用指令读写的部件,可以通过改变寄存器中的内容来实现对 CPU 的控制。

1、寄存器

  8086CPU 有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW都是16位,一个16位寄存器可以存储一个16位的数据。不同的 CPU,寄存器的个数、结构都是不相同的。

2、通用寄存器

  通用寄存器通常用来存放一般性的数据,有AX、BX、CX、DX,它们可分为两个可独立使用的8位寄存器。AX的低 8 位(0位 ~ 7位)构成了 AL 寄存器, 高 8 位(8位 ~ 15位)构成了 AH 寄存器。

16位8高位8低位
AXAHAL
BXBHBL
CXCHCL
DXDHDL

3、物理地址的计算方法

  当 CPU 访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址成为物理地址。 CPU 通过地址总线送入存储器的,必须是一个内存单元的物理地址。在 CPU 向地址总线上发送物理地址之前,必须要在内部先形成这个物理地址。不同的 CPU 可以有不同的形成物理地址的方法。我们来看看 8086CPU 是如何在内部形成内存单元的物理地址的。
   8086CPU 有20位地址总线,可以传送20位地址,达到1MB寻址能力。8086CPU 是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。,从 8086CPU 的内部结构来看,如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB。8086CPU 采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
在这里插入图片描述
   当 8086CPU 要读写内存时:

  • CPU的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
  • 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
  • 地址加法器将两个地址合成为一个物理地址;
  • 地址加法器通过内部总线将物理地址送上输入输出控制总线
  • 输入输出控制总线将物理地址送上地址总线
  • 物理地址被地址总线传送到存储器

4、CS

  8080CPU中有4个段寄存器:CS、DS、SS、ES,可以提供内存单元的段地址。CS为代码段寄存器。IP为指令指针寄存器。CPU将CS:IP指向的内容当作指令执行。
在这里插入图片描述  8080CPU的工作过程简要描述:

  • 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
  • IP=IP+所读取指令的长度,从而指向下一条指令;
  • 执行指令。转到步骤1,重复这个过程。

  在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。

  8086CPU提供转移指令修改CS、IP的内容。

  • jmp 段地址:偏移地址:用指令中给出的段地址修改CS,偏移地址修改IP。如:jmp 2AE3:3

  • jmp 某一合法寄存器:仅修改IP的内容。如:jmp ax。在含义上就像:mov IP,ax

5、DS

  CPU要读写内存单元的时候,必须先给出这个内存单元的地址,在8086CPU中,内存地址由段地址和偏移地址组成。DS寄存器用来存放要访问的数据的段地址。当我们需要读取 1000H 单元的内容时:

mov bx, 1000H
mov ds, bx
mov al, [0]

注意 :8086CPU不支持将数据直接送入段寄存器的操作。

6、SS SP

  SS 是堆栈段地址寄存器,存放堆栈段的起始地址。SP 是附加段地址寄存器,存放附加段的起始地址。堆栈是内存中一块特定的区域,其中数据按照先进先出原则,堆栈段地址存放于 SS 寄存器中,偏移地址存放在附加段地址寄存器 SP 中,他们永远指向栈顶。堆栈的初始化是通过设置 SS 及 SP 值来完成的,可以由编译系统自动完成。

  • 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
  • 💟 作    者:锡兰_CC ❣️
  • 📝 专    栏:【OpenCV • c++】计算机视觉
  • 🌈 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力💪💪💪

更多专栏订阅推荐:

  • 👍 【开卷数据结构】
  • 💛 【备战蓝桥,冲击省一】
  • 💕   从零开始的 c++ 之旅
  • 💖 【OpenCV • c++】计算机视觉

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

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

相关文章

网络渗透测试(被动扫描)

被动扫描 主要是指的是在目标无法察觉的情况下进行信息搜集。在Google上进行人名的搜素就是一次被动扫描。最经典的被动扫描技术就是"Google Hacking"技术。由于Google退出中国,暂时无法使用。在此介绍三个优秀的信息搜集工具 被动扫描范围 1.企业网络…

Kafka(三)生产者发送消息

文章目录 生产者发送思路自定义序列化类配置生产者参数提升吞吐量 发送消息关闭生产者结语示例源码仓库 生产者发送思路 如何确保消息格式正确的前提下最终一定能发送到Kafka? 这里的实现思路是 ack使用默认的all开启重试在一定时间内重试不成功,则入库&#xff…

基于Python实现,调用百度通用翻译API-详解

概述 在工作上需要各个国家语言的翻译方面很多地方用的上。 获取API权限: 登录百度账号,在个人信息界面,包括修改密码、绑定手机、身份人证等 https://api.fanyi.baidu.com/api/trans/product/desktop?req=developer 百度翻译开放平台 在开发者中心:需要开通个人账号…

13.利用辗转相除法求两个整数的最大公约数和最小公倍数。如96,36

文章目录 前言一、题目描述 二、题目分析 三、解题 前言 本系列为循环结构编程题,点滴成长,一起逆袭。 一、题目描述 利用辗转相除法求两个整数的最大公约数和最小公倍数,如96,36 二、题目分析 最小公倍数(输入的两个数之积)除(它们的最大公约数) 三…

【斗破年番】老婆们见面针锋相对,万蝎门勾结魂殿,大战一触即发

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料,斗破苍穹年番70集剧情内容。萧炎对小医仙的信任可谓是深不可测,然而美杜莎与小医仙之间的隔阂却始终存在。尽管美杜莎和紫妍都已加入毒宗,但两人之间的冲突从未停…

模型剪枝Lab

这里是MIT 6.5940 Fall 2023的第一个实验Lab1的一些笔记,课程传送门:Han Lab Setup First, install the required packages and download the datasets and pretrained model. Here we use CIFAR10 dataset and VGG network which is the same as what…

java 之 泛型的详细介绍

文章目录 1. 为什么需要泛型?2. 泛型的基本概念3. 泛型类的例子4. 泛型方法的例子5. 泛型的好处 泛型使用的位置1. 泛型类(Generic Class):2. 泛型接口(Generic Interface):3. 泛型方法&#xf…

vue2按需导入Element(vite打包)

1.安装element 说明:-S是生产依赖。 npm install element-ui2 -S 2.安装babel-plugin-component 说明:-D是开发模式使用。 npm install babel-plugin-component -D 3. vite.config.js 说明:借助 babel-plugin-component ,我们可…

人工智能极简史:一文读懂ChatGPT的前世今生

2022年11月30日,OpenAI推出的一款人工智能技术驱动的自然语言处理工具——ChatGPT,迅速在社交媒体上走红,短短5天,注册用户数就超过100万。 2023年1月末,ChatGPT的月活用户已突破1亿,一度成为史上增长最快的…

JSON.parse --- 搜索框

一 &#xff0c; JSON.parse this.num_normsTwo JSON.parse(res.result.normsTwo) 二. 搜索框 <template><div class"app-container"><span style"margin-left:120px;margin-right: 20px;width: 100px; display: inline-block;">物…

大语言模型可以学习规则11.13

大型语言模型可以学习规则 摘要1 引言2 准备3 从假设到理论3.1 诱导阶段&#xff1a;规则生成和验证3.2 演绎阶段&#xff1a;使用规则库进行显式推理 4 实验评估实验装置4.2 数字推理 5 相关工作 摘要 当提示一些例子和中间步骤时&#xff0c;大型语言模型&#xff08;LLM&am…

【网络豆送书第六期】《嵌入式虚拟化技术与应用》

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 本期好书推荐&#xff1a;《嵌入式虚拟化技术与应用…

面试 | 再也不怕被问 Binder 机制了

Binder 机制 Binder 机制是 Android 特有的一种进程间通信&#xff08;IPC&#xff09;方式 1.1 Binder 机制的作用和原理&#xff1f; Linux系统将一个进程分为用户空间和内核空间。对于进程之间来说&#xff0c;用户空间的数据不可共享&#xff0c;内核空间的数据可共享&a…

Django下的Race Condition漏洞

目录 环境搭建 无锁无事务的竞争攻击复现 无锁有事务的竞争攻击复现 悲观锁进行防御 乐观锁进行防御 环境搭建 首先我们安装源码包&#xff1a;GitHub - phith0n/race-condition-playground: Playground for Race Condition attack 然后将源码包上传到Ubuntu 为了方便使…

python双端队列_中间是头两边是尾_两边是头中间是尾

双端队列的顺序表存储结构以及两种特殊的双端队列 双端队列 是一种允许我们同时从前端和后端添加和删除元素的特殊队列&#xff0c;它是队列和栈的结合体。 双端队列&#xff08;deque&#xff09;与队列&#xff08;queue&#xff09;就差了两个字&#xff0c;队列里元素只能…

uniapp——项目day04

购物车页面——商品列表区域 渲染购物车商品列表的标题区域 1. 定义如下的 UI 结构&#xff1a; 2.美化样式 渲染商品列表区域的基本结构 1. 通过 mapState 辅助函数&#xff0c;将 Store 中的 cart 数组映射到当前页面中使用&#xff1a; import badgeMix from /mixins/tab…

2023年【建筑电工(建筑特殊工种)】找解析及建筑电工(建筑特殊工种)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 建筑电工(建筑特殊工种)找解析是安全生产模拟考试一点通生成的&#xff0c;建筑电工(建筑特殊工种)证模拟考试题库是根据建筑电工(建筑特殊工种)最新版教材汇编出建筑电工(建筑特殊工种)仿真模拟考试。2023年【建筑电…

1 Supervised Machine Learning Regression and Classification

文章目录 Week1OverViewSupervised LearningUnsupervised LearningLinear Regression ModelCost functionGradient Descent Week2Muliple FeatureVectorizationGradient Descent for Multiple RegressionFeature ScalingGradient DescentFeature EngineeringPolynomial Regress…

数据结构线性表——栈

前言&#xff1a;哈喽小伙伴们&#xff0c;今天我们将一起进入数据结构线性表的第四篇章——栈的讲解&#xff0c;栈还是比较简单的哦&#xff0c;跟紧博主的思路&#xff0c;不要掉队哦。 目录 一.什么是栈 二.如何实现栈 三.栈的实现 栈的初始化 四.栈的操作 1.数据入栈…

CTFhub-RCE-读取源代码

源代码&#xff1a; <?php error_reporting(E_ALL); if (isset($_GET[file])) { if ( substr($_GET["file"], 0, 6) "php://" ) { include($_GET["file"]); } else { echo "Hacker!!!"; } } else {…