在MASM中,有时候会手动定义堆栈段,有时候不用;自定义的SS: _code,那岂不是堆栈段用了代码段的空间?

如果不自定SS, 那么运行时SS与SP的值是多少?

一般把SP的值传给BP(堆栈校准指针),然后直接用BP来访问堆栈中的数据,因为BP默认是和SS配合使用.SS: _code这种格式也不是用了代码段的空间,还是堆栈段的空间.CS:_code才是用了代码段的空间.不是根据名字来判断到底是属于哪一个段的,是根据前面的段寄存器来判断的
如果不自定SS,那么SS和SP的值是DOS操作系统给出的,要想知道的话,编写一个程序把SS和SP的值显示在屏幕上,不就知道了吗?
一般情况下,设置和不设置堆栈段都无所谓,不设置的话,操作系统会自动给出,只有在你的程序需要很大的堆栈空间时才需要自己设置,或者需要多个堆栈时才需要.
温馨提示:内容为网友见解,仅供参考
无其他回答

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

我的汇编程序里面在编译过程中经过MASM后提示1 severe non_diget...
Call of non-function ---调用未定义的函数 Call to function with no prototype ---调用函数时没有函数的说明 Cannot modify a const object ---不允许修改常量对象 Case outside of switch ---漏掉了case 语句 Case syntax error --- Case 语法错误 Code has no effect ---代码不可述不可能执行到 Comp...

汇编错误LINK : warning L4021: no stack segment
你的程序是对的啊,因为你没有用到堆栈段,所以你不用定义堆栈段。他只是警告你没有定义堆栈段而已,不影响程序执行了结果。你编译连接完以后直接输入文件名就出结果了,我试过了啊。要不你在程序中把堆栈段定义加在代码段定义的后面就没有警告了。stack segment stack ends ...

masm5.0汇编问题,编译过程无错误,但是最后输出无结果
你这个程序,没有屏幕输出显示的代码。所以,运行后屏幕上无显示并直接返回DOS,是对的。若要加上显示部分,代码会比较长。需要先将压缩BCD分离,再转换成ASCII,再显示。你这个程序,是用来练习串指令和BCD码运算的。它正确的用法不是直接运行,而是在调试器DEBUG中调试运行,通过单步、断点等方式检查运...

MASM 怎么用..
1、先用EDIT编辑好汇编程序,保存格式为ASM格式 2、再用MASM连编成OBJ文件,若有错误,则返回EDIT修改 3、再用LINK生成EXE文件 4、用DEBUG调试

小弟初学汇编 怎样搭建开发环境?MASM怎么用?PWB是什么?
其中,BX.CX反映程序的大小,CS:IP指向程序开始执行的第一条指令,SS:SP指向堆栈段,DS和ES并不指向程序数据段,而是指向程序前100H处(这部分是该程序的短前缀PSP);所以,DS和ES应该在程序当中进行设置,正如该程序.STARTUP伪指令所完成的。采用简化段定义格式的程序,在主存中从低到高依次安排代码段、数据段和堆栈...

汇编语言linux终端设置光标位置汇编语言linux
它们是:DS(用来存放数据段的起始地址),CS(用来存放代码段的起始地址),SS(用来存放堆栈段的起始地址),ES(用来存放附加段的起始地址)。程序员在编程时,需要人工指定这些段寄存器对应于程序中的哪个段。 有了段的概念,我们就可以写出一个汇编程序的基本框架如下: DATASEGMENT;定义一个叫DATA的段。DATA既是这个段的...

通用寄存器和专用寄存器有什么区别和联系?
- SS寄存器存储堆栈段的段基地址,堆栈段是用于临时存放数据或地址信息的特殊内存区域。要深入理解并掌握寄存器的深层功能,编写汇编语言程序并在实际机器上进行调试是至关重要的。使用微软的MASM汇编器和DOS系统的DEBUG命令可以帮助开发者理解寄存器的运作。最终,正如我的导师曾经告诉我的一样:“记住,掌握...

C语言中怎么嵌入汇编
使用内联汇编可以在 C\/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 内联...

关于《微机原理》的一些问题
12、若当前SS=3500H,SP=0800H,堆栈段在存储器中的物理地址为35800H,若此时入栈10个字节,SP内容是07F6H,若再出栈6个字节,SP为07FCH 3、(1)MOV AX,[100H]源操作数字段的寻址方式是直接寻址,物理地址值是 10100H (2)MOV AX,VAL源操作数字段的寻址方式是直接寻址,物理地址值是 10030H...

相似回答
大家正在搜