. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->自由讨论区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  汇编语言中段寄存器cs ds ss es区别  [待解决] 回复[ 6次 ]   点击[ 499次 ]  
kxiao
[帖 主]   [ 发表时间:2008-05-10 16:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-06 20:24
在汇编语言学习中体会到要描述一个物理地址,需要用到段地址×16+偏移地址,其中段地址存放在段寄存器中。但是汇编语言的段寄存器总共有4个。我应该在什么条件下才能使用cs,ds,ss,es?即cs,ds,ss,es的区别?按照我的理解,我觉得他们之间可以互用。真的是这样吗?
app
[第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。

这些书上都会讲得很详细,只要认真看书,以后自然就理解了,不用着急。
kxiao
[第2楼]   [ 回复时间:2008-05-11 08:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-06 20:24
谢谢app的回复。
我想再问下,如果要读一个内存单元是否只能用ds:[address]
kxiao
[第3楼]   [ 回复时间:2008-05-11 08:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-06 20:24
或者可以这样说,读指令用cs:ip
              读数据用ds:[address]
              读栈内容用ss:sp
silekey
[第4楼]   [ 回复时间:2008-05-26 10:37 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44
个人理解...

段寄存器只是个寄存器而已.
重要的不是段寄存器叫什么名字,而是对于相应的汇编指令与它们之间的关系.

比如push指令与ss 段寄存器关连,因此 ss 就叫堆栈寄存器罗。。。。
silekey
[第5楼]   [ 回复时间:2008-05-26 10:48 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44
因此,如果要学习寄存器的使用,离开了具体的汇编指令 那就完蛋了。
huxj
[第6楼]   [ 回复时间:2008-05-27 22:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-27 21:58
在下愚见,在具体使用这些寄存器时:
cs 为代码段寄存器,一般用于存放代码;
ds 为数据段寄存器,一般用于存放数据;
ss 为栈段寄存器,一般作为栈使用;
es 为扩展段寄存器;
其中的es在使用时可以看做是ds的扩展寄存器。

所以在使用的时候还是要注意每个寄存器的用途的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved