| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1060 人关注过本帖
标题:王爽汇编第二版实验5有些疑问。。。。。!~~
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我觉得你的问题在于 不会实践 “实践是真理的唯一标准”
2011-08-26 22:10
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用iamsky1981在2011-8-26 22:05:37的发言:

(16*(n/16+1))=16 搞不懂你这个16怎么算出来的
这里定义的a, b,c三个段每个段占16个字节,是因为段定义的默认定位类型是PARA,也就是说段起始位置位于可用的第一个节(每节为16个字节)
 
“在start:那里 mov ax,a  然后 mov ds,ax  那么他就定义在数据段   mov ss,ax  那么那个a就定义在栈段  是这样理解吗”
 
这个地方不是说定义在哪个段,a段已经定义好了, mov ds, ax只是把a的段地址赋给ds或者ss,让段寄存器指向a段
 
“从CS+3这里才是代码的真正开始” 此言差矣  CS才是代码的真正开始
 
总的来说,楼主的基础差那么一点点,建议楼主把基础再复习一下

那个公式代n=0就是了 呵呵
2011-08-26 22:15
iamsky1981
Rank: 2
等 级:论坛游民
帖 子:20
专家分:76
注 册:2009-10-23
收藏
得分:0 
以下是引用zklhp在2011-8-26 22:15:39的发言:


那个公式代n=0就是了 呵呵

2011-08-26 22:17
ganbikai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:17
注 册:2011-8-24
收藏
得分:0 
回复 9楼 iamsky1981
(16*(n/16+1))这个算法是10进制 应该是 (10*(n个字节/10+1))  我理解的就是 只要他不超过16个字节 该段实际空间就是16个字节  超过16个字节 比喻 18个字节  那么该段实际空间就是32个字节。 这个算法是视频的讲师说的  他说也许听者理解起来会有点麻烦  按照C语言的什么什么的 就是这个公式(抱歉原话我忘了

  我刚才到王爽老师的论坛看了看别人的答案  又翻了翻视频   说那个segment前面那个是个标记 那么那个A B C 就是一个标记  
  我又看了看视频  第一句代码是这样  
assume CS:code  DS:data  SS:stack
data segment
      dw XXX,XXX,......省略
data ends

stack segment
      dw XXX,XXX,......省略
stack ends
code segment
start : mov ax,stack
        mov ss,ax
...................
.................省略

他这里是把那里是什么段 都定义好了  看到MOV ax,stack  这句代码 听到讲师说的(讲师怎么说的原话我忘记了) 然后突然记得以前讲师说过 CS指向就是代码段  SS指向就是栈段  DS指向就是数据段  同一个段 他用什么指他就是什么 我一想 这句话我以前根本没理解好啊 我一直在纠结debug加载程序后为什么CS:0这里面的数据不是代码里定义的数据 因为之前学的程序里 我都习惯直接看CS的值来查看定义的数据所以..............(字越打越多了   既然A是标记  这道题目就是要A+B的值放到C中  那么A就是放那些数据的地址 我用DS指向就行         

[ 本帖最后由 ganbikai 于 2011-8-27 00:03 编辑 ]
2011-08-26 23:55
ganbikai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:17
注 册:2011-8-24
收藏
得分:0 
回复 6楼 zklhp
真理啊  我刚才看别人的代码才想起来
2011-08-26 23:56
ganbikai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:17
注 册:2011-8-24
收藏
得分:0 
回复 11楼 zklhp
我刚才一直在实践 帖子我发了好久了
2011-08-26 23:57
ganbikai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:17
注 册:2011-8-24
收藏
得分:0 
以下是引用iamsky1981在2011-8-26 22:05:37的发言:

(16*(n/16+1))=16 搞不懂你这个16怎么算出来的
这里定义的a, b,c三个段每个段占16个字节,是因为段定义的默认定位类型是PARA,也就是说段起始位置位于可用的第一个节(每节为16个字节)
 
“在start:那里 mov ax,a  然后 mov ds,ax  那么他就定义在数据段   mov ss,ax  那么那个a就定义在栈段  是这样理解吗”
 
这个地方不是说定义在哪个段,a段已经定义好了, mov ds, ax只是把a的段地址赋给ds或者ss,让段寄存器指向a段
 
“从CS+3这里才是代码的真正开始” 此言差矣  CS才是代码的真正开始
 
总的来说,楼主的基础差那么一点点,建议楼主把基础再复习一下
恩 我学到这章  这个实验5 引出了 之前一些没学好的东西
各位晚安
2011-08-27 00:09
ganbikai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:17
注 册:2011-8-24
收藏
得分:0 
以下是引用zklhp在2011-8-26 22:10:35的发言:

我觉得你的问题在于 不会实践 “实践是真理的唯一标准”
这道题目刚才实践成功了 但暴露我前面几个视频没理解好  又要重看 悲哀
版主晚安

[ 本帖最后由 ganbikai 于 2011-8-27 00:12 编辑 ]
2011-08-27 00:09
wary
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-9-24
收藏
得分:0 
我也刚刚看到这章。
a segment  b segment c segment 在代码段( cs:0)而不是在数据段(ds:0)
所以我认为,a segment  b segment c segment 都是作为指令代码
程序就是从a segment开始的
但程序是从cs:ip执行的


2011-09-25 00:15
快速回复:王爽汇编第二版实验5有些疑问。。。。。!~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018390 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved