16ASM 分段和机器码

8086CPU存储分段管理

问题1:8086是16位cpu,最多可访问(寻址)多大内存?

  • 运算器一次最多处理16位的数据。
  • 地址寄存器的最大宽度为16位。
  • 访问的最大内存为:216 = 64K 即 0000 - FFFF。

问题2:8086允许最大内存1M,如何实现访问(寻址)到所有内存?

  • 8086CPU有20位地址总线,可以传输20位地址,达到1M寻址能力,但8086CPU是16位构造。
  • 8086CPU采用一种在内部使用两个16位地址合成的方式来形成一个20位的物理地址。

在8086cpu中,对存储器的管理是采用分段管理的方式。将内存划分成多段,通过段基址 + 段偏移 方式访问。

8086CPU有20条地址线

  • 最大可寻址控件为2 20 = 1MB
  • 物理地址范围从 00000H ~ FFFFFH

8086CPU 将1MB控件分成许多逻辑段

  • 每个段最大限制为64K
  • 段地址的低4位为0000B

物理地址和逻辑地址

  • 物理地址:对应每个物理储存单元都有唯一的20位地址编号,就是物理地址,从 00000H ~ FFFFFH。
  • 逻辑地址:分段后在用户编程时,采用的逻辑地址,形式为:段基地址:段内偏移地址

注意:

  • 一个物理地址可以由任意个逻辑地址表示。
  • 虽然一个物理地址可以由多个逻辑地址表示,但基于分段原则,一般编程中不会碰到。

逻辑地址解析:

  1. 段地址说明逻辑段在主存中的起始位置。
  2. 8086规定端地址必须是模16的地址。为什么?因为这样处理器就不用多一次不必要的运算。
  3. 偏移地址说明主存单元距离短起始位置的偏移量
  4. 每段不超过64KB,偏移地址也可用16位数据表示。

逻辑地址与物理地址的转换

将逻辑地址中的端地址左移4位,加上偏移地址就得到20位物理地址

一个物理地址可以有多个逻辑地址

内存地址 = 段基址 * 10H(<<4) + 段偏移

逻辑地址1460 : 100、 1380 : F00

物理地址:14700H 、 14700H

例子:

  • 段基址:073F,段偏移:0100    =    内存地址:073F0 + 100 = 074F0;
  • 段基址:063F,段偏移:1200    =    内存地址:063F0 + 1200 = 075F0;
  • 段基址:043F,段偏移:0120    =    内存地址:043F0 + 120 = 04510;

注意

  • 段基址 + 段偏移 的方式一般写作 段地址:段偏移,称为逻辑地址
  • 偏移地址称为 EA。(effective address)
  • 通过逻辑地址计算出来的内存地址称作为物理地址
  • 一个段最大是64K
  • 一个段最小是0,即是不存在
  • 段与段之间重叠1M内存最多可以划分65535个段

  • 段与段之间不重叠1M内存最多可以划分 1M/64k = 16 个段

段划分的原则

  • 段大小可以不是64K。
  • 段与段之间不能有重叠。

注意:

  • 8086不会管分配,dos系统不会管分配,内存分段靠自己。

程序员可用内存,dos系统中编程,应用程序可用内存约600K。

段寄存器

8086中,段基地址都是存储在段寄存器中,段偏移可以用立即数或者通用寄存器指明。

DS

数据段,默认使用DX,SI,  DI

CS

代码段,保存的是代码,绑定CS:IP使用

SS

堆栈段,用作函数栈,绑定SS:SP使用  默认使用BP

ES

扩展段,常用于字符串操作

跨段访问

在DOXBOX的Debuug环境下,

没有段超越的指令实例:

MOV AX,[2000H] ; AX <- DS:[2000H]
从默认的DS数据段取出数据

采用段超越前缀的指令实例:

MOV AX,ES[2000H] ;AX <-- ES:[2000H]
从指定的ES附加段取出数据

使用A,U命令,默认是CS段;使用D,E命令,默认是DS段。

地址加法器

  • 8086有20根地址线,16根数据线,其中数据线与地址线的低16位复用。
  • 内部通过地址加法器计算地址。

访问16位内存,20位地址内存谁更快?

访问16位地址内存块。因为不用经过地址加法器,直接到20根地址总线。

机器码

汇编指令的组成:

  • 指令由操作码和操作数两部分组成。
  • 操作码说明计算机要执行哪种操作,如传送,运算,移位、跳转等操作,它是指令不可缺少的部分。
  • 操作数是指令的参与者,既各种操作的对象
  • 有些指令不需要操作数,通常的指令都是一个或两个操作数,也有个别指令是3个操作数甚至4个操作数。
  • 指令系统设计了很多操作数的来源
  • 寻找操作数的过程就是操作数的寻址
  • 操作数采取哪一种寻址方式,会影响机器运行的速度和效率

机器码的分析

问题:

  1. 内存中存储的是机器码,是一些16进制的数字,计算机是如何知道 多长的十六进制数字是代表一段执行机器码的?
  2. 如何知道机器码有多长?
  3. 如何知道操作数和源操作数的?

操作码 操作数1,操作数2;注释

  • 操作数2,称为源操作数 src,它表示参与指令操作的一个对象
  • 操作数1,称为目的操作数dest,它不仅可以作为指令操作的对象,还可以用来存放指令操作的结果
  • 分号后的内容是对指令的解释

给出如下代码,分析mov

89C3          MOV     BX,AX 1000 1001 1100 0011
89CB          MOV     BX,CX 1000 1001 1100 1011
89D3          MOV     BX,DX 1000 1001 1101 0011
89DB          MOV     BX,BX 1000 1001 1101 1011
89E3          MOV     BX,SP 1000 1001 1110 0011
89EB          MOV     BX,BP 1000 1001 1110 1011
89F3          MOV     BX,SI 1000 1001 1111 0011
89FB          MOV     BX,DI 1000 1001 1111 101189C3          MOV     BX,AX 1000 100 1 11 000 011
89CB          MOV     BX,CX 1000 100 1 11 001 011
89D3          MOV     BX,DX 1000 100 1 11 010 011
89DB          MOV     BX,BX 1000 100 1 11 011 011
89E3          MOV     BX,SP 1000 100 1 11 100 011
89EB          MOV     BX,BP 1000 100 1 11 101 011
89F3          MOV     BX,SI 1000 100 1 11 110 011
89FB          MOV     BX,DI 1000 100 1 11 111 011

如上可以得出结论:

16位寄存器是按位存储的

  • ax - 000、 cx - 001、 dx - 010、 bx - 011、sp - 100、 bp - 101、 si - 110、 di - 111
mov si, di
1000 1001 1111 1110 89fe88C7          MOV     BH,AL 1000 1000 1100 0111
88E7          MOV     BH,AH 1000 1000 1110 0111
88DF          MOV     BH,BL 1000 1000 1101 1111
88FF          MOV     BH,BH 1000 1000 1111 1111
88CF          MOV     BH,CL 1000 1000 1100 1111
88EF          MOV     BH,CH 1000 1000 1110 1111
88D7          MOV     BH,DL 1000 1000 1101 0111
88F7          MOV     BH,DH 1000 1000 1111 011188C7          MOV     BH,AL 1000 100 0 11 000 111
88E7          MOV     BH,AH 1000 100 0 11 100 111
88DF          MOV     BH,BL 1000 100 0 11 011 111
88FF          MOV     BH,BH 1000 100 0 11 111 111
88CF          MOV     BH,CL 1000 100 0 11 001 111
88EF          MOV     BH,CH 1000 100 0 11 101 111
88D7          MOV     BH,DL 1000 100 0 11 010 111
88F7          MOV     BH,DH 1000 100 0 11 110 111

如上可得出结论:

8位寄存期也是按照位来存储的,分别如下:

al - 000、 cl - 001、 dl - 010、 bl - 011、 ah - 100、 ch - 101、 dh - 110、 bh - 111


89FE          MOV     SI,DI 1000 1001
88FE          MOV     DH,BH 1000 100089C3          MOV     BX,AX           1000 10 0 1 11 000 011
89CB          MOV     BX,CX           1000 10 0 1 11 001 011
89D3          MOV     BX,DX           1000 10 0 1 11 010 011
89DB          MOV     BX,BX           1000 10 0 1 11 011 011
89E3          MOV     BX,SP           1000 10 0 1 11 100 011
89EB          MOV     BX,BP           1000 10 0 1 11 101 011
89F3          MOV     BX,SI           1000 10 0 1 11 110 011
89FB          MOV     BX,DI           1000 10 0 1 11 111 011
88C7          MOV     BH,AL           1000 10 0 0 11 000 111
88E7          MOV     BH,AH           1000 10 0 0 11 100 111
88DF          MOV     BH,BL           1000 10 0 0 11 011 111
88FF          MOV     BH,BH           1000 10 0 0 11 111 111
88CF          MOV     BH,CL           1000 10 0 0 11 001 111
88EF          MOV     BH,CH           1000 10 0 0 11 101 111
88D7          MOV     BH,DL           1000 10 0 0 11 010 111
88F7          MOV     BH,DH           1000 10 0 0 11 110 1118B07          MOV     AX,[BX]         1000 10 1 1 00 000 111		1000 10 d w mod rrr rrr/mmm
8B05          MOV     AX,[DI]         1000 10 1 1 00 000 101
8B03          MOV     AX,[BP+DI]      1000 10 1 1 00 000 011
8B00          MOV     AX,[BX+SI]      1000 10 1 1 00 000 000
8B4212        MOV     AX,[BP+SI+12]   1000 10 1 1 01 000 010 disp8
8B825634      MOV     AX,[BP+SI+3456] 1000 10 1 1 10 000 010 disp16
8A825634      MOV     AL,[BP+SI+3456] 1000 10 1 0 10 000 010 disp16
8B817856      MOV     AX,[BX+DI+5678] 1000 10 1 1 10 000 001 disp16
89817856      MOV     [BX+DI+5678],AX 1000 10 0 1 10 000 001 disp16 

如上可得出结论:

前面6位是操作码

d:代表源操作数是寄存器还是内存

  • 0:从寄存器里面取值
  • 1:从内存里面取值

w:目的操作数宽度

oo:模式

  • 11:寄存器到寄存器
  • 10:DISP 16位
  • 01:DISP 8 位
  • 00:内存到寄存器,没有偏移

89FE          MOV     SI,DI 1000 1001
88FE          MOV     DH,BH 1000 100089C3          MOV     BX,AX           1000 10 0 1 11 000 011
89CB          MOV     BX,CX           1000 10 0 1 11 001 011
89D3          MOV     BX,DX           1000 10 0 1 11 010 011
89DB          MOV     BX,BX           1000 10 0 1 11 011 011
89E3          MOV     BX,SP           1000 10 0 1 11 100 011
89EB          MOV     BX,BP           1000 10 0 1 11 101 011
89F3          MOV     BX,SI           1000 10 0 1 11 110 011
89FB          MOV     BX,DI           1000 10 0 1 11 111 011
88C7          MOV     BH,AL           1000 10 0 0 11 000 111
88E7          MOV     BH,AH           1000 10 0 0 11 100 111
88DF          MOV     BH,BL           1000 10 0 0 11 011 111
88FF          MOV     BH,BH           1000 10 0 0 11 111 111
88CF          MOV     BH,CL           1000 10 0 0 11 001 111
88EF          MOV     BH,CH           1000 10 0 0 11 101 111
88D7          MOV     BH,DL           1000 10 0 0 11 010 111
88F7          MOV     BH,DH           1000 10 0 0 11 110 1118B07          MOV     AX,[BX]         1000 10 1 1 00 000 111		1000 10 d w mod rrr rrr/mmm
8B05          MOV     AX,[DI]         1000 10 1 1 00 000 101
8B03          MOV     AX,[BP+DI]      1000 10 1 1 00 000 011
8B00          MOV     AX,[BX+SI]      1000 10 1 1 00 000 000
8B4212        MOV     AX,[BP+SI+12]   1000 10 1 1 01 000 010 disp8
8B825634      MOV     AX,[BP+SI+3456] 1000 10 1 1 10 000 010 disp16
8A825634      MOV     AL,[BP+SI+3456] 1000 10 1 0 10 000 010 disp16
8B817856      MOV     AX,[BX+DI+5678] 1000 10 1 1 10 000 001 disp16
89817856      MOV     [BX+DI+5678],AX 1000 10 0 1 10 000 001 disp16 8E1E1200 mov bx,[0012]	1000 1110 0001 1110 0001 0002 0000 0000
8A1E1200 mov bx,[ds+12]8B078B058B038B008B42128B8256348A8256348B81785689817856*******立即数 到寄存器*********
BB3412  MOV BX,1234  1011 1 0 11 0011 0100 0001 0010	
BB1200  mov bx,12    1011 1 0 11     
BE1200 	mov si,12	 1011 1 111 BB1200			mov bx,12
BB3412			MOV BX,1234
B712  			mov bh,12*******立即数 到 内存*********		   	   1100 011 w oo 000 mmm 立即数
C60712      	mov byte ptr [bx],12		1100 011 0 00 000 111 0001 0010
C60012      	mov byte ptr [BX+SI],12		1100 011 0 00 000 000 0001 0010
C60212      	mov byte ptr [BP+SI],12		1100 011 0 00 000 010 0001 0010C60712C60012C60212
****** 内存 到 段寄存器*****
8E1F			mov ds,[bx]*******寄存器 到 段寄存器*****
8ED8 	mov ds,ax			 				1000 1110 11 011 000 
8CC8	mov ax,cs   						1000 1100 11 001 000

段寄存器编号分析
8EC8	mov cs,ax	1000 1110 11 001 000
8ED8	mov ds,ax	1000 1110 11 011 000
8EC0	mov es,ax	1000 1110 11 000 000
8ED0	mov ss,ax	1000 1110 11 010 000es,cs,ss,ds

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

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

相关文章

WIFI直连(Wi-Fi P2P)

一、概述 Wifi peer-to-peer&#xff08;也称Wifi-Direct&#xff09;是Wifi联盟推出的一项基于原来WIfi技术的可以让设备与设备间直接连接的技术&#xff0c;使用户不需要借助局域网或者AP&#xff08;Access Point&#xff09;就可以进行一对一或一对多通信。这种技术的应用…

计算机毕业设计 SpringBoot的乐乐农产品销售系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Xmanager

什么是 XManager Xmanager 是市场上领先的 PC X 服务器&#xff0c;可将X应用程序的强大功能带入 Windows 环境。 提供了强大的会话管理控制台&#xff0c;易于使用的 X 应用程序启动器&#xff0c;X 服务器配置文件管理工具&#xff0c;SSH 模块和高性能 PC X 服务器。 Xman…

javaScript(六):DOM操作

文章目录 1、DOM介绍2、DOM&#xff1a;获取Element对象3、DOM&#xff1a;事件监听3.1、事件介绍3.2、常见事件3.3、设置事件的两种方式3.4、事件案例 1、DOM介绍 概念 Document Object Model &#xff0c;文档对象模型 将标记语言的各个组成部分封装为对应的对象&#xff1a…

Realme X7 Pro Root 刷机教程

Realme X7 Pro 刷机教程 Just For Fun&#xff0c;最近倒腾了下Realme X7 Pro 刷root。此博客为个人记录刷机过程&#xff0c;如有机友跟随本教程操作&#xff0c;请谨慎操作&#xff01;&#xff01;&#xff01; 以下教程真针对Realme X7 Pro&#xff0c;其他版本方法未知&…

【Flutter】vs2022上开发flutter

在vs上开发flutter&#xff0c;结果扩展仓库上没办法找到Dart&#xff0c;Flutter。 在 这 搜索Dart时也无法找到插件。 最后发现是安装工具出错了 安装了 开发需要的是

从线性回归到神经网络

目录 一、线性回归关键思想 1、线性模型 2、基础优化算法 二、线性回归的从零开始实现 1、生成数据集 2、读取数据集 3、初始化模型参数 4、定义模型 5、定义损失函数 6、定义优化算法 7、训练 三、线性回归的简洁实现 1、生成数据集 2、读取数据集 3、定义模型…

论文代码阅读:TGN模型训练阶段代码理解

文章目录 [toc] TGN模型训练阶段代码理解论文信息代码过程手绘代码训练过程compute_temporal_embeddingsupdate_memoryget_raw_messagesget_updated_memoryself.message_aggregator.aggregateself.memory_updater.get_updated_memoryMemoryget_embedding_moduleGraphAttentionE…

【AIGC】Midjourney高级进阶版

Midjourney 真是越玩越上头&#xff0c;真是给它的想象力跪了~ 研究了官方API&#xff0c;出一个进阶版教程 命令 旨在介绍Midjourney在Discord频道中的文本框中支持的指令。 1&#xff09;shorten 简化Prompt 该指令可以将输入的Prompt为模型可以理解的语言。模型理解语言…

【Linux】如何对文本文件进行有条件地划分?——cut命令

cut 命令可以根据一个指定的标记&#xff08;默认是 tab&#xff09;来为文本划分列&#xff0c;然后将此列显示。 例如想要显示 passwd 文件的第一列可以使用以下命令&#xff1a;cut –f 1 –d : /etc/passwd cut&#xff1a;用于从文件的每一行中提取部分内容的命令。-f 1&…

Sql server数据库数据查询

请查询学生信息表的所有记录。 答&#xff1a;查询所需的代码如下&#xff1a; USE 学生管理数据库 GO SELECT * FROM 学生信息表 执行结果如下&#xff1a; 查询学生的学号、姓名和性别。 答&#xff1a;查询所需的代码如下&#xff1a; USE 学生管理数据库 GO SELE…

为什么需要 Kubernetes,它能做什么?

传统部署时代&#xff1a; 早期&#xff0c;各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用&#xff0c;因此会导致资源分配问题。 例如&#xff0c;如果在同一台物理服务器上运行多个应用程序&#xff0c; 则可能会出现一个应用程…

【QED】高昂的猫 Ⅰ

目录 题目背景题目描述输入格式输出格式 测试样例样例说明数据范围 思路核心代码 题目背景 这是小橘。因为它总是看起来很高傲&#xff0c;所以人送外号“高昂的猫”。 题目描述 "锕狗"的房间里放着 n n n ( 1 ≤ n ≤ 1 0 9 ) (1 \leq n \leq 10^9) (1≤n≤109)个…

C# 使用CancellationTokenSource 取消Task执行

写在前面 在Task创建并执行后&#xff0c;如果状态发生了变化&#xff0c;需要取消正在执行中的Task&#xff0c;除了使用主线程上的共享变量来判断之外&#xff0c;更优雅的方式就是就是用CancellationTokenSource来取消任务的执行。 代码实现 public static void CancelTas…

基于ssm高校实验室管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校实验室信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性…

散列卡片悬停变为整齐列表

效果展示 CSS 知识点 transform 属性运用 页面整体布局 <ul><li><div class"box"><img src"./user1.jpg" /><div class"content"><h4>Hamidah</h4><p>commented on your photo.<br />…

电脑主板支持的cpu型号汇总

一、如何选择不同的主板和对应CPU 1、看针脚&#xff1a;网上有相应的参数&#xff0c;只要CPU能安装到主板中&#xff0c;基本就兼容&#xff0c;这主要取决CPU插槽和主板插槽十分一致。 2、看型号&#xff1a;桌面处理器&#xff0c;只有Intel和AMD两大平台&#xff0c;他们对…

dlib是什么?

dlib C Libraryhttp://dlib.net/ dlib是什么&#xff1f; Dlib is a modern C toolkit containing machine learning algorithms and tools for creating complex software in C to solve real world problems. It is used in both industry and academia in a wide range of…

基于SSM的高校共享单车管理系统的设计与实现论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此高校单车租赁信…

二百一十、Hive——Flume采集的JSON数据文件写入Hive的ODS层表后字段的数据残缺

一、目的 在用Flume把Kafka的数据采集写入Hive的ODS层表的HDFS文件路径后&#xff0c;发现HDFS文件中没问题&#xff0c;但是ODS层表中字段的数据却有问题&#xff0c;字段中的JSON数据不全 二、Hive处理JSON数据方式 &#xff08;一&#xff09;将Flume采集Kafka的JSON数据…