鱼C论坛

 找回密码
 立即注册
查看: 5217|回复: 18

程序加载后cs与code的关系(段寄存器与段名的关系)

[复制链接]
发表于 2012-5-24 10:08:18 | 显示全部楼层 |阅读模式
1鱼币
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0
start:
    mov ax,cs   
    mov ss,ax
    mov sp,1ah   
    mov ax,0
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push [bx]
    pop cs:[bx]  
    add bx,2
    loop s
   
    mov ax,4c00h
    int 21h
codesg ends
end start
这个是王爽著汇编语言教材实验5的第一题代码

1:如上程序  那么程序被加载后cs与code表示的段地址之间有没有什么关系:
2:为何在第三小问中,可以通过cs和ds的关系来给出code段的段地址和data段的段地址
3:倘若去除下面程序中的start,那么cpu是不是通过默认第一条机器码为指令,然后根据该指令在code段中,从而将该段中的所有机器码都当做指令运行吗

assume cs:code
code segment

    mov ax,cs   
    mov ss,ax
    mov sp,1ah   
    mov ax,0
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push [bx]
    pop cs:[bx]  
    add bx,2
    loop s
       dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0

    mov ax,4c00h
    int 21h
code ends
end


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-24 10:25:56 | 显示全部楼层
第一题的第二问:因为在代码中将stack标志和data标志分别赋给了ss段寄存器和ds段寄存器!
第三问:你可以自己编译下,然后debug下,看看呗!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 10:34:26 | 显示全部楼层

但是在整个代码中
code可没有赋给cs啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 10:35:07 | 显示全部楼层
960050023 发表于 2012-5-24 10:34
但是在整个代码中
code可没有赋给cs啊

我电脑是64位啊  没有debug 啊  怎么办啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 10:37:20 | 显示全部楼层
960050023 发表于 2012-5-24 10:34
但是在整个代码中
code可没有赋给cs啊

我电脑是64位  没debug  下了个虚拟机  不会用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 10:44:41 | 显示全部楼层
960050023 发表于 2012-5-24 10:37
我电脑是64位  没debug  下了个虚拟机  不会用啊

cs段没有指定,但是,end start告诉了cpu从start标志出开始执行,执行的时候,cs:ip就执行了start标志的第一句代码,间接的将code赋值到了cs中!

论坛上有关于64位电脑使用dos的方法!你找找看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 11:12:13 | 显示全部楼层
xiaolongxia 发表于 2012-5-24 10:44
cs段没有指定,但是,end start告诉了cpu从start标志出开始执行,执行的时候,cs:ip就执行了start标志的 ...

code段的段地址决定cs 还是cs决定code段的段地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 11:32:35 | 显示全部楼层
本帖最后由 Ginx 于 2012-5-24 11:33 编辑

第一问:在程序加载的时候,assume 伪指令在程序加载的时候,会自动把cs和cscode关联
第三问。是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 11:36:00 | 显示全部楼层
960050023 发表于 2012-5-24 11:12
code段的段地址决定cs 还是cs决定code段的段地址

不是谁决定谁,‘code’在编译的时候会被编译成一个段地址,而cs:ip指向的代码,cpu将会将其视为指令!而cs:IP一开始指向那里,就由‘end 标志’中的标志决定了,也就是说cpu一开始执行‘标志’那里,而这时候,cs的值就跟‘code’一样!你可以想象成,将code的值赋给了cs段寄存器!不存在谁决定谁!
‘code’标识的段地址,是编译时就定下来的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 11:43:54 | 显示全部楼层
你第一题的代码写错了!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 11:47:48 | 显示全部楼层
我个人的理解:对于想’code segment‘可以将code理解为段地址,以后使用他给别的寄存器赋值,它都代表了‘code  segment ’到 ‘code ends’这段数据或者代码的段地址!其他类似stack segment也一样的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 11:50:43 | 显示全部楼层
xiaolongxia 发表于 2012-5-24 11:36
不是谁决定谁,‘code’在编译的时候会被编译成一个段地址,而cs:ip指向的代码,cpu将会将其视为指令!而 ...

如果END 后面没有表示  那怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 11:52:17 | 显示全部楼层
960050023 发表于 2012-5-24 11:50
如果END 后面没有表示  那怎么办

如果end后面没有标志  那怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 11:58:48 | 显示全部楼层
程序将从有效代码的第一句开始执行!像你写的代码,将会从0123h开始,cpu将其当作指令开始执行,具体当成什么指令,就要看这些机器码对应什么指令了!(0123h在内存中存放,是‘23 01’ 存放的)所以,一定要在末尾用end 标志,告诉编译器在哪里开始执行代码!具体cpu如何从指定的标志开始执行就不是你现在要关心的了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 12:06:08 | 显示全部楼层
xiaolongxia 发表于 2012-5-24 11:58
程序将从有效代码的第一句开始执行!像你写的代码,将会从0123h开始,cpu将其当作指令开始执行,具体当成什 ...

很好  谢谢 怎样把分给你啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 12:07:42 | 显示全部楼层
xiaolongxia 发表于 2012-5-24 11:43
你第一题的代码写错了!!!!

错在哪里啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-24 12:11:02 | 显示全部楼层
代码本身没错,可是我跟实验5的第一题没对上......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-24 13:09:14 | 显示全部楼层
xiaolongxia 发表于 2012-5-24 12:11
代码本身没错,可是我跟实验5的第一题没对上......

实验五第一题中哪些被定义的数据保存在哪里啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-22 10:25:17 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表