. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  求助dw的问题  [待解决] 回复[ 3次 ]   点击[ 316次 ]  
vlan100
[帖 主]   [ 发表时间:2011-01-18 10:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-24 17:03
如果DS=155B,如下命令行

assume cs:code,ss:stack

data segment
   dw 0123h,0456h
data ends

stack segment
   dw 0,0
stack ends

code segment

start:mov ax,stack
......

这个时候我用debug查看的时候第一个命令是mov ax,156C,怎么会是156C呢,我的理解是此时物理地址起始应该为155B0h,因为是加载exe,所以要加上100h,也就是156B0h,所以此时的ss应该为156B,debug里查看ss确实是156B,这个时候stack不就是ss吗,mov ax,stack应该跟mov ax,ss等同啊,怎么会是156C呢,为什么此时的stack=ss+1,百思不得其解,只好求大家帮我解释下了。
vlan100
[第1楼]   [ 回复时间:2011-01-18 10:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-24 17:03
可能是我理解有误因为单从mov ax,stack命令里是不能知道stack是干啥用的,将stack移入到ax中,然后再移入到SS中,这个时候stack就是当做栈用,问题是此时的stack怎么会是156C呢,是依据什么来给stack的地址的,要是依据dw的话,dw 0,0不是分配2个字型数据吗,stack应该也是156D啊,而且前面也定义了data,已经分配给了data两个字型数据,所以stack也应该是156B+4=156F啊。。。晕了,彻底糊涂了
vlan100
[第2楼]   [ 回复时间:2011-01-18 11:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-24 17:03
。。。额,我知道是为什么了,汗。。。我是个悲剧
cuihecheng
[第3楼]   [ 回复时间:2011-03-29 00:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-29 00:07
兄弟,给讲解一下呗~~~
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved