将0020:0 ff之间的256个内存单元清空

i945800687 2012-05-20 08:48:55
这是我做的 王爽汇编实验4(2) 答案:
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的程序方便以后分析情况,如下:
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.csdn.net/u/20120413/19/4f45f69d-b871-43cc-8da8-d5771051ff8f.html
...全文
133 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgw888 2012-05-27
  • 打赏
  • 举报
回复
assume cs:code

code segment

mov ax, 0020h
mov ds, ax

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

mov ax,4c00h
int 21h

code ends

end
sgw888 2012-05-27
  • 打赏
  • 举报
回复
引用
assume cs:code

code segment

mov ax, 0020h
mov ds, ax

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

mov ax,4c00h
int 21h

code ends

end

这样就可以吧。
i945800687 2012-05-27
  • 打赏
  • 举报
回复
谢谢各位的解答,看了 -12 的代码,确实是还没学到,以后再来复习!
Tishion 2012-05-27
  • 打赏
  • 举报
回复
不好意思,直接写的代码,没上机,有点小错误,修改后

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

gsy999 2012-05-27
  • 打赏
  • 举报
回复
mov ax,0020h
mov es,ax
.386
xor eax,eax
mov cx,64 ;256/4
mov di,0 ;偏址
rep stos dword ptr [es:di]

Tishion 2012-05-26
  • 打赏
  • 举报
回复
我是冲着这100分来的

assume cs:code

code segment

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

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

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

code ends

end

i945800687 2012-05-26
  • 打赏
  • 举报
回复
顶上来

另拜托各位能写出一段实现源码
BAYNPU 2012-05-22
  • 打赏
  • 举报
回复
关于寄存器的寻址,教科书里面已经写得很清楚了。
i945800687 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
谢谢1、2楼解答

我改了但还是不对

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


将AX换成 SI or DI 吧
[/Quote]
能不能讲下原理呢?或者说我后面就能学到?
源码直接改可以吗?
WJN92 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
谢谢1、2楼解答

我改了但还是不对

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

将AX换成 SI or DI 吧
i945800687 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
在以前的汇编中,只有 BX SI DI SP BP 能访问内存
现在好像没有这个限制[/Quote]
呃,现在只会用BX
这样,先等几天,我学到后面那几个寄存器再来看帖子
WJN92 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
引用 3 楼 的回复:
谢谢1、2楼解答

我改了但还是不对

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


将AX换成 SI or DI 吧

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

在以前的汇编中,只有 BX SI DI SP BP 能访问内存
现在好像没有这个限制
i945800687 2012-05-20
  • 打赏
  • 举报
回复
谢谢1、2楼解答

我改了但还是不对

而且如果按你们的改法,那么256个单元就变成0~255了,我需要全部置为0
BAYNPU 2012-05-20
  • 打赏
  • 举报
回复
s: mov [ax],bx ;寄存器寻址都搞错了,应该是:mov [bx],bx 这才对。
inc bx
WJN92 2012-05-20
  • 打赏
  • 举报
回复
mov [ax],bx

不能使用AX作为间接寻址的寄存器

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧