汇编语言中,堆栈段是否只能定义大于16个字节大小的空间,能否定义少于16个字节的空间?

如题所述

在 8088/8086 系统中,每个段最小是16字节,最大是64K字节。
选用不同的大小范围,都要以 16 字节的整数倍进行。
因为,在计算物理地址的时候,有一个““段地址乘以16””的步骤。追问

如下代码:

stack segment
dw 0,0
stack ends
代码中只定义了2个字的空间(4个字节)也是可以的,所以我想,是不是段地址必须是16的倍数,而段的空间大小不一定要大于16字节?

追答

代码中只定义了2个字的空间(4个字节)也是可以的,
====
只定义4个字节,这当然可以呀!
这就是浪费了12个字节呗。
下一个段,仍然会离开你的这一个段(stack segment)16个字节。
下一个段,不会因为你少用了,而靠近一些。

假如说,你现在定义了堆栈段,SS = 2AC3, 其中,只用了4字节。
接着是代码段,CS = 2AC4,你算算,这两个段,物理地址相差的,是不是16字节?

追问

非常感谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-05
绝对可以,每个段最小是16字节,小于16则默认为16,最大是64K字节

汇编语言中,堆栈段是否只能定义大于16个字节大小的空间,能否定义少于1...
在 8088\/8086 系统中,每个段最小是16字节,最大是64K字节。选用不同的大小范围,都要以 16 字节的整数倍进行。因为,在计算物理地址的时候,有一个““段地址乘以16””的步骤。

求助!为什么X86以上的CPU指令集不提供给用户呢?比如X86-64,sSSE3等等...
在汇编语言中,堆栈操作的最小单位是字,也就是说,只能以字或双字为单位,同时,SS:SP指向栈顶(SS为堆栈段寄存器,SP为堆栈指针,二者一相加,就构成了堆栈栈顶的内存地址)。5、 PUSH(进栈)写法:PUSH reg16(32)\/seg\/mem16(32)\/imm功能描述:将通用寄存器\/段寄存器\/内存数\/立即数的值压入栈中,即:SP=SP-2 SS...

关于汇编原理的几个小问题~~
一、SP本身是存放堆栈的栈顶地址,这没错,但是这个是指逻辑地址,而题目要求的是物理地址。物理地址= ((段地址 * 16 ) + 段内偏移地址 )也写成 物理地址= ((段地址 * 10H ) + 段内偏移地址 ),所以你题目中那个式子SS*10+SP应该写成SS*10H+SP 二、根据上题可知,栈顶地址是12000H,把1...

汇编语言的堆栈段是什么意思
一、堆栈段的定义:是指采用堆栈方式工作的一段内存区域。在采用段式内存管理方式进行程序内存分配的架构中,堆栈段用来存放局部变量和函数返回地址。堆栈段是在程序运行时动态分配使用,只需要通过栈顶指针即可访问。目前大多数CPU中都有专用寄存器可以被用来存放栈顶地址。二、堆栈段的说明:1、在程序中...

急!汇编语言中,为什么往堆栈中压入一个16位数(即一个字)时,栈顶指针是...
入栈是减二 出栈是加二 你自己可以在debug里面试试

一道汇编语言题,望详细解释
它们入栈、出栈的占用空间的大小是不一样的。16位的汇编是2字节,32位的是4字节所以搞错。把图中的加、减4换成加减2就对了。当成32位的汇编了,push 一次。ESP-4 在16位汇编中:push ax sp-2 ;记住入栈-2,也就是分配16位,2个字节的空间,用来存放ax push bx sp-4 push cx ...

汇编语言中设置的堆栈段到底有何作用,怎样的情况下需要设置这个堆栈段...
堆栈段主要用于暂时保存一些数据,不可或缺。操作系统在把应用程序装入内存时,默认分配堆栈段与代码段同段,应用程序可以自行设置自己的堆栈段。自行设置的堆栈段大小最小4个字节,用于从应用程序返回操作系统,几乎所有的初学者不知道这个默认的、不成文的规定。只有较大的程序或递归调用较深的程序,才有...

汇编语言的标号和变量有什么区别?
一般来说,标号只在代码段中被定义,而变量则可以被定义在数据段和代码段中!计算机汇编语言的一个突出优点就是利用符号(Symbol)来代替目标码,也即大量的二进制代码用符号来表示,使汇编语言源程序容易理解,便于记忆.在宏汇编语言中所有变量名、标号名、记录名、指令助记符和寄存器名等统称符号.这些符号可通过汇编控制...

汇编语言中,为什么定义堆栈段的时候后面要多加一个stack 如:stack se...
定义堆栈段的时候,比较特殊,如果在后面加上 stack 指明定义堆栈段,就自动对ss,sp进行了赋值---否则只是一个普通的段,如果要使用它,就需要在代码中对ss,sp赋值。这个需要看编译环境,用masm for windows这个软件时,可以不加。但是如果用debug运行时,可能会出错,提示没有定义堆栈段。

汇编语言寄存器都叫什么
SS:堆栈段寄存器GS:附件段寄存器在16位CPU系统中,只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问,在32位微机系统中,它有6个段寄存器,所以在此环境下开发的程序最多可同时访问6个段。32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的,有关规定简单...

相似回答