8086汇编语言中如何清空缓冲区里的字符串?

 我来答
gzgzlxg
推荐于2017-09-04 · TA获得超过948个赞
知道小有建树答主
回答量:406
采纳率:100%
帮助的人:106万
展开全部
最简单的就是往那个缓冲区送一堆零过去,通常将CX设置成缓冲区的长度,将AL清零,然后使用重复字符串操作指令来清空缓冲区:
MOV CX, LEN ;缓冲区的长度,以字节为单位
LEA DI, STR_BUFF ;缓冲区首地址送如 DI 寄存器
XOR AL, AL ;AL 清零
REPZ STOSB ;重复至CX等于0
如果缓冲区巨大,可以送字过去,这样可以加快运行速度:
MOV BX, LEN ;缓冲区长度
MOV CL, 2
SHR BX, CL ;缓冲区长度除以2,得到缓冲区的字长度
MOV CX, BX ;送入CX计数器
LEA DI, STR_BUFF ;字符串缓冲区首地址送如DI寄存器
XOR AX, AX ;AX寄存器清零
REPZ STOSW ;重复至CX等于0
有时候还要考虑缓冲区是奇数,即缓冲区执行上诉代码后,还有一个字节没有处理,这时候,需要多加几句。
XOR DX, DX
MOV BX, LEN
TEST BX, 1
JZ L1
MOV DX, 0FFH ;做标记,指明字符串是奇数
L1:

MOV CL, 2
SHR BX, CL ;缓冲区长度除以2,得到缓冲区的字长度
MOV CX, BX ;送入CX计数器
LEA DI, STR_BUFF ;字符串缓冲区首地址送如DI寄存器
XOR AX, AX ;AX寄存器清零
REPZ STOSW ;重复至CX等于0
CMP DX, 0FFH
JNZ EXIT
STOSB
EXIT:
......
还有许多其他的方法,但是效率最高的就是这个了,其他利用LOOP等循环指令或CMP CX, 0,JNZ xx 这种方法速度都要慢一下。
追问
有没有一种方法是在键盘输入后,内存读取完,缓冲区会清空?
做而论道
高能答主

2015-06-16 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.1万
采纳率:82%
帮助的人:8468万
展开全部
在开始位置,写上结束符,即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式