第五章的课后题
本帖最后由 再生缘 于 2011-9-13 17:22 编辑(2) 编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4c00h”和“int 21h”
assume cs:code
code segment
mov ax,0200h
mov ds,ax
mov bx,0
mov cx,40h
s: mov ,bx
inc bx
loop s
mov 4c00h
int 21h
code ends
end
不知道这个程序对不对呢
本帖最后由 ytrfamli 于 2011-9-12 21:49 编辑
1.
mov ax,0200h
使得数据写到内存2000h的位置去了,
ds=0200h时,算出的内存段地址是
200h*10h=2000h.
改为
mov ax,0020h
使得算出的段地址成为
0020h*10h=0200h
才能写到正确位置
2.
mov ,bx
一次写入2个byte,但是,每一次回圈bx只增加1,(影响指向的地址)
也就是说,想要写入的数据是一路盖掉上一次的数据的,即
bx=0000h时,写入,则内存
0200:0被写入00(低位的bl)
0200:1被写入00(高位的bh)
接着bx=0001h时,写入,则内存
0200:1被写入01(低位的bl)
0200:2被写入00(高位的bh)
改成
mov ,bl
就不会如此,一次只写入1个byte
(不过,此处不作修改结执行果依然会是正确的,
因为刚好想要写进的数据都是在低位的bl,
高位的bh被覆盖没有影响)
3.
mov 4c00h
这恩,不算什麽bug,只是少写了ax.
应为mov ax,4c00h才是.
ytrfamli 发表于 2011-9-12 21:41 static/image/common/back.gif
1.
mov ax,0200h
使得数据写到内存2000h的位置去了,
嗯 几个错了但是我debug了下 发现0-63都有被写入内存 我这个虽然地址是0200的段地址 但是有写入0-64h到内存啊 本帖最后由 ytrfamli 于 2011-9-13 16:43 编辑
>>我这个虽然地址是0200的段地址 但是有写入0-64h到内存啊
恩,LZ如此编写,具体说来是可以运作的,只是我看LZ的题目是
编程,向内存0:200~0:23F依次传送数据0~63
也就是说
编程,向内存0020:0~0020:3F依次传送数据0~63,而不是
编程,向内存0200:0~0200:3F依次传送数据0~63
因此才提出来.
ytrfamli 发表于 2011-9-13 16:42 static/image/common/back.gif
>>我这个虽然地址是0200的段地址 但是有写入0-64h到内存啊
恩,LZ如此编写,具体说来是可以运作的,只是我看L ...
哦 这个我承认我太大意了 mov ,bx这个虽然是高位是会被覆盖 但是应该不影响结果吧 >>这个虽然是高位是会被覆盖 但是应该不影响结果吧
确是如此.请参考#2楼 第2点,尾巴有提到. 谢谢 学习~~~~~~~~~~~~~~~~
页:
[1]