汇编(二) 内存地址空间、寄存器、物理地址以及物理地址的计算-阿里云开发者社区

开发者社区> 巴黎香榭> 正文

汇编(二) 内存地址空间、寄存器、物理地址以及物理地址的计算

简介: 汇编、内存地址空间、寄存器、物理地址、物理地址的计算、汇编指令
+关注继续查看

内存地址空间:

    一个CPU的地址线宽度为10,那么可以寻址1024个内存单位,这1024

    个可寻到的内存单元构成这个CPU的内存地址空间

    最终运行程序的是CPU,用汇编编程的时候。必须要从CPU角度考虑问题

    对于CPU来讲,系统中的所有存储器中的存储单元都是处于一个统一的逻辑存储器中,他的容量

    受CPU寻址能力的限制,这个逻辑存储器就是我们所说的地址空间

7f5514c4fe1b7121efa7c49605eb3030c76af715


主板:

    每一台pc机中都有一个主板,主板上有核心器件和一些主要器件

    这些器件通过三类总线相连接

236d1980e2eaaf47e0781ea74a26e9d056f5633f


接口卡:

    计算机系统中 所有可用程序控制其工作的设备,必须受到CPU的控制

存储器芯片:

    随机存储器(RAM)和只读存储器(ROM)

    从功能分类和链接上分类:

        随机存储器RAM

        装有BIOS的ROM

        接口卡上的RAM


16个基本寄存器:

  EAX  ABX  ECX  EDX 为通用寄存器

  EBP:栈区基地址寄存器;

  ESP:栈顶寄存器;

  ESI :源寄存器;

  EDI:目的寄存器;

  CS:代码段寄存器;

  DS:数据段寄存器;

  ES:扩展数据段寄存器;

  SS:栈段寄存器;

  FS:扩展数据段计算器;

  GS:扩展数据段计算器;

  EFLAGS:标志寄存器;


通用存储器:

    一个16位的寄存器可以存储一个16位的数据,最大值为2的16次方-1

    寄存器AX分为 AL、AH

    0位~7位构成了AL低位寄存器, 8位~15位构成了AH高位寄存器

    AH和AL寄存器可以独立使用

字在寄存器中的存储:

    一个字可以存在一个16位寄存器中,这个字的高位和低位字节自然就存在这个寄存器的高8位和低8位

    一个字为2b、2个字节、16位


023af75115de55d45f298cde4dc3c41221a7e86b


数制:

    由于一个内存单元可以存放8位数据,CPU中的寄存器又可以存放n个8位数据

    也就是说 计算机中的数据大多数是由1~n个8位数据构成的


    用十六进制来表示数据可以直观的看出这个数据是由哪些8位数据构成的,

    二进制每4位对应一个十六进制, 每3位对应一个8进制


汇编指令(不区分大小写):

    mov ax, 18   将8送入AX   AX = 18

    mov ah, 78   将78送入AH  AH = 78

    add ax, 8    将寄存器AX中的数值加上8         AX = AX+8

    mov ax, bx   将寄存器BX中的数据送入寄存器AX   AX = BX

    add ax, bx   将AX,BX中的内容相加 结果给AX   AX = AX+BX


检测点(以下数字均为十六进制):

    mov ax, 62627     AX = 2627  # 溢出取后4位

    mov ah, 31        AX = 5727

    mov al, 23        AX = 574a  # al低寄存器 高位忽略 计算低位 溢出同样后两位

    add ax, ax        AX = ae94

    mov bx, 826c      BX = 826c

    mov cx, ax        CX = ae94

    mov ax, bx        AX = 826c

    add ax, bx        AX = 3100

    mov al, bh        AX = 3182

    mov ah, bl        AX = 6c82

    add ah, ah        AX = ce82  # ah高寄存器 低位忽略 计算高位 溢出同样取后两位


物理地址:

    CPU访问内存单元时要给出内存单元的地址,所有的内存单元构成的存储空间

    是一个一维的线性空间。我们将这个一维的地址称为物理地址


16位结构的CPU:

    16位结构描述了一个CPU具有哪几方面特征:

        1.运算器一次最多可以处理16位的数据

        2.寄存器的最大宽度为16位

        3.寄存器和运算器之间的通路是16位的


8086CPU读写内存时,发生了这么一些事:

    1.CPU中的相关部件提供两个16位的地址,一个称为段地址,一个为偏移地址

    2.段地址和偏移地址通过内部总线送入一个称为地址加法器的部件

    3.地址加法器将两个16位地址合并成一个20位的地址


881a5bd9ed087d55404c8105ddb2cbe5762b2200


地址加法器的工作原理:

    地址加法器合成物理地址的方法:

        物理地址=段地址*16+偏移地址

        注:此处为20位物理地址

    段地址*16  二进制向左移4位、16进制左移1位

    1.一个数据的二进制形式左移1位,相当于*2,16进制*16、10进制*10、x进制*x

    2.一个数据的二进制形式左移n为,相当于该数据*2的n次方

    

7fc2114fb66100bda8a5aa019ee2318d133984b9

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
js中ip地址与整数的相互转换
转载地址 //IP转成整型function _ip2int(ip) {    var num = 0;    ip = ip.split(".");    num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Num...
714 0
面试官,Java8 JVM内存结构变了,永久代到元空间
面试官,Java8 JVM内存结构变了,永久代到元空间
15 0
linux内存管理--用户空间和内核空间
关于虚拟内存有三点需要注意: 4G的进程地址空间被人为的分为两个部分--用户空间与内核空间。用户空间从0到3G(0xc0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。
681 0
linux内存管理---物理地址、线性地址、虚拟地址、逻辑地址之间的转换
linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一) 这篇文章中介绍了四个名词的概念,下面针对四个地址的转换进行分析 CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步(如下图): 首先,将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址, 其次,再利用其页式内存管理单元,转换为最终物理地址。
909 0
阿里云服务器AMD二代计算型c7a/通用型g7a/内存型r7a详解
今年阿里云又发布了第二代AMD云服务器。包含计算型c7a/通用型g7a/内存型r7a等实例云服务器,那么阿里云服务器AMD二代有什么优势和特性,主要适用与哪些场景呢?
171 0
C语言精要总结-内存地址对齐与struct大小判断篇
在笔试时,经常会遇到结构体大小的问题,实际就是在考内存地址对齐。在实际开发中,如果一个结构体会在内存中高频地分配创建,那么掌握内存地址对齐规则,通过简单地自定义对齐方式,或者调整结构体成员的顺序,可以有效地减少内存使用。
1052 0
项目中的五级地址联动效果(js)
我刚开始是的时候是是写了一个sql语句,但是写了5个函数,来联动地址的。后来请教了前端的师傅,用js来写了一个地址联动的。 我使用的是easyui的框架! 地址联动部分html代码! 省 : 市 : 区/县: 街道: 社区: 因为我的是在添加了一条数据之后,要刷新整个页面。
555 0
+关注
巴黎香榭
一个有梦想的咸鱼~~~
106
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载