鱼C论坛

 找回密码
 立即注册
查看: 3774|回复: 7

甲鱼老师,还是你来吧。。他们都不会。。。

[复制链接]
发表于 2011-4-14 14:09:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 loop 于 2011-4-17 04:32 编辑

程序6.1:编程计算以下8个数据的和,结果存在ax寄存器中,0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
程序如下:
  1. assume cs:codesg
  2. codesg segment
  3.   dw 0123h,0456h,089h,0abch,0defh,0fedh,0cbah,0987h,
  4. start:  mov bx,0
  5.         mov ax,0
  6.         mov cx,8
  7. s:add ax,cs:[bx]
  8.   add bx,2
  9.   loop s
  10.   mov ax,4cooh
  11.   int 21h
  12. codesg ends
  13. end start
复制代码
以前我问过关于这个程序的问题,不过还没搞懂。。可能是我问题提得不好,不大清楚,现在我想再一次把我的疑问提出来,希望高手可以给我解答,谢谢。

   首先,通过“cs:codesg”我们知道这个程序在代码段,并且,0123h,0456h,......等8个数据也在这个代码段,根据以前学过的“代码段的内存单元只能通过cs:ip指向”(不知这个知识我记得有没有错误。。。。)


    程序运行时,8个数据的地址是cs:0。cs:2,cs:4,cs:6,......加之程序中的一条指令“add ax,cs:[bx]"
    好的,问题来了,cs:0,或者cs:[bx]中的0,或者[bx],是指IP吗?
    若是,那以前我们还学过,指令执行一条结束后,IP自动加上指令的长度并且执行下一条,那为什么还要我们编写程序“add bx,2”来人工加2?那就显然不是指IP...
    若不是指IP。那cs:0,cs:[bx]中的偏移地址0和[bx]是谁指向的?他们作为数据存在代码段段地址在cs中存放我能理解。。但是这段数据的偏移地址用谁指向?

     问题二:标号,就是“start:”,“s:”等,他们表示程序开始执行的入口,那是不是表明cs:IP在执行程序时就只指向那里?


      问题三:cs只能和IP使用吗?若是,那cs:0中的0只能是IP喽 ?那就和IP自动加上指令长度产生矛盾了。。
  
      我可能钻进牛角尖了。。困扰我好多天百思不解。。。这阻碍我向下学习的顺畅。。。我觉得这是我学习汇编链条上的一个结,解开的话就顺畅了。。。。。
      

谢鱼老师。。哇哇

评分

参与人数 1荣誉 +6 收起 理由
loop + 6 再接再厉~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-14 14:10:22 | 显示全部楼层
貌似我当时也钻过这个牛角尖,但是现在木有啦,为什么呢。我回答不了你的问题。
但我就我的感觉来说下
你说之前的章节介绍过IP会自动增加,应该是第2章的CS:IP内容吧,你仔细看看,实际上还是在介绍代码的运行,一句接着一句,体现在Debug程式里,就是地址一个接一个往下,刚好当时是增加了2,因为那个MOV,AX,6622H之类的也就占个2个字节。代码自动执行,当然cs:ip ip就会变。但这个变意思就是说代码在往下执行!

而6.1例题中cs:[bx]是指 cs:bx地址处的字型数据,add ax,cs:[bx] 使用了cs:bx处的数据ax寄存器中数据相加并存放在ax寄存器。 add bx,2则是指向下一个字型数据的操作。

哎 乱七八糟的 你就将就着理解,万一还是不理解 千万可别在钻!

评分

参与人数 2荣誉 +4 收起 理由
小甲鱼 + 2 助人为乐~
loop + 2 乐于助人~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-14 14:14:45 | 显示全部楼层
gemen哥们你打字速度老快了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-14 14:27:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-14 18:42:12 | 显示全部楼层
问题一:这里估计还没有学到ds数据段吧?因为这里cs段同时存放两样东西,数据和指令,数据正如cs:[bx]来索引,而指令是cs:ip索引,cs:ip我们不用去改变它,它自动会递增的。您可能误会了一位cs:[bx]是指向指令的?对吧?您可以这么测试下,观察ip的值,看他是否等于bx的值。

问题二:YES,标号只是翻译成一个地址,由end 标号来告诉系统你的程序在标号处(地址)开始的。

问题三:cs当然可以和其他配合,像刚才把数据和代码都放在cs段,您可以cs:[bx]指向数据,cs:ip指向指令。呵呵没错,8086时代没有保护机制,所以您可以尽情乱搞~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-14 20:41:07 | 显示全部楼层
回复 5# 小甲鱼


    :D :victory: 谢老师,懂啦。哈哈,老师英明
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-14 20:41:58 | 显示全部楼层
回复 4# shangyl00


    我懂啦。你呢?不懂得话,下面有老师的解答。。。看看跟你想的有什么差别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-15 08:47:36 | 显示全部楼层
本帖最后由 shangyl00 于 2011-4-15 08:54 编辑
回复  shangyl00


    我懂啦。你呢?不懂得话,下面有老师的解答。。。看看跟你想的有什么差别
小广哥 发表于 2011-4-14 20:41



    汗颜啊,我那是民间说法~  不过我们需要加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 14:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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