汇编语言基础
引言
汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。
基础知识
1.1机器语言
机器语言是机器指令的集合。
机器指令展开来讲就是一台机器可以正确执行的命令。
指气:01010000(PUSH AX)
电平脉冲 :
早期的程序员们将 0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算
1.2汇编语言的产生
汇编语言的主体是汇编指令。
汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。
汇编指令是机器指令的助记符
机器指令: 1000100111011000
操作 : 寄存器 BX的内容送到AX中
汇编指令 :MOV AX,BX
这样的写法与人类语言接近,便于阅读和记忆
寄存器 : 简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。AX是其中一个寄存器的代号,BX是另一个寄存器的代号。
计算机能读懂的只有机器指令,那么如何让计管机执行程序员用汇编指令编写的程序呢?

1.3汇编语言的组成
汇编语言由以下3类组成 :
1、汇编指令(机器码的助记符)(由编译器执行 )
2、伪指令
3、其它符号 (由编译器识别)
汇编语言的核心是汇骗指令,它决定了汇编语言的特性。
1.4存储器
CPU 是计算机的核心部件·它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据
指令和数据在存储器中存放,也就是平时所说的内存
在一台PC机中内存的作用仅次于CPU。
离开了内存,性能再好的CPU也无法工作。
磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU 使用。
(cpu读内存快 内存读硬盘慢)
1.5指令和数据
指令和数据是应用上的概念。
在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。
1.6存储单元
存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号 ;
对于大容量的存储器一般还用以下单位来计量容量 (以下用B来代表Byte) :
IKB=1024B IMB=1024KB IGB=1024MB ITB=1024GB
1.7CPU对存储器的读写
CPU要想进行数据的读写,必须和外部器件 (标准的说法是芯片) 进行三类信息的交互 :
存储单元的地址 (地址信息)
器件的选择,读或写命令 (控制信息)
读或写的数据 (数据信息 )
在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。
物理上 : 一根根导线的集合 ;
逻辑上划分为 :
地址总线
数据总线
控制总线

1.8地址总线
CPU是通过地址总线来指定存储单元的。
地址总线上能传送多少个不同的信息 ,CPU就可以对多少个存储单元进行寻址。
一个CPU有N根地址总线,则可以说这个CPU的地址总线的宽度为N。
这样的CPU最多可以寻找2的N次方个内存单元
1.9数据总线
CPU与内存或其它器件之间的数据传送是通过数据总线来进行的。
数据总线的宽度决定了CPU和外界的数据传送速度。
1.10控制总线
CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU做对外部器件的控制能力。
控制总线上发送的控制信息
前面所讲的内存读或写命令是由几根控制线综合发出的 :其中有一根名为读信号输出控制线负责由CPU 向外传送读信号,CPU 向该控制线上输出低电平表示将要读取数据 ;
有一根名为写信号输出控制线负责由CPU后外传送写信号。
1.11内存地址空间
什么是内存地址空间呢?
一个CPU的地址线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。下面深入讨论
首先需要介绍两部分基本知识,主板和接口卡。
1.12主板
在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件
这些器件通过总线 (地址总线、数据总线、控制总线) 相连。
1.13接口卡
计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制。
CPU对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡·
1.14各类存储器芯片
从读写属性上看分为两类 :随机存储器 (RAM) 和只读存储器 (ROM)
从功能和连接上分类 :
随机存储器RAM
口装有BIOS的ROM
接口卡上的RAM
PC机中各类存储器的逻辑连接情况
装有BIOS的ROMBIOS : Basic Input/Output System,基本输入输出系统。
BIOS是由主板和各类接口卡(如: 显卡网卡等) 厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接O卡上插有存储相应BIOS的ROM。
Return

1.15内存地址空间.
上述的那些存储器在物理上是独立的器件。
但是它们在以下两点上相同 :1.都和CPU的总线相连。2、CPU对它们进行读或写的时候都通过控制线发出内存读写命令。

假设,上图中的内存空间地址段分配如下
地址0~7FFFH的32KB空间为主随机存储器的地址空间 ;
地址8000H~9FFFH的8KB空间为显存地址空间 ;
地址A000H~FFFFH的24KB空间为各个ROM的地址空间
内存地址空间
最终运行程序的是CPU 我们用汇编编程的时候,必须要从CPU角度考虑问题。
寄存器(CPU工作原理)
概述
一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。区别:内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。
2.1通用寄存器
16位数据在寄存器中的存放情况
数据:20000
二进制表示 :0100111000100000
在寄存器AX中的存储 :

2.2字在寄存器中的存储
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。
2.3几条汇编指令
(汇编指令不区分大小写)
| 汇编指令 | 控制CPU完成的操作 | 用高级语言的描述 |
| mov ax,18 | 将18送入AX | AX = 18 |
| mov ah,78 | 将78送入AH | AH=78 |
| add ax,8 | 将寄存器AX中的数值加8 | AH=AX+8 |
| mov ax,bx | 将寄存器BX中的数据送入寄存器AX | AX = BX |
| add ax,bx | 将ax,bx中的内容相加,结果存在AX中 | AX=AX+BX |
例题:

答案:1044CH 但是因为只能存放4位 所以是 044CH
相关文章:
汇编语言基础
引言 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…...
格式工厂怎么把两个视频合并在一起
免费的工具谁不喜欢呢,今天为大家介绍的是格式工厂这款多功能视频转换软件,然而今天主要为大家介绍的是格式工厂的视频合并功能。 是的,你没有听错,格式工厂除了转换之外,还可以视频合适、视频剪辑、视频分割、去水印…...
2.MySQL表的操作
个人主页:Lei宝啊 愿所有美好如期而遇 表的操作 (1)表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 存储引擎的不同会导致创建表的文件不同。 换个引擎。 t…...
网络安全之应急流程
近期需要弄一个网络安全应急的流程,其实对于网络安全应急并不陌生,只是在一些特定的环境上会遇到一些难以解决的问题或者缺少某个岗位的技术人员,因为不同运营商的应急小队也是不同的岗位,如今有着安全设备的告警和预警࿰…...
[Python进阶] 操纵鼠标:pyuserinput
6.2 操纵鼠标:pyuserinput 6.2.1 说明 在安装pyuserinput库时会自动安装PyMouse和PyKeyboard库。前者主要用来操作鼠标,包括鼠标的点击、移动等。后者主要用来操作键盘,包括键盘按键的按下、弹起等。 这两个库还可以同时对鼠标和键盘的事件…...
【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置
主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法:算法专栏 C头…...
与HTTP相关的各种协议
TCP/IP TCP/IP协议是目前网络世界“事实上”的标准通信协议,实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP和IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。 这个协议栈有四层&#x…...
常见的网络攻击手段
网络攻击对个人、组织和整个社会都带来了严重的威胁,因此必须采取有效的安全措施来保护网络系统和用户的信息安全。网站是攻击者经常瞄准的目标,以下是一些常见的攻击方式: 1. DDoS攻击(分布式拒绝服务攻击)࿱…...
学习笔记---超基础+详细+新手的顺序表~~
目录 1.顺序表的前言 1.1 顺序表--->通讯录📇 1.2 数据结构的相关概念🏇 1.2.1 什么是数据结构 1.2.1 为什么需要数据结构 2. 顺序表概念及分类 2.1 顺序表的概念🐙 2.2 顺序表的分类🐫 2.2.1 顺序表和数组的区别 2.…...
Java高级-CompletableFuture并发编程利器
CompletableFuture核心Api 1.概述2.Async2.a) supplyAsync2.b) runAsync 3.Then3.a) thenApply()3.b) thenApplyAsync() 1.概述 Future可以在并发编程中异步获取结果 CompletableFuture实现了Future接口,肯定也会有Future的功能,也相当于是Future的一个…...
python、java、c++哪一个前景比较好?
Python是一种广泛使用的高级编程语言,适用于数据分析、人工智能、机器学习等领域。Java是一种通用的编程语言,适用于企业级应用开发、网站开发、软件开发、嵌入式领域等。C是一种系统编程语言,适用于嵌入式开发、游戏开发、音视频、服务端开发…...
【排序算法】详解直接插入排序和希尔排序原理及其性能分析
文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法, 基本思想…...
JDK1.8对HashMap的优化、以及通过源码解析1,8扩容机制
JDK 1.8 对 HashMap 进行了一些优化,主要包括以下几个方面的改进: 红黑树:在 JDK 1.8 中,当哈希碰撞(多个键映射到同一个桶)达到一定程度时,HashMap 会将链表转化为红黑树,以提高查找…...
Linux串口断帧处理
报文格式 1 Byte 4 Byte N Byte 4 Byte 1 Byte 0x02 报文长度 报文 CRC16 0x03 1. 每条报文以 STX(0x02)起始符开始,以 ETX(0x03)终止符结束。 2. 报文正文长度采用 4 字节的 10 进制字符串标识,如报文正…...
springboot集成kafka
1、引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.6</version></dependency> 2、配置 server:port: 9099 spring:kafka:bootstrap-servers: 192.1…...
近期总结2023.10.16
规律 1.两数相减,相加的最大,最小值 2.由最初的状态递推 3.无强制顺序,排序,不能排序,则与顺序有关 4.对于一段等差数列,不用一段一段的算局部整体,可以从整体一步步加差值 5.需要从一段式子推到结果困难&…...
【EI会议征稿】第二届可再生能源与电气科技国际学术会议(ICREET 2023)
第二届可再生能源与电气科技国际学术会议(ICREET 2023) 2023 2nd International Conference on Renewable Energy and Electrical Technology 2020年中国可再生能源发电规模显著扩大,风力和太阳能发电均呈迅速增长趋势。中国大力推进能源低碳化,减少温…...
让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架
ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力,加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务,无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如,在玩游戏时,人类可以利用…...
Jmeter脚本参数化和正则匹配
我们在做接口测试过程中,往往会遇到以下几种情况 每次发送请求,都需要更改参数值为未使用的参数值,比如手机号注册、动态时间等 上一个接口的请求体参数用于下一个接口的请求体参数 上一个接口的响应体参数用于下一个接口的请求体参数&#…...
vue 请求代理 proxy
目录 为什么需要配置代理 什么是同源策略 如何配置代理 请求代理的原理 举例说明 为什么需要配置代理 因为浏览器的同源策略,当向和本地 devServer 服务器不同源的地址发送请求, 会违反浏览器的同源策略,导致发送失败,所以需…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
