将0020:0 ff之间的256个内存单元清空,该怎么解决

将0020:0 ff之间的256个内存单元清空
这是我做的 王爽汇编实验4(2) 答案: 
Assembly code
assume cs:code 

code segment 
      
     mov ax,0020h 
     mov ds,ax 

     mov bx,0 

     mov cx,64 
s:   mov [bx],bx 
     inc bx 
     loop s 

     mov ax,4c00h 
     int 21h 

code ends 

end 

测试通过 

由此我联想到,因为经常要使用0020:0 ff这段空间测试数据,那么我就编个清0的程序方便以后分析情况,如下: 
Assembly code
assume cs:code 

code segment 
      
     mov ax,0020h 
     mov ds,ax 

     mov bx,0 
     mov ax,0 

     mov cx,256 
s:   mov [ax],bx 
     inc ax 
     loop s 

     mov ax,4c00h 
     int 21h 

code ends 

end 

可是编译不通过,错误A2048:Must be index or base register 
请问是怎么一回事啊?

另外麻烦大家来这里顶下,没人回复我结不了帖
http://topic.****.net/u/20120413/19/4f45f69d-b871-43cc-8da8-d5771051ff8f.html

------解决方案--------------------
探讨
引用:
引用:
谢谢1、2楼解答

我改了但还是不对

而且如果按你们的改法,那么256个单元就变成0~255了,我需要全部置为0


将AX换成 SI or DI 吧

能不能讲下原理呢?或者说我后面就能学到?
源码直接改可以吗?

------解决方案--------------------
关于寄存器的寻址,教科书里面已经写得很清楚了。
------解决方案--------------------
mov ax,0020h
mov es,ax
.386
xor eax,eax
mov cx,64 ;256/4
mov di,0 ;偏址
rep stos dword ptr [es:di]


------解决方案--------------------
不好意思,直接写的代码,没上机,有点小错误,修改后
Assembly code

assume cs:code 

code segment 

     mov ax, 0020h     
     mov ds, ax         ;设置目标数据段基址

     mov cx, 256        ;设置循环次数
     xor di, di            ;设置目标数据段内的偏移
s:   mov byte ptr [di], 0        ;向ds:[di]所指向的内存中写入0
     inc di                ;增加偏移
     loop s             ;循环

     mov ax,4c00h         
     int 21h             ;退出程序

code ends 

end