鱼C论坛

 找回密码
 立即注册
查看: 2383|回复: 3

[技术交流] 关于汇编语言中《栈的正确声明定义问题》

[复制链接]
发表于 2012-2-17 04:43:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 没个正样 于 2012-2-17 05:08 编辑

主题:关于汇编语言中《栈的正确声明定义问题》

最近,我在论坛上发现很多朋友,用debug运行程序时,经常出错;故而,引起我对此事的特别关注,今夜花了几个小时的时间,终于理出了一些头绪。
之前,我在学习的过程中,遇到譬如此类浅处的小问题时,都是飞身通过的......
可是快,有快的好处,也有快的坏处。兵法有曰:智者之虑,必杂于厉害;杂于利而勿可信也,杂于害而患可解也。
所以,我们要掌握好,快慢之度。

下面我用四个例子来说明《栈的正确声明定义问题》;
一,
assume cs:code,ds:data,ss:stack
data segment
    db 01h   ;23h,0456h
data ends
stack segment
    db 0,0,0,0,0,0,0,
stack ends
code segment
start:
    mov ax,data
    mov ds,ax
   
    mov ax,stack
    mov ss,ax
    mov sp,7
   
    push ds:[0]
    ;push ds:[2]
    mov ax,4c00h
    int 21h

code ends
end start
在第一个例子中,我们发现,声明定义7个字节的栈来存储一个字节的数据,都会报错;由此,我们可以断定在存储数据前,栈先要预留出7个字节的空间
具体是什么原因,我也说不准,或是给系统所占用,或是在数据段中有隐藏的数据,或是编译器的内部规定。


二,
assume cs:code,ds:data,ss:stack
data segment
    db 01h     ;23h;,0456h
data ends
stack segment
    db 0,0,0,0,0,0,0,0
stack ends
code segment
start:
    mov ax,data
    mov ds,ax
   
    mov ax,stack
    mov ss,ax
    mov sp,8
   
    push ds:[0]
    ;push ds:[2]
    mov ax,4c00h
    int 21h

code ends
end start
在第二个例子中,我们发现,声明定义8个字节的栈来存储一个字节的数据,就可正确地通过了!


三,
assume cs:code,ds:data,ss:stack
data segment
    dw 0123h     ;,0456h
data ends
stack segment
    db 0,0,0,0,0,0,0,0,0,0
stack ends
code segment
start:
    mov ax,data
    mov ds,ax
   
    mov ax,stack
    mov ss,ax
    mov sp,10
   
    push ds:[0]
    ;push ds:[2]
    mov ax,4c00h
    int 21h

code ends
end start
在第三个例子中,我们发现,声明定义10个字节的栈来存储一个字型的数据,也可正确地通过了!


四,
assume cs:code,ds:data,ss:stack
data segment
    dw 0123h,0456h
data ends
stack segment
    db 0,0,0,0,0,0,0,0,0,0,0,0
stack ends
code segment
start:
    mov ax,data
    mov ds,ax
   
    mov ax,stack
    mov ss,ax
    mov sp,12
   
    push ds:[0]
    push ds:[2]
    mov ax,4c00h
    int 21h

code ends
end start
在第四个例子中,我们发现,声明定义12个字节的栈来存储二个字型的数据,还可正确地通过!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-17 14:57:12 | 显示全部楼层
反正现在不在乎内存空间了 多定义点空间给栈不就行了!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-17 17:32:04 | 显示全部楼层
反正现在不在乎内存空间了 多定义点空间给栈不就行了!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-19 05:34:59 | 显示全部楼层
是啊!两位,多定义点空间就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表