关于程序中数据段与堆栈段地址的问题

sabble 2004-12-07 08:53:56
问题主要是关于,数据段和堆栈段相互覆盖干扰的问题

代码片段如下:
assume cs:codesg

datasg segment
dw 256 dup (0) ;定义数据段长度512字节
datasg ends

stacksg segment
db 64 dup (0) ;定义堆栈段长64字节
stacksg ends

codesg segment
start:
mov ax , datasg
mov ds , ax ; 将DS指向DATASG段
mov ax , stacksg
mov ss , ax ; 将SS指向STACKSG段
mov sp , 63 ; 将SP指向SS段的最后一个字节

push ax ; 在这里AX的内容将会存入DS段内

mov ax , 4c00h
int 21h

codesg ends

end start

问题:在这个程序中SS段和DS段的段地址是相同的,当DS段或SS段较长时,SS和DS中的数据很
容易相互干扰。请问:如何才能避免这种情况呢?如:DS长64K,SS长16个字的情况

在这里先谢谢大家了~~谢谢~~~
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sabble 2004-12-09
  • 打赏
  • 举报
回复
各位不好意思,昨天我登不上社区,没有回帖,请原谅~~~

因为我的XP不能在DOS模式下进行DEBUG,所以我用 emu8086 v2.05 在模拟8086的环境进行汇编编程。这段程序在编译的时候DS和SS的值都是0B67,即使在ASSUME部分加上SS:STACKSG也不可以~~这是我在发帖的时候没有说明的,抱歉~~~
谢谢大家~
Areslee 2004-12-08
  • 打赏
  • 举报
回复
另外,堆栈段定义时应该指明
stack segment stack
wangziz 2004-12-08
  • 打赏
  • 举报
回复
0c19-0bf9=20h 这是段地址,然后左移4位=200h=512,怎么会冲突了?
如果你定义db 65536 dup (0) (64k)会溢出
只能定义db 65535 dup (0) (小于等于64k-1才可以吧)
wangziz 2004-12-08
  • 打赏
  • 举报
回复
为什么是相同的?debug看看吧。

0C1D:0000 B8F90B MOV AX,0BF9
0C1D:0003 8ED8 MOV DS,AX
0C1D:0005 B8190C MOV AX,0C19
0C1D:0008 8ED0 MOV SS,AX
...

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧