汇编寄存器认识

news2024/11/27 11:38:06

1.8086CPU的16个寄存器:

8086CPU所有寄存器都16位:

通用寄存器: 存放一般性数据: 包括 数据寄存器 , 指针寄存器, 索引寄存器

(AX,BX,CX,DX,BP,SP,SI,DI)

数据寄存器: AX,BX,CX,DX

AX:  AX(Accumulator Register) :累加寄存器,主要用于输入/输出和大规模的指令运算。常用于四则运算,函数返回值等

1514131211109876543210

                16位寄存器存储数据最大值为2^16-1   65536-1 = 65535

                AX  = AH + AL

               AH:为高8位 

                       8位寄存器的最大存储数据量为 2^8-1 = 256-1 = 255

15141312111098

              AL:为低8位

                 

76543210

        AX与AH及AL的关系:

         

 进制转换:

2000 ==> 0100 1110  0010 0000       =====>十进制转换二进制

        ===>4       E         2        0          =====>二进制转换十六进制

        AH:高8位存 4E ,    AL:低8位存 20

BX:  BX(Base Register):基址寄存器,常用于在相对寻址(基址+偏移)中存储基址(基础访问地址)。也常用于四则运算。

        BX=BH+BL

CX: CX(Count Register):计数寄存器,CX 寄存器在迭代的操作中会循环计数

        CX=CH+CL

DX:  DX(Data Register):数据寄存器,也用于输入/输出操作。还与AX寄存器一起使用,用于涉及大数值的乘法和除法运算

        DX=DH+DL

索引(变址)寄存器: SI,DI

SI:      SI(Source Index):源索引寄存器。变址寄存器。常用于在变址寻址(基址+变址)中存储变址,也常用来拷贝源字符串。

DI:       DI(Destination Index):目的索引寄存器。目标变址寄存器。常用于在变址寻址(基址+变址)中存储变址。也常用来复制到目标字符串

  • x32构架下指针寄存器名称为ESI,EDI。低位地址分别对应SI和DI。
  • x64构架下指针寄存器名称为RSI,RDI。低位地址分别对应ESI和EDI。

指针寄存器: SP,BP

SP: SP(Stack Pointer):栈指针,栈顶指针,只能访问栈顶

BP: BP(Base Pointer):基础指针,栈寄存器上的偏移量,用来定位栈上变量。用它可直接存取堆栈中的数

指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

  • x32构架下指针寄存器名称为ESP,EBP。是32位通用寄存器。低位可以用SP,BP访问。
  • x64构架下指针寄存器名称为RSP,RBP。是64位通用寄存器。低位可以用ESP,EBP访问

SI和DI功能和BX相同,可以用于间接寻址。主要用于存放存储单元在段内的偏移量。但是SI、DI不可分割成8位寄存器

控制寄存器:IP, FLAG

IP:  指令指针寄存器

     32位寄存器EIP低16位相当于IP

313029......210

       

P(Instruction Pointer):指令指针。是存放下次将要执行的指令在代码段的偏移量。即CS:IP执行下一条要执行的命令。

        32位CPU把指令指针扩展到32位,并记作EIP。EIP的低16位与IP作用相同

        64位CPU把指令指针扩展到64位,并记作RIP。RIP的低16位与EIP作用相同

FLAG: 标志寄存器

段寄存器: CS,SS,DS,ES

16为构架中,16位的指针只能访问64k的内存,为了访问更多的内存,使用段寄存器和指针配合访问内存地址。(x32,x64都采用段寄存器+指针地址方式访问内存

CS: CS(Code Segment):代码段寄存器。CS:IP表示要执行代码的内存地址

SS:  SS(Stack Segment):栈段寄存器。SS:SP是栈顶内存地址。

DS:  DS(Data Segment):数据段寄存器。DS:偏移量是数据的内存地址。

ES: ES(Extra Segment):扩展段寄存器。扩展的数据段寄存器。

计算机启动后会自动找到地址CS:IP地址的指令代码运行,运行后IP自动偏移下一个指令。
数据地址默认段寄存器为DS。栈默认段寄存器为SS。

x32和x64构架段寄存器名称未变,但是扩展了两个寄存器。

  • FS(Extra Segment):数据段寄存器。扩展的数据段寄存器。
  • GS(Extra Segment):数据段寄存器。扩展的数据段寄存

 

PSW:

2.x32构架

x32架构中,通用寄存器都在16位版本的基础上扩展成为32位版本,名字加了E作为前缀。

  • EAX(低位为AX):通用寄存器
  • EBX(低位为BX):通用寄存器
  • ECX(低位为CX):通用寄存器
  • EDX(低位为DX):通用寄存器

为了兼容16位模式程序,访问AX,BX,CX,DX相当于访问32位寄存器的低16位,32位寄存器的高16位不可单独访问

3.x64构架

在x64架构中,通用寄存器都扩展成为64位版本,名字也进行了升级。

  • RAX, RBX, RCX, RDX
  • R8-R15:x64架构引入的8个新的通用寄存器

为了兼容32位模式程序,使用上面的名字仍然是可以访问的,相当于访问64位寄存器的低32位。高位32位模式不可访问 

4.寄存器寻址:

              1.指令寻址:

              CPU执行的指令只有一种寻址方式,即16位上地址为 CS:IP

                                   x32上地址为  CS:EIP

                                   x64上地址为  CS:RIP

                2.数据寻址:

                 也就是指令的操作数有七种寻址方式:

                  

  •         立即寻址:立即数  (如:mov ax,80h)   ,这个80h叫立即数,直接加载到内存中
    • 寄存器寻址:寄存器中的数 (如: mov ax,bx)  这个直接传入bx寄存器名
    • 内存寻址(根据段地址和给定地址找到数据)
      • 直接寻址:直接指定地址 (如:mov ax,[123H] 直接访问默认段寄存器DS,也可ES:[123H]来访问扩展段寄存器)
      • 间接寻址:寄存器中指定地址 (如:mov ax,[di] 直接传入变址寄存器)
      • 相对寻址:寄存器中地址+偏移量(如: mov bx,[si+100h],传入si变址寄存器与100h偏移量)
      • 变址寻址:寄存器中地址+变址寄存器中地址(如: mov bx,[bx+si] 传入基址与变址)
      • 相对变址寻址:寄存器中地址+变址寄存器中地址+偏移量(如: mov ax,[bx+si+100h] 传入基址+变址及偏移量)

                 

  • 基址寄存器为BX,缺省的段寄存器为DS。
  • 基址寄存器为BP,缺省的段寄存器为SS。

5.汇编指令简单操作:

               

mov AX,18  ;18存入AX寄存器   AX=18  16位寄存器
mov AH,78  ;78存入AH寄存器   AH=78  8位寄存器
add AX,8   ;AX寄存器中的值加上8  AX=AX+8
mov AX,BX  ;BX寄存器的值存入AX寄存器 AX=BX
add AX,BX  ;AX寄存器中的值加上BX寄存器中的值,保存在AX寄存中  AX=AX+BX

 

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

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

相关文章

【JavaSE】Java基础语法(十七)

文章目录 1. final2. 代码块2.1 代码块概述2.2 代码块分类 1. final fianl关键字的作用 final代表最终的意思,可以修饰成员方法,成员变量,类 final修饰类、方法、变量的效果 fianl修饰类:该类不能被继承(不能有子类&a…

【EHub_tx1_A200】Ubuntu18.04 + ROS-Melodic/ROS2-Elequent + 速腾 RS-Helios_16P雷达 评测

大家好,我是虎哥,之前使用了很多单线激光雷达,这几年,3D激光雷达国产化后,逐步已经降价很多,3D激光雷达对于大环境导航,无人驾驶辅助导航,都有很多优势。经过逐步的筛选,…

性能测试知多少---性能分析与调优的原理

最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP )&…

JavaEE——自主实现计时器

文章目录 一、认识定时器二、自主实现定时器1.明确定时器的内核原理2.定时器框架搭建3.优先级队列中的比较问题4.“忙等”问题5. 代码中随机调度的问题 三、整体代码罗列 一、认识定时器 什么是定时器 定时器是我们在日常的软件开发中很重要的一个组件。类似于闹钟&#xff0c…

毫米波雷达数据采集

目录 1.数据采集方式2.分析数据格式3. 解读原始数据4.Bin文件格式 1.数据采集方式 数据采集有两种方式: 方式一:使用SDK中包含的Capture Demo: how to save raw data from the Capture Demo using Code Composer Studio(CCS) 在CCS中通过…

Python自动化测试框架有哪些?怎么选

目录 自动化测试框架概念 自动化测试框架根据思想理念和深度不同,渐进式的分为以下几种: 模块化测试脚本框架: 测试库框架: 数据驱动测试框架: 关键字驱动或表驱动的测试框架: 混合测试自动化框架&am…

软考A计划-软件设计师笔记

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

2023自动部署神器——Jenkins全网最全攻略

​ 大纲 ​ 1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口&#xff…

从0到1腾讯云服务器使用教程(新手入门)

腾讯云服务器使用教程包括注册账号实名认证、选择云服务器CVM或轻量应用服务器CPU内存带宽和系统盘配置、安全设置和云服务器远程连接、安全组端口开通教程、云服务器环境部署以搭建网站为例手把手网站上线,云服务器文件传输和数据备份以及技术支持等详细说明&#…

Maven学习笔记(上)22版

1. 概述部分 1. 什么是 Maven? 为什么要学习Maven? 管理规模庞大的 jar 包,需要专门工具。脱离 IDE 环境执行构建操作,需要专门工具。 1、构建 Java 项目开发过程中,构建指的是使用『原材料生产产品』的过程。 原…

Linux高级---ingress

文章目录 一、ingress介绍二、ingress的工作原理三、ingress的使用1、搭建ingress环境2、准备service和pod3、创建http代理4、创建https代理 一、ingress介绍 在前面课程中已经提到,Service对集群之外暴露服务的主要方式有两种:NotePort和LoadBalancer&a…

【Linux】下的权限管理/关于root用户和普通用户的区别/不同用户的访问权限有什么不同?/到底什么是粘滞位?

本文思维导图: 文章目录 前言1.Linux下用户的分类sudo指令1.1文件访问者的分类(人) 2.文件类型和访问权限(事物属性)2.1Linux下的文件类型2.2 文件的权限属性(角色/身份)chmod指令和chown指令/…

燕千云ChatGPT应用,用过的都说香

本期受访人物:张礼军 甄知科技联合创始人,CTO 首席产品官 2022年底,基于人工智能技术驱动的自然语言工具横空出世,一经推出,ChatGPT迅速火遍全球,几乎各行各业都在探索ChatGPT具体业务场景的应用&#xf…

(万字长文)Linux——IO之重定向+缓冲区 +重定向 +缓冲区原理实现 +带重定向的简易版shell+标准输出标准错误

索引 文件描述符分配规则重定向 缓冲区1.什么是缓冲区2.缓冲区在哪里 重定向源码模拟实现缓冲区原理带重定向的简易版Xshell标准输入和标准错误 文件描述符分配规则 文件描述符的分配规则 从头遍历数组fd_array[],找到一个最小的,没有被使用的下标,分配…

yii Yii Framework PHP 框架

基于组件、开发大型 Web 应用的PHP 框架 Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。 中文名 …

Linux LAMP(Linux Apache MySQL PHP)搭建 Discuz! 网络论坛

LAMP架构 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP(或P…

samba-3.3.16 在海思平台(SS528)交叉编译及问题解决

目录 <center>一、概述<center>二、编译步骤&#x1f449;2.1 解压缩&#xff0c;进入源码目录&#x1f449;2.2 配置&#x1f449;2.3 问题一&#x1f449;2.4 问题二&#x1f449;2.5 问题三 一、概述 远程开关机功能需要用到samba里面的一个工具net&#xff0c;…

APP UI自动化测试框架总结,各种项目实战加源码等你来拿

目录 开发语言选择 UI测试框架选择 单元测试框架选择 测试环境搭建 脚本编写 Jenkins集成 开发语言选择 通常用于自动化测试的编程语言有&#xff1a;Python、Java、Javascript、Ruby、C#、PHP等。一般我们会选择自己熟悉的编程语言来编写自动化脚本&#xff0c;但对于编…

spark安装

安装 su - root https://repo.anaconda.com/archive/ Anaconda3-2021.05-Linux-x86_64.sh sh ./Anaconda3-2021.05-Linux-x86_64.sh yes enter exit() exit() 重新登录 su - root 配置成功 (base) [rootnode1 ~]# python Python 3.8.8 (default, Apr 13 2021, 19:58:26) [GC…

SpringBoot集成slf4j日志和logback.xml配置详解

SpringBoot集成slf4j日志和logback.xml配置详解 一、Slf4j概述二、使用Slf4j打印日志1.代码方式使用Slf4j2.lombok使用注解引入Slf4j 三、项目如何配置logback.xml1. applicaiton.yml配置2. 日志级别及优先级3. logback.xml日志配置文件4. logback.xml日志配置的实现效果 四、l…