|
主题 : : 汇编语言中段寄存器cs ds ss es区别 [待解决] |
回复[ 6次 ]
点击[ 499次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-05-10 16:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-06 20:24 |
在汇编语言学习中体会到要描述一个物理地址,需要用到段地址×16+偏移地址,其中段地址存放在段寄存器中。但是汇编语言的段寄存器总共有4个。我应该在什么条件下才能使用cs,ds,ss,es?即cs,ds,ss,es的区别?按照我的理解,我觉得他们之间可以互用。真的是这样吗? | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-05-10 18:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:15
信誉值:2
注册日期:2007-12-05 14:06 |
有些情况下可以混用。
比如:mov ax,ss:[0]或mov ax,es:[0]
但有些情况必须专用:
比如CPU从一个内存地址取指令必须用CS:IP。
如果使用栈的方式操作内存则必须用SS:SP。
这些书上都会讲得很详细,只要认真看书,以后自然就理解了,不用着急。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-05-11 08:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-06 20:24 |
谢谢app的回复。
我想再问下,如果要读一个内存单元是否只能用ds:[address] | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-05-11 08:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-06 20:24 |
或者可以这样说,读指令用cs:ip
读数据用ds:[address]
读栈内容用ss:sp | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-05-26 10:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44 |
个人理解...
段寄存器只是个寄存器而已.
重要的不是段寄存器叫什么名字,而是对于相应的汇编指令与它们之间的关系.
比如push指令与ss 段寄存器关连,因此 ss 就叫堆栈寄存器罗。。。。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-05-26 10:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44 |
因此,如果要学习寄存器的使用,离开了具体的汇编指令 那就完蛋了。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-05-27 22:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-27 21:58 |
在下愚见,在具体使用这些寄存器时:
cs 为代码段寄存器,一般用于存放代码;
ds 为数据段寄存器,一般用于存放数据;
ss 为栈段寄存器,一般作为栈使用;
es 为扩展段寄存器;
其中的es在使用时可以看做是ds的扩展寄存器。
所以在使用的时候还是要注意每个寄存器的用途的。 | | |