鱼C论坛

 找回密码
 立即注册
查看: 2946|回复: 2

程序6.1的问题

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

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

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

x
本帖最后由 loop 于 2011-4-16 01:54 编辑

程序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自动加上指令长度产生矛盾了。。
  
      我可能钻进牛角尖了。。困扰我好多天百思不解。。。这阻碍我向下学习的顺畅。。。我觉得这是我学习汇编链条上的一个结,解开的话就顺畅了。。。。。
      


       求高人!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-14 13:53:00 | 显示全部楼层
本帖最后由 shangyl00 于 2011-4-14 14:07 编辑

貌似我当时也钻过这个牛角尖,但是现在木有啦,为什么呢。我回答不了你的问题。
但我就我的感觉来说下
你说之前的章节介绍过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则是指向下一个字型数据的操作。

哎 乱七八糟的 你就将就着理解,万一还是不理解 千万可别在钻!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-16 20:21:16 | 显示全部楼层
CS:[bx]到底是指数据还是指令。其实都可以的。但是在你的这个程序中,指的是数据的偏移地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-29 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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