再生缘 发表于 2011-9-12 18:39:38

第五章的课后题

本帖最后由 再生缘 于 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:41:26

本帖最后由 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才是.


再生缘 发表于 2011-9-13 16:20:12

ytrfamli 发表于 2011-9-12 21:41 static/image/common/back.gif
1.
mov ax,0200h
使得数据写到内存2000h的位置去了,


嗯 几个错了但是我debug了下 发现0-63都有被写入内存

再生缘 发表于 2011-9-13 16:32:14

我这个虽然地址是0200的段地址 但是有写入0-64h到内存啊

ytrfamli 发表于 2011-9-13 16:42:38

本帖最后由 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

因此才提出来.

再生缘 发表于 2011-9-13 16:54:02

ytrfamli 发表于 2011-9-13 16:42 static/image/common/back.gif
>>我这个虽然地址是0200的段地址 但是有写入0-64h到内存啊
恩,LZ如此编写,具体说来是可以运作的,只是我看L ...

哦 这个我承认我太大意了 mov ,bx这个虽然是高位是会被覆盖 但是应该不影响结果吧

ytrfamli 发表于 2011-9-13 17:07:55

>>这个虽然是高位是会被覆盖 但是应该不影响结果吧
确是如此.请参考#2楼 第2点,尾巴有提到.

再生缘 发表于 2011-9-13 17:22:32

谢谢

深蓝 发表于 2011-9-13 21:31:17

学习~~~~~~~~~~~~~~~~
页: [1]
查看完整版本: 第五章的课后题