| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1065 人关注过本帖
标题:几个很简单的问题,自己想不出来。
只看楼主 加入收藏
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
结帖率:97.3%
收藏
已结贴  问题点数:20 回复次数:9 
几个很简单的问题,自己想不出来。
1:
07D2H+10H 即 07E2H 是程序的地址。从07E2H开始,然后存放data段数据,stack段数据和code段数据。
data段数据空间是16B,stack占用空间是32B,由于编译器是从上往下编译的。然后07E2就是数据短的起始地址。stack段的起始地址就是07E2加上占用空间的16字节就是07E3了。所以07E3才是ss的段地址了!
红色字不理解,为什么07E2+16字节就万07E3了呢,07E2和07E3相差不是256个字节吗。
2:
程序代码:
assume cs:code,ss:stack,ds:data

data segment
       

        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

data ends

stack segment
       

        dw 0,0,0,0,0,0,0,0

stack ends

code segment

start:
        mov ax,stack
        mov ss,ax
        mov sp,16

        mov ax,data
        mov ds,ax

        push ds:[0] ;这的ds为什么省略的话会编译错误,
;我以前可以省略的呀。
;push [0] ;默认段地址不是在DS里面吗,为什么前面还要在加一个ds呢。
        push ds:[2]

        pop ds:[2]
        pop ds:[0]
       

        mov ax,4c00h
        int 21h

code ends

end start

搜索更多相关主题的帖子: 数据 编译器 
2012-06-26 00:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
push ds:[0] ;这的ds为什么省略的话会编译错误,

masm的bug

mov ax, [1] 可能会被编译为mov ax, 1

前一个没看明白
2012-06-26 19:00
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
段地址 07E2h 偏移量0 则物理地址 07E20h

段地址 07E3h 偏移量0 则物理地址 07E30h

差多少呢 差10h=16字节

顺便 B是 byte 还是bit啊 我不知道 你查查呗 别写错了
2012-06-26 19:05
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:7 
对了 大写的B是Byte 小写的b是bit
2012-06-26 19:07
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:7 
堆栈的看不懂

最基础的往往是你最容易忽略的!
2012-06-27 09:58
heliang6291
Rank: 2
等 级:论坛游民
威 望:3
帖 子:27
专家分:45
注 册:2012-6-28
收藏
得分:7 
1.解说中是段地址,段地址在表达实际地址时是*16的关系;
2.这个是编译器的问题,无需多研究,按它的限制使用就是了,无需浪费时间研究这个。平时[data]默认是在DS中的。
2012-06-28 14:35
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
谢谢版主,第一个问题我搞明白了,物理地址可以用多种 段地址*10h+偏移 组成。

以前还清楚的。。。

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-06-28 19:53
宋末
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-22
收藏
得分:0 
masm不认识【0】你可以【AX]
2012-07-22 21:41
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
push ds:[0] ;这的ds为什么省略的话会编译错误,
 在16汇编下 push不支持立即数, push ds:[0] 不加 ds 也许 masm将他汇编成 push 0 这样了。在debug下调试就可以看见
 王爽的书上面说的很清楚。
 
2012-08-02 23:43
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 8楼 宋末
[ax] 不能作为寻址。在 32位汇编才支持  16位汇编 寻址有 [di][si][eb][bx]
2012-08-02 23:45
快速回复:几个很简单的问题,自己想不出来。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021600 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved