首页
社区
课程
招聘
[旧帖] 有关段定义的问题!! 0.00雪花
发表于: 2007-2-20 15:35 4150

[旧帖] 有关段定义的问题!! 0.00雪花

2007-2-20 15:35
4150
段定义的定位类型可以是:
byte
word
para
page
前三个,都编程用debug演示出来了
可是使用page时用debug -r命令显示:
CS:14E2
IP:0000
可许多资料上都说段地址的最低两位16进制数位必须为0(该地址能被256整除)。这个结果显然不对,为什么??
代码如下:
title mymodule

dddd segment
org 1000h
x db 'ABCDEFG'
dddd ends
;=======================================
ddd2 segment
y db 'abcdefg'
ddd2 ends
;==============================================
mydata group dddd,ddd2
;=============================
code segment page ;此处改为byte,word,para后验证和书上一致。
                   ;page的验证结果不对
assume cs:code,ds:mydata
start:
mov ax,mydata
mov ds,ax
lea bx,x
lea bx,x
lea bx,y
code ends
end start

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是高手不屑一顾,还是咱大家都是菜鸟啊。
2007-2-20 19:31
0
雪    币: 250
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
请仔细看一下书上关于CS:IP的解释那一段。
2007-2-20 19:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
废话,楼上的不要添乱好么??
2007-2-20 20:03
0
雪    币: 250
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
有必要这样说吗?客气一点好不好,我哪里添乱了,我说的不对吗?楼主,你还没有弄清楚内存实地址是怎样计算的。
2007-2-20 20:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
那你告诉我内存的实地址是怎样计算的
不就是段地址*16+偏移地址吗??
2007-2-20 20:20
0
雪    币: 250
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
(1)定位类型
指定当前段的起始地址的性质
1,PARA段的其实地址的低4位为0H,即可被16除尽
2,PAGE段的其实地址的低8位为00H,可以被256除尽
3,BYTE段可以从任意地方开始
4,WORD当前的其实地址为偶地址
5,DWORD段的其实地址为4的倍数
2007-2-20 20:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 龙之冰点 发布
(1)定位类型
指定当前段的起始地址的性质
1,PARA段的其实地址的低4位为0H,即可被16除尽
2,PAGE段的其实地址的低8位为00H,可以被256除尽
3,BYTE段可以从任意地方开始
........

你说的这个我知道,也明白,看我的代码没有问题吧。可用debug调试时CS:14E2
IP:0000
代码段的实地址是14E20H并不是xxx00H,这是为什么是我的代码有问题,还是另有原因??你明白我的问题了吗??感觉和你这个高人交流起来真费劲!!你可以把代码编译用Debug调试后再回答我的问题,不要觉得简单就想当然!!
2007-2-21 04:05
0
雪    币: 250
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
8086地址总线20位,则可寻址空间1M。但它的数据线16位,要是处理地址,一个地址就装不下。于是就采用段基址和偏移地址的方法。把1M的空间分为64K个段地址,如00000h、00010h、00020h……ffff0h,一共64K个。这些段地址的特征是最低四位(化成二进制来看)为0.于是把段地址的最低四位省略这样就能装入寄存器了,cpu知道最低四位为零。寻址时,cpu把段寄存器里的16位地址自动左移四位这样就还原为真正的段地址,再加上偏移就得到物理地址了。
20位的段地址的特征是最低4位为0。
有些书上说段地址是16位的,但其实段地址应该是20位的,这两种说法其实是一回事。
16位的段地址实际上是默认低4位为0的20位的段地址的“缩写”。
2007-2-21 13:51
0
雪    币: 250
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
另外,我没有觉得简单就想当然,请楼主不要主观臆断。
我希望楼主讨论时语气能够平和些,这样对大家都好。
2007-2-21 13:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不是我不对你客气,你根本就是在捣乱,你瞎吗??看不出我问的问题是什么吗??你根本就是在答非所问吗??不是成心捣乱是什么??还要我客气,不骂你就不错了,不会就不要装懂,拿一些小孩都会的东西来敷衍了事,我又不是非要问你,论坛里的人这么多,我也希望能有人可以给我一个满意的答案,对那些经常帮助的人我也非常的尊敬和感谢,可对你,无话可说了
2007-2-21 15:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
对不起,刚才激动了一点,我对你表示十分的歉意!!我在详细向你解释一下我的问题,还用我最早的代码,用debug调试这个代码的时候-r
CS:14E2
IP:0000
下一条代码指向mov ax,mydata
也就是说当前CS和IP指向的是代码段的开始,实际地址是14E20H
CS左移4位+IP得到的。
那么,用page代码段的开始应该是能够被256整除的呀。具体表现应该是实际地址的末两位为0也就是xxx00H,可上面显然不对,这是为什么??
2007-2-21 15:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
怎么没有人理我哩??
2007-2-22 14:35
0
游客
登录 | 注册 方可回帖
返回
//