汇编语言王爽第四版17.3完程可运行可调试

汇编语言王爽第四版17.3节完整程序,可调试,可运行。

最基本的字符串输入程序,具备以下功能:

1、在输入的同时需要显示这个字符串;

2、输入回车符后,一个字符串的输入结束;

3、能够删除已经输入的字符。

完整程序代码如下,可运行,可调试:

assume cs:code,ds:data

data segment

	keys db 256 dup(0)

data ends

code segment

start:
	mov ax,data
	mov ds,ax
	mov dh,10
s:	
	mov si,offset keys
	mov di,si
	mov dl,12
	call getStr
	inc dh
	cmp byte ptr [di],'q'
	jne s
	cmp byte ptr [di+1],0
	je exit
	jmp s
exit:
	mov ax,4c00h
	int 21h
		
getStr:
	push ax
getStrLoop:
	mov ah,0
	int 16h
	cmp al,20h
	jb getStrCtrl
	mov ah,0
	call charStack
	mov ah,2
	call charStack
	jmp getStrLoop
getStrCtrl:
	cmp ah,0eh
	je getStrBack
	cmp ah,1ch
	je getStrEnter
	jmp getStrLoop
getStrBack:
	mov ah,1
	call charStack
	mov ah,2
	call charStack
	jmp getStrLoop
getStrEnter:
	mov al,0
	mov ah,0
	call charStack
	mov ah,2
	call charStack
	mov ah,3
	call charStack
	pop ax
	ret

charStack:
; 功能:字符栈的入栈、出栈和显示
; 参数:(ah)=功能号,0表示入栈,1表示出栈,2表示显示, 3表示初始化
; 		ds:si指向字符栈空间
;		对于0号功能:(al)=入栈字符
; 		对于1号功能:(al)=返回的字符
; 		对于2号功能:(dh)、(dl)=字符串在屏幕上显示的行、列位置。
	jmp short charStart
	table 	dw	charPush, charPop, charShow, charInit
	top		dw	0		;栈顶
charStart:
	push bx
	push dx
	push di
	push es
	
	cmp ah,3
	ja charRet
	mov bl,ah
	mov bh,0
	add bx,bx
	jmp word ptr table[bx]

charPush:
	mov bx,top
	mov [si][bx],al
	inc top
	jmp charRet

charPop:
	cmp top,0
	jbe charRet
	dec top
	mov bx,top
	mov al,[si][bx]
	jmp charRet

charShow:
	mov bx,0b800h
	mov es,bx
	mov al,160
	mul dh
	mov di,ax
	add dl,dl
	mov dh,0
	add di,dx

	mov bx,0
charLoop:
	cmp bx,top
	jne charNext
	mov byte ptr es:[di],' '
	jmp charRet
charNext:
	mov al,[si][bx]	
	mov es:[di],al
	mov byte ptr es:[di+1],2
	mov byte ptr es:[di+2],' '
	inc bx
	add di,2
	jmp charLoop
charInit:
	mov top,0

charRet:
	pop es
	pop di
	pop dx
	pop bx
	ret 

code ends

end start

编译、运行:

C:\>masm pg02;
C:\>link pg02;
C:\>pg02
C:\>

界面操作:

1、输入的字符串将在屏幕10行12列位置显示;
2、可以用退格键删除末尾的字符;
3、回车键结束当前字符串;
4、从下一行开始进行下一个字符串的输入;
5、输入:q<CR>,即字符'q'+回车键,就可以退出程序。

运行效果如下图所示

(全文完)

相关推荐
Crossoads8 天前
【汇编语言】内中断(二) —— 安装自己的中断处理程序:你也能控制0号中断
android·开发语言·数据库·人工智能·深度学习·机器学习·汇编语言
Crossoads20 天前
【汇编语言】标志寄存器(一) —— 标志寄存器中的标志位:ZF、PF、SF、CF、OF 一网打尽
android·开发语言·数据库·人工智能·深度学习·机器学习·汇编语言
同志啊为人民服务!21 天前
深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接
汇编·预处理·链接·编译·汇编语言·高级语言·可执行文件装载过程
Crossoads1 个月前
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
android·开发语言·数据库·人工智能·机器学习·数据挖掘·汇编语言
Crossoads1 个月前
【汇编语言】更灵活的定位内存地址的方法(二)—— 从 [bx+idata] 到 [bx+si+idata]:让你灵活的访问内存
android·java·服务器·网络协议·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析
android·java·开发语言·数据库·机器学习·汇编语言
CYRUS_STUDIO1 个月前
Android下的系统调用 (syscall),内联汇编syscall
android·linux·汇编语言
我不是程序猿儿1 个月前
【数据结构】汇编语言和机器语言的‘数据结构‘
开发语言·数据结构·汇编语言·机器语言
CYRUS_STUDIO1 个月前
Android 下内联汇编,Android Studio 汇编开发
android·汇编语言
Crossoads2 个月前
【汇编语言】第一个程序(三)—— 深度剖析汇编程序的执行流程:编辑、编译、连接与运行
android·java·开发语言·数据库·网络协议·机器学习·汇编语言