首页
社区
课程
招聘
求助:8086简单汇编问题??
发表于: 2009-12-15 12:49 5040

求助:8086简单汇编问题??

2009-12-15 12:49
5040
assume cs:code,ds:data,ss:stack

code segment
start:mov ax,stack
      mov ss,ax
      mov sp,16
      mov ax,data
      mov ds,ax
      push ds:[0]
      push ds:[2]
      pop ds:[2]         
      pop ds:[0]
      mov ax,4c00h
      int 21h
code ends
data segment
    dw 0123h,0456h
data ends
stack segment
    dw 0,0
stack ends

end start      

;为什么code段与data段的段地址差3,code段与stack段差4?为什么不是差1和差2?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
读书要灵活,这里数据段和栈段在代码段的下面,加载的时候代码段的代码先加载入内存,然后再是数据段和栈段,不对的地方还请指正
2009-12-15 13:28
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
但是段地址应该是差1啊,如果把,数据段和栈段放前面,各段就相差1啊
2009-12-15 13:42
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个问题,应该是同步的原因吧。
段寄存器的值应该是PE加载器向系统申请的。而系统不只是运行一个程序。
2009-12-15 14:36
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
放在前面是差1,放在后面因为代码段的代码也占用了内存,所以就不一样了, 比如说加载后代码段有32个字节 这时代码段假设为1
而32个字节暂用了2个段(一个段16个字节),后面数据段的段地址就是3,在往后栈段的段地址就是4  如果代码段暂用了60个字节,60/16=3 后面还有12个字节算一个段 这里代码段就算是4 后面的数据段的段地址就是5,栈段段地址就是6
2009-12-15 14:54
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
16位:
一个段有0----FFFF的寻址空间,即64KB大小。

5楼恐怕不正确,那完全是浪费内存空间啊。
2009-12-15 15:03
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我给的程序的代码段难道有ffffh,我看没有吧?
2009-12-15 15:24
0
雪    币: 295
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
不是说一个段地址就表示占用64k,而是说可以寻址64k
段地址是多少无所谓,只要OFFSET满足 EA = 段地址*16 + OFFSET 就可以了
2009-12-15 15:34
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还是不懂,能说详细点吗
2009-12-15 15:43
0
雪    币: 295
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
我的意思是应该不用这么在意这些值
如果一定要解释的话,我个人想法是:
一般data段和stack段第一个单元偏移为0
这样的话一个段起始与另一个段起始相差16个字节的整数倍才能使偏移为0
也就是说一个段用了多少个16个字节(没占满也算一个),下一个段的段值也要多这么多

个人理解,谨防误导
2009-12-15 16:22
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你的意思是我的代码段用了(32字节<代码段<=48字节),所以数据段与代码段相差3??
2009-12-15 17:34
0
雪    币: 295
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
应该是,不过这应该与汇编程序有点关系吧
2009-12-15 17:39
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不知道了,乱了,看有没有哪个大牛知道,给回答下,解除我心中的疑虑
2009-12-15 18:24
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
中间是不是要将段对齐之类的
2009-12-16 01:12
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主看看下面内存的情况就明白了
-u0
13DC:0000 B8E013        MOV     AX,13E0
13DC:0003 8ED0          MOV     SS,AX
13DC:0005 BC1000        MOV     SP,0010
13DC:0008 B8DF13        MOV     AX,13DF
13DC:000B 8ED8          MOV     DS,AX
13DC:000D FF360000      PUSH    [0000]
13DC:0011 FF360200      PUSH    [0002]
13DC:0015 8F060200      POP     [0002]
13DC:0019 8F060000      POP     [0000]
13DC:001D B8004C        MOV     AX,4C00
-d cs:0
13DC:0000  B8 E0 13 8E D0 BC 10 00-B8 DF 13 8E D8 FF 36 00   ..............6.
13DC:0010  00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C   ..6............L
13DC:0020  CD 21 00 00 00 00 00 00-00 00 00 00 00 00 00 00   .!..............  代码段占用内存
13DC:0030  23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00   #.V............. 数据段
13DC:0040  00 00 00 00 83 3E DF 13-00 00 0D 00 DC 13 E5 0D   .....>.......... 堆栈段
13DC:0050  62 44 83 C4 02 B8 FF FF-50 B8 05 00 50 8D 86 7A   bD......P...P..z
13DC:0060  FE 50 E8 4B 10 83 C4 06-8B 1E 56 07 D1 E3 D1 E3   .P.K......V.....
13DC:0070  A1 3A 21 8B 16 3C 21 89-87 BE 22 89 97 C0 22 80   .:!..<!..."...".
-r
AX=13DF  BX=0000  CX=0044  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=13DF  ES=13CC  SS=13E0  CS=13DC  IP=000D   NV UP EI PL NZ NA PO NC
13DC:000D FF360000      PUSH    [0000]                             DS:0000=0123
2009-12-16 08:56
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
正在看基础,学习了
2009-12-16 08:59
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
那些数字没有太大的意义,同意四楼的。。。。
2009-12-16 09:39
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
终于明白了,结合15楼debug和10楼的介绍明白了
2009-12-17 08:36
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼主,这个东西EXE文件本身决定不了CS和DS什么的值,这是LOAD加载器的事情(也可以说是操作系统中的文件系统的事情),所以你不必纠结具体值的。
这个问题,王爽的16位汇编书没说,那我想应该是没什么 研究或应用 的价值。
2009-12-18 16:37
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
汇编本来就是底层的东西,问一问也没什么坏处,呵呵, 谢谢怀特迈恩了
2009-12-19 10:30
0
游客
登录 | 注册 方可回帖
返回
//