鱼C论坛

 找回密码
 立即注册
查看: 3103|回复: 4

问题求解

[复制链接]
发表于 2011-2-27 14:44:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 china0008 于 2011-2-27 15:44 编辑

assume cs:codesg
 
 codesg  segment
                                 mov ax,0020h
                 mov ds,ax 
                 mov bx,0
                 mov dl,0
                 mov cx,40h

                        s:      mov [bx],dl
                         inc dl
                 inc bx
                 loop s
                 
                 mov ax,4c00h
                 int  21h
                 
        codesg ends
        end 
这段代码是实验4的答案   题目的要求是向内存0:200~0:230F依次传送数据0~63
我想问一下  
(1)为什么答案中采用DL
(2)为什么循环开始是是要将DL中的数据送入[bx]
(3)为什么在循环的时候写入inc
   希望各位老鸟指点迷津    先行谢过

本文来自:鱼C工作室<a href=http://www.fishc.com>  详细出处参考:http://www.fishc.com/a/kehouti/_huibianyuyan_/828.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-27 15:48:43 | 显示全部楼层
本帖最后由 china0008 于 2011-2-27 15:51 编辑

这里 dl  就是0-63的数据啊。 采用dl 8位寄存器为的是与内存单元长度匹配。
inc dl  就是相当于  add dl,1  (用于表示0-63)

循环的开始  dl 的值是0,所以直接写入目标地址,写入后吧dl+1   

inc bx    bx是指向数据的目标存储单元。每加1 就指向下一个存储单元。  如果不加1,你这0-63的数据都写在相同的内存单元。最后得到结果是 bx指向的单元中只有63一个值。

没有读懂这段源码的原因是 没有搞清楚各个寄存器的含义,对基础知识了解不过透彻  比如 mov 有对操作数长度匹配的要求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-27 15:55:57 | 显示全部楼层
老鸟不敢当。。说下我的理解
1.答案中采用dl是根据个人喜好,也可以用al,但是不能用cl ,因为cx用于循环了,会改变cl的值。
2.循环开始将dl的数据送入[bx]就是执行了将0~63送入内存0:200~0:230的操作。dl存放数据0~63,而[bx]指向的是0:200。
3.inc是加1的意思,第一个传送了0,第二个应该传送1,所以inc dl让dl等于1,inc bx是改变偏移地址让地址指向下一个空间就是0:201,以此类推执行完程序,就可以把0~63传送到0:200~0:230
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-27 16:09:02 | 显示全部楼层
谢谢各位的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 22:31:10 | 显示全部楼层
1.L和H从0开始就是L
2.把偏移地址为0的段地址设置为0
3.inc=1+1偏移地址和值都自增1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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