首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在8086中生成物理地址?

在8086中生成物理地址,需要将段寄存器和偏移寄存器的值组合起来。段寄存器和偏移寄存器的组合公式如下:

物理地址 = (段寄存器值 × 16) + 偏移寄存器值

首先,需要将段寄存器的值乘以16,因为8086中的内存单元是16字节大小,每个段的起始地址都是16的倍数。然后,将乘积与偏移寄存器的值相加,得到物理地址。

例如,假设段寄存器的值为0x1234,偏移寄存器的值为0x5678,则物理地址为:

物理地址 = (0x1234 × 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8

在编写程序时,可以使用汇编语言中的LEA指令来计算物理地址。LEA指令可以将段寄存器和偏移寄存器的值组合起来,并将结果存储在目标寄存器中。例如,可以使用以下指令计算物理地址:

LEA BX, DS:SI

其中,DS和SI分别为段寄存器和偏移寄存器,BX为目标寄存器。执行该指令后,BX中存储的就是物理地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

汇编语言访问寄存器和内存篇---02

汇编语言访问寄存器和内存篇---02 CPU的组成 寄存器是CPU内部的信息存储单元 通用寄存器——以AX为例 横看成岭侧峰 “字”在寄存器中的存储 mov和add指令 确定物理地址的方法 物理地址...8086CPU给出物理地址的方法 “段地址×16+偏移地址=物理地址”的本质含义 内存的分段表示法 用分段的方式管理内存 同一段内存,多种分段方案 用不同的段地址和偏移地址形成同一个物理地址 Debug...例:在AX中存储18D 18D — 12H — 10010B 再例:在AX中存储20000D 20000D — 4E20H — 0100111000100000B ---- 横看成岭侧峰...问题:8086如何处理在寻址空间上的这个矛盾?! ---- 8086CPU给出物理地址的方法 8086CPU的解决方法 用两个16位地址(段地址、偏移地址) 合成一个20位的物理地址。...---- 内存的分段表示法 用分段的方式管理内存 8086CPU用“(段地址×16)+偏移地址=物理地址”的方 式给出内存单元的物理地址。 内存并没有分段,段的划分来自于CPU!!!

69110

【汇编】(二)寄存器(CPU工作原理)

8086CPU给出物理地址的方法 8086有20位地址总线,可传送20位地址,寻址能力为1M。 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。...8086CPU 采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址8086CPU读写内存时,发生了这么一些事: CPU 中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址...事实上,内存并没有分段,段的划分来自于 CPU,由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。...小结: CPU 访问内存单元时,必须向内存提供内存单元的物理地址8086CPU 在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。  ...mov 指令,:mov ax,123; mov 指令可以改变 8086CPU 大部分寄存器的值,被称为传送指令。   如何同时修改CS、IP的内容?

43530

ret指令与call指令的深入理解

2、分类 无条件转移指令,jmp 条件转移指令,jz 循环指令,loop 过程 中断 什么是CS和IP? CS是代码段寄存器、IP是指令指针寄存器。...这两个寄存器是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。 CS和IP如何指示CPU读取指令的地址? 8086机器中,任意时刻,CPU将CS:IP指向的内容当作指令执行。...2、地址加法器将物理地址送人输入输出控制电路,输入输出控制电路将物理地址20000H送上地址总线。...由于8086CPU的内存的物理地址=段地址*16+偏移地址,故使得在管理内存的时候借助了分段的概念,将若干个地址连续的内存单元看作一个段。 什么是段地址和偏移地址?...地址加法器通过 物理地址=段地址\*16+偏移地址,合成20位物理地址。 输入输出电路将物理地址送上地址总线。故段地址和偏移地址也即CS内地址数据和IP内地址数据。

4.5K20

第二章 IBM-PC微机的基本功能

每8位组一个字节(BYTE)。 在大多数计算机中,存储器的组织都是以字节为基本单位。每一个基本单位称为一个存储单元。...显示器、打印机等。 有的设备既具有输入功能又具有输出功能。 磁盘、磁带、触摸显示屏等。...二、段寄存器 8086/8088CPU在使用存储器时,将它划分成若干个段。 每个段用来存放不同的内容,程序代码、数据等等。 每个存储段用一个段寄存器来指明该段的起始位置(也叫段基址)。...三、逻辑地址与物理地址及对应关系 1.物理地址 在1MB的存储空间中,每个存储单元的物理地址是唯一的,它就是该存储单元的20位地址。...8086/8088的物理地址范围:00000H~OFFFFFH CPU与存储器之间的任何信息交换都使用物理地址

29720

微机原理与接口技术 重点详解与章节总结——8086微处理器系统结构

8086 CPU中通用寄存器的特殊用途和隐含性质 8086物理地址的形成 8086 CPU可直接寻址lMB的内存空间。...8086还允许部分改变基本段约定,存取数据的基本段为数据段,但可临时改变为代码段、或附加段、或堆栈段,即数据不仅可在数据段,还可在代码段、附加段和堆栈段中。这种情况称为段超越。...物理地址 = 段基址 16 + 偏移地址 存储器的分体结构(奇偶结构) 在8086系统中,CPU有16根数据线,而存储器一个基本单元(字节)有8根数据线,因此通常将存储系统分为偶体存储器和奇体存储器与8086...例如:用两片2K×8b的RAM芯片6116组4K×8b的存储器 字扩展设计如下图所示。...8、在8086CPU 中,物理地址和逻辑地址是指什么?二者之间有何联系?有效地址是如何产生的? 9、8086 CPU 的工作模式有哪些?其中由8086 CPU 构成的最小模式系统的典型配置是什么?

6.4K20

汇编语言_访问寄存器和内存

的数据传入ax add ax,bx ax = ax+bx CPU访问内存单元时要给出内存单元的地址 所有的内存单元构成了一个一维的线性空间 每个内存单元在这个空间中 都有自己唯一的地址 这个地址称为物理地址...8086 CPU有二十位地址总线,所以他的寻址能力位1mb 8086是16位结构以的cpu 运算器一次性最多可以处理16位的数据 寄存器的最大宽度为16位 在8086内部处理的传输暂存的地址也是...16位 寻址能力只有64kb 对于寻址能力和内存传输以及暂存的地址之间的差异 解决办法是可以通过两个16位地址合成一个20位的物理地址物理地址 = 段地址X16+偏移地址 十六进制左移一位相当于二进制左移四位...区分数据和代码在CPU看来 CS:IP指向的内容都是指令 JMP指令 通过修改cs ip内容 来修改CPU要执行的目标指令 我们首先想到的是debug模式下的修改方式 然而这只是一种调试手段 如果用指令修改的话 ...器当中 而是需要一个通用寄存器作为过度 同时需要根据操作数的位数 需要注意的是如果我们 mov ax,[1] 表示获取ds:[0001]的字单位数据 也就是高八位地址和第八位地址 即0002和0001组的十六位地址

21320

汇编语言学习01

汇编语言(8086cpu) 恩,学习一门课程,我觉得应该有一定的条理性,而且自己要勤加思考才能学好,条理性:最好就是先整体的介绍一下全本书,然后再详细的介绍各个章节,而且,书籍的章节安排目录有一定的条理性...如何在内存中确定读取的数据是不是指令?如何确定指令的长度,什么时候指令终止?   在了解这些之前,先明白如何在内存中来确定读取的是不是指令?但是如何来确定要读取的地址呢?   ...8086CPU地址确定:物理地址=段地址*16+偏移地址。(就是说先确定一个参考点,然后确定相对于参考点的坐标)。段地址存放于段寄存器里,偏离地址放在某个地方(不同的信息,放在不同的位置)。...指令:段地址放在数据段CS里,偏移地址放在指令指针寄存器IP里,在内存中的物理地址由CS:IP确定(CS*16+IP)   明白了如何确定指令在内存中的位置后,我们来讨论如何来传输,执行指令?

69090

微机原理与接口技术 重点详解与章节总结——指令系统和汇编程序设计

第四章指令系统和汇编程序设计 8086 CPU的七种寻址方式 8086 CPU寻址方式 •8086中,CS、DS、ES和SS段寄存器在程序运行过程中分别指向当前的代码段、数据段、附加段和堆栈段。...而操作数可能存放在代码段中,也可能存放在数据段、附加段、堆栈段中,还可能存放在8086CPU内部的寄存器中。...**在8086系统中,一般将寻址方式分为两类:一类是寻找操作数的地址;另一类是寻找要执行的下一条指令的地址,即程序寻址。...在程序中直接地址通常用内存变量名来表示,:MOV BX, VARW,其中,VARW是内存字变量。...),则操作数在堆栈段中,((SS)×16)再加上BP中的有效地址形成20位物理地址

89730

Linux 从头学 01:CPU 是如何执行一条指令的?

我们知道,CPU 在访问内存的时候,是通过地址总线来传送物理地址的。 8086 CPU 有 20 位的地址线,可以传送 20 位地址。...图中的这个内存,最大存储单元的地址是 FFFFH,换算十进制就是 65535,因此这个内存的容量是 65536 字节,也就是 64 KB。 这里有一个原子操作的问题可以考虑一下。...8086 CPU 采用: 在内部使用两个 16 位地址合成的方法,来形成一个 20 位的物理地址,如下所示: ? 第一个 16 位的地址称为段地址,第二个 16 位的地址称为偏移地址。...地址加法器采用下面的这个公式,来“合成”得到一个 20 位的物理地址物理地址 = 段地址 x 16 + 偏移地址 例如:我们编写的程序,在加载到内存中之后,放在一个内存空间中。...从以上的描述中可以看出:8086 CPU 似乎是因为寄存器无法直接输出 20 位的物理地址,不得已才使用这样的地址合成方式。

1.1K20

《汇编语言》——笔记(一)

汇编语言发展至今,由以下3类指令组成: 汇编指令:机器码的助记符,有对应的机器码 伪指令:没有对应的机器码,由编译器执行,计算器不执行 其他符号:+、-、*、/ 等,有编译器识别,没有对应的机器码。...mov ax,bx mov ah,al ;不区分大小写,将寄存器BX的数据送入寄存器AX ;注意指令的两个操作对象应当是一致的 物理地址 8086是16为结构的CPU,也就是说,能够一次性处理、传输、暂时存储的信息最大长度为...8086CPU采用一种在内部用两个16位地址合成的方法形成一个20位的物理地址。 80806CPU要读写内存时,提供的两个16位地址被地址加法器合成一个20位的物理地址。...地址加法器采用物理地址=段地址*16+偏移地址的方法合成物理地址。 注意:这里说段地址并不是说内存被划分成了一个一个的段,每一个段有一个短地址。...段的划分来源于CPU,因为物理地址的合成方式,使我们能以分段的方式管理内存。 段寄存器 8086访问内存时,需要相关的部件提供内存单元的短地址和偏移地址,那么,是什么部件提供提供短地址。

1.1K20

网络设备硬核技术内幕 路由器篇 20 DPDK (五)

说到大页机制,就要从原始的8086时代讲起。 1979年,那是一个春天。有一位青年在加州的实验室按下开关…… 英特尔的8086处理器时代,程序员编写的程序,都是直接访问物理地址。什么是物理地址呢?...内存0xDEADBEEF,对应的总线A31到A0就是: 11011110 10101101 10111110 11101111。 但是,在80386时代,保护模式出现了。...保护模式将物理地址映射为逻辑地址,如果程序访问了无权限访问的地址,系统就会陷入“异常”,而异常处理程序决定是报错还是其他处理方式。 映射表由CPU中专用硬件实现,这种硬件叫做TLB。...CPU通过查找TLB可以立即找到虚拟地址对应的物理地址。如果在TLB中没有查到,则会触发TLB Miss,约付出30个CPU指令周期的代价。 默认的TLB页大小为4KB。...当然,DPDK除了利用网卡的多队列功能以外,还可以利用网卡其他硬件加速功能,TCP卸载,VXLAN隧道卸载等,进一步加速网络数据包的处理。

61920

Linux内存寻址之分段机制及分页机制【转】

前言 本文涉及的硬件平台是X86,如果是其他平台的话,ARM,是会使用到MMU,但是没有使用到分段机制; 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。...实模式的诞生(16位处理器及寻址) 在8086处理器诞生之前,内存寻址方式就是直接访问物理地址8086处理器为了寻址1M的内存空间,把地址总线扩展到了20位。...为了支持分段,8086处理器设置了四个段寄存器:CS, DS, SS, ES.每个段寄存器都是16位的,同时访问内存的指令中的地址也是16位的。...IA32的内存寻址机制 寻址硬件 在 8086 的实模式下,把某一段寄存器左移4位,然后与地址ADDR相加后被直接送到内存总线上,这个相加后的地址就是内存单元的物理地址,而程序中的这个地址就叫逻辑地址(...PG=1,启用分页机制,并使用本节要描述的机制,把线性地址转换为物理地址PG=0,禁用分页机制,直接把段机制产生的线性地址当作物理地址使用。

3.4K50

Windows程序设计学习笔记(一)Windows内存管理初步

在早期的16位8086CPU中我们使用段与段内的偏移偏移的方式寻址,得到的是真实的物理地址,当时的寄存器是16位而地址总线是20位,为了充分利用这些地址总线,Intel的工程师采用的是分段的方式,将段寄存器与通用寄存器中的数值通过地址加法器合成...8086系列的CPU之所以成为一个划时代的产物就是因为这种分段的思想,而这种思想一直沿用至今。...而LDTR(Local Descriptor Table)80386处理器设计每个任务都有一个独立的LDT。...它包含有每个任务私有的代码段、数据段和堆栈段的描述符,也包含该任务所使用的一些门描述符,任务门和调用门描述符等。系统根据不同的任务切换不同的LDT。这样便于实现不同进程间内存的隔离。...如果PG=0,则分页机制不启用,这时所有指令寻址的地址(线性地址)就是系统中实际的物理地址;当PG=1的时候,80386处理器进入内存分页管理模式,所有的线性地址要经过页表的映射才得到最后的物理地址

49610

Linux从头学02:x86中内存【段寻址】方式的来龙去脉

中,已经提到过,在处理器的内部,执行每一条指令码时,CPU 是非常机械、非常单纯地从 CS:IP 这 2 个寄存器计算得到转换后的物理地址,从这个物理地址所指向的内存地址处,读取一定长度的指令,然后交给逻辑运算单元...我们知道,在 C 语言中,假如有一个指针 ptr 最终指向了这里的 30000H 物理地址处(C 代码中的 ptr 是虚拟地址,经过地址转换之后执行这里的 30000H 物理地址)。...如果 ptr 定义: char *ptr; 那么可以说 ptr 指针指向的数值是 11H。...如果 ptr 定义: int *ptrt; 就可以说 ptr 指针指向的数值就是 44332211H(假设是小端格式)。 也就是说,指针 ptr 指向的数据,取决于定义指针变量时的类型。...作为相当古老的处理器,8086 CPU 中是 16 位的,只能对 8 位或 16 位的数据进行操作。

1.5K30

你真的懂物理地址和逻辑地址吗?

Hello,小伙伴们大家好,祝大家新的一年健康快乐,心想事,万事如意。最重要的一点是:大家出门一定要戴好口罩,勤洗手,不到人群密集的地方去,老老实实呆家里最好了。武汉加油,中国加油!...好了,回归这题,本篇文章主要给大家讲述一下物理地址和逻辑地址的概念,以及它们之间的联系与区别。ps:本文以Intel8086处理器为例讲述。...以上过程中的[0001]就是我们所要说的物理地址,它是一个绝对的固定的地址。 ? 那假如我们指令中的地址用的是物理地址(绝对地址),会产生怎样的问题呢?...如果我们将[0001]当成物理地址的话,那么mov ax,[0001]这句指令读取到的将会是错误的内容。...由此,便诞生了我们将要说的逻辑地址的概念,物理地址它是固定不变的,而逻辑地址会随着程序加载到内存中的位置而变化。好,我们接下来看一下什么是逻辑地址。 ?

4.6K40

独立编址,统一编址,IO端口,IO内存,冯·诺伊曼,哈佛结构

映射:由于linux系统中不能直接使用物理地址,必须使用虚拟虚拟地址,所以对IO内存的操作,必须有一个映射的过程。...映射函数:ioremap(cookie, size)//cookie:物理地址,size :映射大小。...程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,Microchip公司的 PIC16芯片的程序指令是14位宽度,而数据是8位宽度。...程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,英特尔公司的8086中央处理器的程序指令和数据都是16位宽。...除了上面提到的英特尔公司的8086,英特尔公司的其他中央处理器、安谋公司的ARM7、MIPS公司的MIPS处理器也采用了冯·诺伊曼结构。

85110
领券