汇编王爽老师,17.3 ,字符串的输入

  本程序的课本排版,并不到位,太多标号,没有缩进,阅读体验呢?而且有些地方有待改进,程序也能正确执行
  网上这位大师讲解的很不错。网址是
https://blog.csdn.net/shaco_/article/details/105677400?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1
就是咱csdn的文章。
  所以我就不讲解书上的代码了。我的代码又做了大的更改:取消了课本charstack 段,由标号getstr直接调用charpush charpop 。代码逻辑如下图:
在这里插入图片描述
代码如下,这样程序更简练

assume cs:code,ds:data
data segment
	db 200 dup (0);存储字符串的栈段,非系统栈ss:sp,由ds:[bx]指向
data ends

code segment
main:
	mov ax,data
	mov ds,ax;不给字符栈设置访问偏移量,以后由 标号num给出	
	
	mov dh,9
	mov dl,2;       设置屏幕上字符串的显示位置
	
	call getstr;     调用输入字符串子程序
	mov ax,4c00h
	int 21h

	getstr:   ;该子程序完成从键盘缓冲区取字符,另调用三个子程序
		   ;完成字符串的入栈,出栈和显示
		jmp start
		num    dw 0;更应该理解为栈中字符数目

		start:
			push ax
			push bx
			push dx
			push es 
			push di
	
			mov bx,0b800h
			mov es,bx
			mov al,160
			sub ah,ah
			mul dh
			mov di,ax
			add dl,dl
			sub dh,dh
			add di,dx;设置字符串起始显示位置,es:[di]数值今后将不再改变
	
		readbuff:
			mov ah,0
			int 16h
	
			cmp al,20h;20h为空格,其前都为不可显示字符
			jb notchar
			jmp charpush
		
		notchar:
			cmp ah,0eh;退格键
			je charpop
			cmp ah,1ch;enter key
			je dealok	
			
			
		charpush:
			mov bx,num
			mov ds:[bx],al
			inc num
			jmp charshow
		
		charpop:
			cmp num,0
			je readbuff
			dec num
			jmp charshow
		
		charshow:
			mov ah,3fh;设置显示字符属性
			mov bx,0
			push di
			showlp:
				cmp bx,num
				jne noempty
				mov al,' '
				mov es:[di],ax;空字符
				pop di
				jmp readbuff
	
				noempty:
				mov al,ds:[bx]
				mov es:[di],ax
				inc bx
				add di,2
			jmp showlp	
	
		dealok:
			mov bx,num
			mov byte ptr ds:[bx],0;给字符串的末尾加0
			
			pop di
			pop es 
			pop dx
			pop bx
			pop ax	
	ret;结束程序,不再接收字符
code ends
end main

测试效果如下:
在这里插入图片描述
谢谢阅读

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值