• 汇编语言王爽第四版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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138

    编译、运行:

    C:\>masm pg02;
    C:\>link pg02;
    C:\>pg02
    C:\>
    
    • 1
    • 2
    • 3
    • 4

    界面操作:

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

    运行效果如下图所示
    汇编语言王爽第四版17.3完程

    (全文完)

  • 相关阅读:
    前端面试题小结
    miRNA测序数据生信分析——第三讲,已知物种的生信分析实例
    C++笔记1(数组,冒泡排序,二维数组,函数,指针,结构体)
    2023百度之星 题目详解 公园+糖果促销
    Redis 八种常用数据类型详解
    使用huggingface的text embedding models
    乐高Studio打开Solidworks零件/装配体 (sw另存obj文件)
    智慧厕所解决方案给生活带来了什么好处?
    AUTOSAR-UDS诊断
    Empire(三)域内渗透
  • 原文地址:https://blog.csdn.net/ycjnx/article/details/134071261