实模式,汇编代码运行时,cs ds ss的地址是如何确定的?

SilentHunter460 2021-04-12 09:42:32
如下,运行起来后,cs ds ss三个寄存器会自动出现内存地址,请问这些地址是如何确定的?我在代码里又没写。


assume cs:code, ds:data, ss:stack

data segment
xxxxxxxxxxxxxxxxxxxxxx
data ends

ss segment
xxxxxxxxxxxxxxxxxxxxxx
ss ends

code segment
xxxxxxxxxxxxxxxxxxxxxx
code ends

end
...全文
675 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2021-04-12
  • 打赏
  • 举报
回复
cs 是由 end start 指定的 start 标号加载到内存时所在段的段址确定的,如你这里 end 语句后面没指定程序从哪里开始,链接时应该会报警但仍会生成 exe 文件,cs 则会指向程序有效内容的开始,这里就是 data 段,实际上错了,所以应该用 end start 来指定程序从哪里开始;
ds 则指向程序的 psp,要指向到 data 段,程序需自己进行赋值;
ss 看情况,如上面的代码 sss segment 没有加 stack 修饰来指明这是个堆栈段,则是指向程序最开始的段,sp=0000,一旦压栈即会回绕到最末尾;如果是 sss segment stack 进行了指定,则是指向 sss 段(ss 是段寄存器名,保留字,不能做段名),sp 会是sss 段的最后;没有指明堆栈段,链接时也会报警,但对普通的简单的程序来说,没有问题,可以不予理会;dosbox 对 ss 的处理好像有不同,在没有用 stack 指定时,比 dos 的默认设定往前挪了 1 即比 dos 的小 1,不知道是 bug还是有什么其他的考虑。
liups 2021-04-12
  • 打赏
  • 举报
回复
这个是装入程序来完成的。可以参考这里: https://zhidao.baidu.com/question/215505232.html

21,497

社区成员

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

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