|
主题 : : CS和DS有什么不同 [已解决] |
回复[ 6次 ]
点击[ 473次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-08-06 21:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58 |
在基础知识里我们学过:CS为代码段寄存器,IP为指令指针寄存器
但是现在学到第三章,mov传递的偏移地址 例如mov ax,[0]
这个[0]代表了内存偏移地址 也就是说是IP
为什么都说他对应的是DS段寄存器呢
搞不懂. | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-08-06 21:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58 |
我知道DS 是data S....意思就是数据段 但是还是分不清楚 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-08-06 23:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
错了,不是的,Ds是data段的段地址寄存器,它的全称不是data segment,ip是和cs相关的,它与ds没有关系,寻址的时候也不是用它的。[0]表示ds:[0],表示数据段的第一个字节下的内容,可以表示内存偏移的寄存器有bx,bp,sp(一般不用它),si,di,但是绝对不会是ip | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-08-06 23:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
错了,不是的,Ds是data段的段地址寄存器,它的全称不是data segment,ip是和cs相关的,它与ds没有关系,寻址的时候也不是用它的。[0]表示ds:[0],表示数据段的第一个字节下的内容,可以表示内存偏移的寄存器有bx,bp,sp(一般不用它),si,di,但是绝对不会是ip | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-08-07 00:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58 |
那么我们学过的CS * 16 + IP = 物理地址
意思是:基础地址+偏移地址=真实地址
任何时候CPU都是从CS:IP开始读取指令的 这句怎么讲呢?
他和DS 也就是你说的"data段的段地址寄存器"是什么关系呢?
小菜鸟期待你的教诲 嘿嘿 | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-08-07 09:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
它们是两个不同的段,在内存中数据和代码长的都一样,如果在你的代码中有Mov ax,0 mov cs,ds jmp ax这三句,程序就会从数据段的第一个字节开始执行,如果对于机器指令不是很了解的话,有可能会然cpu遇到无效指令,然后退出。或许楼主只是对cs与ds的关系不清楚,只需要记住cs是代码段,它指向的地址的内容会以指令来执行,而ds所指向的地址的内容是数据,相当于草稿纸用来被cpu来读读写写,严格来说,它们俩都是一种寄存器,它们的内容是地址,只是对于cpu来说有不同的用处,其他还有几个段寄存器,如es,ss,fs,gs,如果是在弄不明白就算了,因为在32位汇编中就没有段寄存器这个概念了,因为eip是32位的 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-08-07 21:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58 |
此贴由 贴主 于 [ 2011-08-07 21:29 ] 结贴。 结贴原因:问题已解决 | | |