
8086汇编语言中如何清空缓冲区里的字符串?
2个回答
展开全部
最简单的就是往那个缓冲区送一堆零过去,通常将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 这种方法速度都要慢一下。
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 这种方法速度都要慢一下。
追问
有没有一种方法是在键盘输入后,内存读取完,缓冲区会清空?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |