汇编:获取段地址的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编:获取段地址的问题相关的知识,希望对你有一定的参考价值。

程序里面有一个data数据段、一个codeseg代码段
在代码段中执行
mov ax,data

请问在实际执行过程中,这一句是怎么实现的?data段并没有指定地址,也就说data的空间应该是随机分配的。难道在本条语句中,data是使用偏移地址来确定的?

data 是有一个地址的 在你定义这个data的时候 就产生地址 就像C中 定义一个 int a ; 那么&a是有物理地址的。一般在mov ax,data 这一句的后面应该会接着 一句是 mov ds,ax 就是把该地址放到数据段寄存器中 供后面代码寻址用, 只是这个data的值和他真正的地址查一个*10的关系 如果data的值是1000h 那么他的真正的地址就是1000h*10 参考技术A 编译的时候分配偏移地址,data的段地址是在连接的时候由连接程序分配的追问

可以详细讲讲连接程序是如何分配段地址的么?分配出的段地址又是如何表示的?本人新手,先谢谢了~

追答

连接程序如何分配段地址这我也不清楚,你只要知道只要你定义了一个段(数据段或代码段或其他),段名即表示该段的段地址

本回答被提问者采纳

8086汇编 段寄存器

8086汇编 段寄存器

段寄存器存放内存中不同地址段的存储,专门的寄存器存放段地址来提供使用。

8086CPU中主要使用4个段寄存器下面会有说明。

CS - 代码段寄存器

一、说明

CS 代码段寄存器、专门存储代码指令地址的寄存器、它与指针寄存器IP配合使用。

  • 功能:CS:代码段地址存储
  • 功能:IP:代码段偏移地址存储

二、使用

三、解析

1、案例

  CS与IP根据地址计算得出内存地址,通过地址总线传输查找到内存地址中对应的3字节大小的指令,在通过数据总线取出发送给控制器执行,结果修改AX寄存器值。当任务执行完成后由于这条指令为3字节,IP的寄存器会加3、再次合成内存地址后会依次执行剩下指令。

技术图片

 2、案例

  (1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;(2)IP = IP + 所读取指令的长度,从而指向下一条指令;(3)执行指令。 转到步骤 (1),重复这个过程。

技术图片

DS - 数据段寄存器

一、说明

DS 数据段寄存器、专门存储数据内存地址的寄存器、它与DI变指寄存器配合使用。

  • 功能:DS:数据段地址存储
  • 功能:DI:数据段偏移地址存储

二、使用

1、赋值使用

; ax 存放数据内存地址
mov ax, 123BH
; 将 ax 内存地址 存入ds数据段
mov ds, ax
; di 存入偏移地址0
mov di, 0

三、解析

SS - 栈段寄存器

ES - 附加段寄存器

以上是关于汇编:获取段地址的问题的主要内容,如果未能解决你的问题,请参考以下文章

汇编数据段地址问题 看我的源代码,从反汇编的代码中可以看到段地址DS应该为075A 但是D命令查看的结果不是

汇编学习8086CPU-段地址-偏移地址简要理解

汇编语言程序设计中,段寄存器的内容和偏移量合起来是内存地址,

8086汇编 段寄存器

汇编指令JMP是啥意思?

汇编书中“存于寄存器内的地址可用来指向内存的某个位置,即寻址”