Linux操作系统汇编语言基础知识(图文代码)

1、什么是汇编语言,它在计算机语言中的地位?

汇编语言是程序设计语言的基础语言,是唯一可以直接与计算机硬件打交道的语言

2、汇编语言与源程序、汇编程序、汇编的关系?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、汇编语言的特点

  • \1) 汇编语言与机器指令一一对应,可充分理解计算机的操作过程汇编语言指令是机器指令的符号表示
  • \2) 汇编语言是靠近机器的语言编程时要求熟悉机器硬件系统,可充分利用机器硬件中的全部功能,发挥机器的特点在计算机系统中,某些功能由汇编语言程序实现:实时过程控制系统、系统初始化、实际的输入输出设备操作
  • \3) 汇编语言程序的效率高于高级语言效率,指的是用汇编语言编写的源程序在汇编后所得的目标程序效率高时间域的高效率:运行速度快;空间域的高效率:目标代码占用存储空间少

4、汇编语言与高级语言的比较

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5、进制转换

(略)

6、数据组织单位

\1) 位(bit)
是计算机中表示信息的最小单位,符号b,是一个二进制位,每一位用0或1表示
\2) 字节(Byte)
8位二进制数为一个字节
\3) 字(Word)
若干个字节为一个字,一般一个字包含两个字节
范围0000H~FFFFH
\4) 双字(Double Word)
两个字节为一个字,四个字节为连个字,称为双字
范围00000000H~FFFFFFFFH
\5) 字长
机器字的长度为字长,即计算机中每个字所包含的位数,由机器数据总线数决定
例如,数据总线数为64位,机器字长为64位,即每个字有8个字节
\6) 数据字与指令字
数据字:在存储单元中存储的是数据
指令字:在存储单元中存储的是指令
无论是数据字还是指令字,在存储单元中都是以二进制的形式存放的

7、BCD码

两种存储方式:组合型(1个字节表示2个BCD码);非组合型(1个字节表示1个BCD码)

8、80X86计算机组织结构

微型计算机的硬件系统主要由3个主要部分组成:

  • 1)中央处理器CPU(运算器、控制器、寄存器)
  • 2)输入输出设备
  • 3)存储器

9、80X86 CPU的寄存器

寄存器分为3类:

  • 1)通用寄存器
  • 2)控制寄存器
  • 3)段寄存器

8个8位通用寄存器:AL,AH,BL,BH,CL,CH,DL,DH

8个16位通用寄存器:AX,BX,CX,DX,SI,DI,BP,SP

8个32位通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说明:1)指针寄存器(SP,ESP,BP,EBP)
SP,ESP为堆栈指针寄存器,存放当前堆栈段栈顶的偏移地址,
是根据指令自动移动的,要想随机读取

堆栈段中的数据,必须通过BP或EBP基址指针寄存器来读取。
2)控制寄存器(IP,EIP,FLAGS,EFLAGS)
IP,EIP为指令指针寄存器,用于存放当前正在执行的指令的
下一条指令的偏移地址,该寄存器所指的为代码段的偏移地址。
FLAGS为标识寄存器,表示程序运行时的状态和一些特殊控制

3)段寄存器

代码和数据是分开存放,代码存放在代码段,数据存放在数据段

10、内存组织结构

1)内存的地址
在存储器中内存单元的基本单位是字节,每个字节都有一个唯一的地址

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2)存储单元的内容

一个存储单元存放的信息为存储单元的内容

  1. 分为:字节单元、字节单元、双字单元
  2. 双字:需要两个16位寄存器,通常为DX:AX,DX高位,AX低位

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3)堆栈
堆栈是内存中一块特定的区域,其中数据按照*先进后出*原则
作用:暂存数据、子程序调用与返回、调用中断处理程序、从中断处理程序返回
位置:堆栈段地址存放于SS寄存器中,偏移地址存放在堆栈指针寄存器(SP(16)/ESP(32)),
他们永远指向栈顶初始化:堆栈的初始化时通过设置SS及SP/ESP值来完成的,可以由编译系统自动完成,也可以在程序
中通过伪指令显示地定义

11、实模式

1)介绍只有8086/8088工作在实模式下;80286以上的微处理器工作在实模式和保护模式下;在实模式下微处理器只能寻址1MB的存储空间;80286以上系统的微处理器在加点或复位时都以实模式方式开始工作2)内存地址的分段*为什么要分段?*8086/8088地址总线为20根,可访问的地址为:2^20=1048576=1M8086/8088内部寄存器都是16位的,可以直接处理16位长度的存储地址,16位地址的寻址2^16=64K为了把寻址范围扩大到1MB,实模式存储器地址均采用存储空间的分段技术来解决寻址1MB的存储空间提出了段地址和偏移地址合成20位物理地址的概念*分段方法?*16位段地址+16位段内地址--->20位物理地址地址的组合:物理地址=段地址*16D(10H)+偏移地址,(段地址*16D--二进制段地址左移4位)存放段地址:16位段地址寄存器(CS、DS、SS、ES)存放偏移地址:16位指针寄存器(IP、SP)在1MB存储器中可以有64K个段,每个段最多64KB,最小为16KB*物理地址、段地址、段内地址、逻辑地址的区别?*物理地址:与内存单元一一对应的20位二进制数,1MB=00000H~FFFFFH每个物理地址代表一个唯一的内存单元段地址:将1MB的内存空间分为长64KB的程序区和数据区称为段每个段用116位二进制地址表示段地址存放在段寄存器中代码段:用于存放源程序的二进制程序代码,该段的段地址放在CS中数据段:存放操作数据的,该段的段地址放在DS中堆栈段:堆栈用的存储区,该段的段地址放在SS中附加段:该段的段地址放在ES中段内地址:16位二进制段内地址为偏移地址(偏移地址)不同段内的偏移地址存放在不同的寄存器中,段寄存器与装偏移地址的寄存器按一定要求组合

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

逻辑地址:用段地址和偏移地址来表示内存单元的地址为逻辑地址,例如,段地址:偏移地址*逻辑地址与物理地址的换算关系?*物理地址 = 段地址*16D(10H)+偏移地址逻辑地址 = 段地址:偏移地址例子:逻辑地址,1111H:2222H
物理地址,1111H*10H+2222H = 13332H
假设1111H为代码段地址,2222H在指针寄存器IP中,示意图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内存分配方法?

代码段、数据段、堆栈段的大小,是以节为最小单位分配内存区域的16字节=2个字=1节,节的边界地址就是能够被16整除的地址偏移地址(段内地址)是从0000H开始的例子:假设程序分配的内存区从6100H开始,程序长度1020字节,操作数510字节,堆栈段250字节则代码段长度为1024D=400H,数据段长度为512D=200H,堆栈段长度为256D=100H

示意图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

段与段之间的关系?

8088/8086 CPU把1MB的存储空间划分成若干逻辑段每个段的起始地址必须是能够被16整除的数逻辑段的最大长度为64KB 1MB的存储空间最多可以分成64K个逻辑段,当每个逻辑段为16KB时段与段之间可以相邻、分离、重叠、部分重叠

12、保护模式

1)保护模式存储器寻址机制在保护模式下,逻辑地址=选择符+偏移地址与实模式不同,实模式的段寄存器存放段基地址,而保护模式的段寄存器存放选择符保护模式下,通过选择描述符表中的描述符,间接地形成段基地址保护模式的偏移地址最大可以是32位,最大段长可以从16KB扩展到4GB
2)描述符描述符包括,段在寄存器中的位置,段的长度,访问权限由基地址、段界限、访问权限、附加字段组成基地址:指定段的起始地址段界限:存放该段的最大偏移地址访问权限:说明该段在系统中的功能和一些控制信息附加字段:描述该段的一些属性描述符的内容是由系统自动设置的由于段寄存器是16位的,描述符是64位的故将64位的段描述符放按顺序存放形成一个段描述符表,放在内存中而在段寄存器中实际存放的是要选择的段描述符表的序号,类似于数组中的下标

13、存储器管理机制

1)分段管理机制①虚拟存储器:在有限的物理存储器上获取更大的使用空间*虚拟存储器是如何实现存储的?*在程序执行期间的任意时刻,虚拟存储器系统自动吧程序分成许多小块即程序段将某个程序段存放到物理存储器中,其他程序段放在磁盘中当程序要访问到哪个程序段时,就把哪个程序段引导到物理存储器中②分段管理:将4GB的存储空间分成若干独立的受保护的存储空间块每个应用程序可以使用这些存储空间块2)分页管理机制
①线性地址空间:每个进程都有相同大小的4GB线性空间
用分段管理机制实现虚拟地址空间到线性地址空间的映射,实现把二维的
虚拟地址转换为一维的线性地址②分页存储管理:把线性地址空间和物理地址空间分别划分为大小相同的块,每块长为4KB
这样的块称为页,通过分页管理机制实现线性地址空间到物理地址空间的
映射,实现线性地址到物理地址的转换

受保护的存储空间块
每个应用程序可以使用这些存储空间块

2)分页管理机制

①线性地址空间:每个进程都有相同大小的4GB线性空间
用分段管理机制实现虚拟地址空间到线性地址空间的映射,实现把二维的
虚拟地址转换为一维的线性地址

②分页存储管理:把线性地址空间和物理地址空间分别划分为大小相同的块,每块长为4KB
这样的块称为页,通过分页管理机制实现线性地址空间到物理地址空间的
映射,实现线性地址到物理地址的转换

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

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

相关文章

打造高效的Java应用架构:从入门到精通

打造高效的Java应用架构:从入门到精通 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在当今快节奏的软件开发环境中,构建高效的Java应…

第14天:Vue.js应用性能优化与SSR/SSG探索

第14天:Vue.js应用性能优化与SSR/SSG探索 目标 学习优化Vue.js应用性能的方法,并探索服务端渲染(SSR)或静态站点生成(SSG)的可能性。 任务概览 学习Vue.js性能优化技术。探索服务端渲染(SSR…

Redis--注册中心集群 Cluster 集群

准备工作: 首先pull用到的镜像 docker pull redis:6.0.8 端口准备 node01 192.168.248.189.6381-6382 node02 192.168.248.190 6383-6384 node03 192.168.248.191 6385-6386 创建路径: mkdir -p /soft/docker/redis-cluster cd /soft/docker/re…

封装vuetify3中v-time-picker组件,并解决使用时分秒类型只能在修改秒之后v-model才会同步更新的问题

目前时间组件还属于实验室组件&#xff0c;要使用需要单独引入&#xff0c;具体使用方式查看官网 创建公共时间选择器组件 common-time-pickers.vue 子组件页面 <template><div><v-dialog v-model"props.timeItem.isShow" activator"parent&q…

网页里面的3D交互展示是怎么做的呢?

网页里实现3D交互展示已经有非常成熟的软件和平台&#xff0c;使用起来非常便捷高效&#xff0c;也不需要懂编程和开发。具体方法如下&#xff1a; 1、设计3D模型&#xff1a;使用3D建模软件&#xff08;如Blender, 3ds Max, Maya等&#xff09;制作好3D模型&#xff0c;确保模…

Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)

目录 Struts2介绍 漏洞介绍 环境搭建 漏洞探测 执行命令 反弹shell 这一篇还是参考大佬的好文章进行Struts2 S2-061远程命令执行漏洞的学习和练习 Struts2介绍 百度百科 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Ja…

Python3 学习_基础篇:(八)控制语句_ for while 循环

文章目录 学习目标&#xff1a;1.知道什么是循环&#xff1b;2.会用for 和 while 循环编写程序。 学习内容&#xff1a;一、 什么是循环二、while 循环三、 for 循环四、break , continue 关键字和 else 子句 拓展练习 学习目标&#xff1a; 1.知道什么是循环&#xff1b; 2.…

无缝迁移至阿里云RocketMQ:从私有化部署到云端的实用指南

目录 简介迁移步骤 选择合适的客户端版本准备必要的资源重要接口介绍更新POM依赖配置文件调整使用RocketMQTemplate进行消息处理 总结 简介 本指南旨在帮助将已有的开源RocketMQ部署顺利迁移到阿里云RocketMQ。通过逐步的指导和详细示例&#xff0c;你可以轻松实现以下场景&…

高效完成元数据导入(通过表格)

高效完成元数据导入 ​ 提升工作效率系列。别人还在吭哧吭哧干体力活的时候&#xff0c;你要将重复的工作尽量标准化&#xff0c;流程化&#xff0c;自动化&#xff0c;代码化。腾出更多的时间摸鱼&#xff08;提升自己打怪升级&#xff09; ​ 数据治理中&#xff0c;我们经…

昇思25天学习打卡营第1天|MindSpore快速入门

今天是参加华为MindSpore昇思25天学习打卡营的第一天&#xff0c;通过博客记录一下自己的学习路程 初识MindSpore 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 昇思MindSpore总体架构图 通过一套统一的MindSpore开…

Selenium、chromedriver安装配置

Selenium、chromedriver安装配置 一、Selenium简介二、Selenium安装三、ChromeDriver的安装3.1 查看浏览器版本3.2 下载ChromeDriver3.3 环境变量配置一、Selenium简介 Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的点击、下拉等操作。对于一些JS动态渲染…

河南建筑工程乙级设计资质新办对配备的技术人员有什么要求

河南建筑工程乙级设计资质新办对配备的技术人员有什么要求 河南建筑工程乙级设计资质新办时&#xff0c;对配备的技术人员有以下基本要求&#xff1a; 注册人员&#xff1a;需要配备一定数量的注册工程师&#xff0c;具体包括&#xff1a; 一级注册建筑师2名一级注册结构工程师…

OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)

目录 概述 具体实现 1.加载分类器 2.打开摄像头并识别人脸 3.处理人脸并检测是否微笑 效果 总结 概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;广泛应用于图像处理和视频分析等领…

【STM32】GPIO复用和映射

1.什么叫管脚复用 STM32F4有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 STM32F4系列微控制器IO引脚通过一个…

KUBIKOS - Animated Cube Mini BIRDS(卡通立方体鸟类)

软件包中添加了对通用渲染管线 (URP) 的支持! KUBIKOS - 动画立方体迷你鸟是17种不同的可爱低多边形移动友好鸟的集合!每只都有自己的动画集。 完美收藏你的游戏! +17种不同的动物! + 低多边形(400~900个三角形) + 操纵和动画! + 4096x4096 纹理图集 + Mecanim 准备就绪…

Windows kubectl终端日志聚合(wsl+ubuntu+cmder+kubetail)

Windows kubectl终端日志聚合 一、kubectl终端日志聚合二、windows安装ubuntu子系统1. 启用wsl支持2. 安装所选的 Linux 分发版 三、ubuntu安装kubetail四、配置cmder五、使用 一、kubectl终端日志聚合 k8s在实际部署时&#xff0c;一般都会采用多pod方式&#xff0c;这种情况下…

大数据平台之Ambari

Apache Ambari 是一个用于配置、管理和监控 Hadoop 集群的开源工具。Ambari 提供了一个直观的用户界面和一组全面的 API&#xff0c;使得管理大数据集群变得更加容易和高效。以下是对 Ambari 的详细介绍&#xff1a; 1. Ambari 概述 Ambari 的主要目的是简化 Hadoop 集群的安…

开源笔记omnivore框架简单介绍

从 package.json 文件的内容可以看出&#xff0c;这个项目使用了多个工具和框架。以下是对其主要特性和工具的解释&#xff1a; 项目特性和工具 Monorepo 管理 使用了 Lerna 来管理多个包&#xff0c;这些包位于 packages/* 目录下。Lerna 是一个流行的工具&#xff0c;用于管…

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求&#xff1a;通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求&#xff1a;通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服…

Django Aggregation 使用指南

Django Aggregation 使用指南 在构建Django应用时&#xff0c;我们经常需要对数据库中的数据进行汇总或聚合操作。例如&#xff0c;计算某个字段的平均值、最大值或最小值。这篇文章将详细介绍如何在Django中使用聚合查询&#xff0c;并结合实例进行说明。 聚合查询简介 Dja…