实验五的变种求解答
本帖最后由 zh_nan2012 于 2011-12-19 21:42 编辑在程序开始有“assume ss:stack”。然后程序中有mov ax,stack。我用debug调试的时候,在开始加载上程序后(debug *.exe),的到的ss的数值怎么和程序运行到mov ax,stack是stack的数值不一样???
ss=1434,stack转换成地址却是1435????????????搞不懂,不是一开始assume关联这两个的数值不应该一样么??? 就算在开头定义了ss:stack,在程序中也要做mov ax,stackmov ss,ax这一步 api 发表于 2011-12-17 00:12 static/image/common/back.gif
就算在开头定义了ss:stack,在程序中也要做mov ax,stackmov ss,ax这一步
我明白,assume ss:stack 是为了程序可读设定的。但我现在不明白的是:用-r 指令查看ss的数值和在程序中cpu将标号stack转化得地址并非相等?为什么?
程序一开始用assume ss:stack
我原来的理解应该是“比如我一开始用-r查看ss=1434”那么我用-t 命令执行mov ax,stack这条指令时应该翻译成“mov ax,1434 ”,但为什么实际是“mov ax,1435“。搞不明白。高手指点下。 我懂你的意思了,我表达不是很好,写两个代码你就清楚了。你的程序是从assume开始的,而不是从代码段开始的。assume cs:codesg,ss:stacksg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
start:mov ax,stacksg
mov ss,ax
mov ax,4c00h
int 21h
codesg ends
end start
assume cs:codesg,ss:stacksg,ds:data
data segment
db 'Hello world!',0
data ends
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
start:mov ax,stacksg
mov ss,ax
mov ax,4c00h
int 21h
codesg ends
end start api 发表于 2011-12-18 23:31 static/image/common/back.gif
我懂你的意思了,我表达不是很好,写两个代码你就清楚了。你的程序是从assume开始的,而不是从代码段开始的 ...
奥,原来如此,小弟受教了。thanks 学的好仔细啊 我都没注意到这个情况 心動の軌跡 发表于 2011-12-21 04:02 static/image/common/back.gif
学的好仔细啊 我都没注意到这个情况
我理解能力不是很好,没看明白你那2个程序,上面和下面有啥区别,为什么说一个是从assume开始的,一个是从代码段开始的?
页:
[1]