jellyfish 发表于 2013-8-1 20:11:44

为什么代码第一行AX得到的是SS的值而不是DS的值?

本帖最后由 jellyfish 于 2013-8-2 11:27 编辑

新人求助:hug:

assume cs:codesg, ds:datasg
datasg segment
                db      '1. file         '
datasg ends

codesg segment
start:      mov ax,datasg       ????
                mov ds,ax
                mov bx,0
               
                     ...
                mov ax,4c00h
                int 21h
codesg ends
end start


为什么datasg的地址是SS而不是DS?求回答。。

jellyfish 发表于 2013-8-1 20:48:54

搜到一个相同的问题http://bbs.csdn.net/topics/350072469
有人回答:
需要先运行2步,即执行两次 T 命令,将你自己的数据段地址赋予DS后才行。DS的初始值是程序段前缀(PSP)的段地址。
不知道是不是这样?{:7_154:}

Crazy迷恋. 发表于 2013-8-1 22:07:28

数据段在 代码段的前边~~~。而我们使用ax作为桥梁给ds重新指明代码段我们还未娶执行,因此楼主再执行两次t命令之后ds段就是0b81了。

jellyfish 发表于 2013-8-2 11:26:38

Crazy迷恋. 发表于 2013-8-1 22:07 static/image/common/back.gif
数据段在 代码段的前边~~~。而我们使用ax作为桥梁给ds重新指明代码段我们还未娶执行,因此楼主再执行两次t命 ...

谢谢版主热心帮助~~~{:7_157:}
页: [1]
查看完整版本: 为什么代码第一行AX得到的是SS的值而不是DS的值?