ZKX's LAB

堆的汇编原理

2021-04-03知识4

关于汇编原理的几个小问题~~ 你说的2113“断开”,大概指的是5261ES后面与SS之间还有一段空白吧?你图中最后那句4102“段与段可以不连续”1653,就是你说的“断开”。在程序运行中,CS,DS,ES,SS这4个段寄存器的值,相互之间没有联系,每一个都是可以独立取值的,因而可以出现“重叠”(甚至完全重合)和“断开”。它们并不需要一个接一个地连续排列。段寄存器中存放的,是“段地址”。16位的“段地址”,是20位的“段首地址”的高16位,20位中剩下的低4位是0000。也就是说,段的开始地址是十进制数16(十六进制数10H)的整数倍。“段地址”,规定了一个段的开始位置。一个段的大小,只是“最大”可以达到64KB(偏移地址从0000H~FFFFH),不是“始终”是独占64KB的固定大小。实际程序中,代码或数据一般不会不多不少正正好是64KB,很可能会小于64KB。为了充分使用内存,将程序装入内存后,并不是会给程序里的每一个逻辑段都分配一个完整的64KB段让它独占。而是需要多少就分配多少。剩下的要给别的段使用。在访问程序里的逻辑段中的数据时,偏移地址的取值范围是按逻辑段的实际大小处理的。举个例子:假设,程序中的一个数据段里只定义了256个字节(100H个字节)的变量空间。假设将这个逻辑段装入。

关于汇编原理的几个小问题~~ 一、SP本身是存放堆栈的栈顶地址,这没错,但是这个是指逻辑地址,而题目要求的是物理地址。物理地址=((段地址*16)+段内偏移地址)也写成物理地址=((段地址*10H)+段内偏移地址),所以你题目中那个式子SS*10+SP应该写成SS*10H+SP二、根据上题可知,栈顶地址是12000H,把1234H送入堆栈的操作相当于,把1234H存在12000h-2(=11FFEH)的地址里,根据低位数据放在低地址,高位数据放在高地址,低8位数据34H存放在12000h-2(=11FFEH),而11FFFH存放的是高8位数据12H。

编译原理和汇编的原理? 编译是编译器把源文件编译成目标程序.汇编是一中低级语言,是可以用来直接与硬件操作的程序语言.祝你早日解决该问题。

#堆的汇编原理

随机阅读

qrcode
访问手机版