问题求解
本帖最后由 china0008 于 2011-2-27 15:44 编辑assume cs:codesg
codesgsegment
mov ax,0020h
mov ds,ax
mov bx,0
mov dl,0
mov cx,40h
s: mov ,dl
inc dl
inc bx
loop s
mov ax,4c00h
int21h
codesg ends
end
这段代码是实验4的答案 题目的要求是向内存0:200~0:230F依次传送数据0~63
我想问一下
(1)为什么答案中采用DL
(2)为什么循环开始是是要将DL中的数据送入
(3)为什么在循环的时候写入inc
希望各位老鸟指点迷津 先行谢过
本文来自:鱼C工作室<a href=http://www.fishc.com>详细出处参考:http://www.fishc.com/a/kehouti/_huibianyuyan_/828.html 本帖最后由 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 有对操作数长度匹配的要求。 老鸟不敢当。。说下我的理解
1.答案中采用dl是根据个人喜好,也可以用al,但是不能用cl ,因为cx用于循环了,会改变cl的值。
2.循环开始将dl的数据送入就是执行了将0~63送入内存0:200~0:230的操作。dl存放数据0~63,而指向的是0:200。
3.inc是加1的意思,第一个传送了0,第二个应该传送1,所以inc dl让dl等于1,inc bx是改变偏移地址让地址指向下一个空间就是0:201,以此类推执行完程序,就可以把0~63传送到0:200~0:230 谢谢各位的解答 1.L和H从0开始就是L
2.把偏移地址为0的段地址设置为0
3.inc=1+1偏移地址和值都自增1
页:
[1]