1 data segment 2 ;定义字符串缓冲区 3 ;MAXLEN 表示允许输入的最大字符数量 4 ;ACTLEN 表示实际输入的数量 5 ;STR 用于存储输入的字符串 6 ;以下面为例,允许最大输入5个字符,如果STR后面的长度也定义为5,则实际输入的字符数量仅为4, 7 ;因为最后一个字符会用于存储0Dh(回车符号) 8 ;例如:输入"1234",然后回车,此时内存的情况为: 05 00 31 32 33 34 0D 9 ;因此,为了满足实际的最大数量,通常将MAXLEN定义得比实际的多1个。 10 MAXLEN db 6 ;允许最大长度 11 ACTLEN db 0 ;实际长度 12 STR dw 6 dup('') ;存放字符串 13 ;提示语句 14 PROMPT1 db 0DH,0AH,"Please input a string:$" 15 PROMPT2 db 0DH,0AH,"Your string is :$" 16 CHOOSE db 0DH,0AH,"chose 1 or 2:$" 17 ends 18 19 code segment 20 start: 21 ;设置数据段寄存器 22 mov ax, data 23 mov ds, ax 24 input: 25 ;提示输入,提示语句位于ds:dx处 26 lea dx, CHOOSE 27 mov ah, 9 28 int 21h 29 mov ah,01H ;输入跳转 30 int 21h 31 cmp al,31H 32 mov dl,0AH 33 mov ah,02H 34 int 21h 35 mov dl,0DH 36 mov ah,02H 37 int 21h 38 jz tosmall 39 jmp tobig 40 tosmall: 41 call input_str 42 mov si,0;指针 43 mov cl,ACTLEN;循环次数 44 mov ch,0 45 call tosmall_print 46 jmp next 47 tobig: 48 call input_str 49 mov si,0;指针 50 mov cl,ACTLEN;循环次数 51 mov ch,0 52 call tobig_print 53 jmp next 54 next: 55 JMP input 56 ;返回操作系统 57 mov ax, 4c00h 58 int 21h 59 ends 60 ;--------------------- 61 tosmall_print proc near 62 ;输出结果的提示语句 63 lea dx,PROMPT2 64 mov ah, 9 65 int 21h 66 xunhuan1: 67 mov ax,STR[si] 68 cmp al,5BH 69 jnb nochange 70 add ax,20H 71 nochange: 72 mov dl,al 73 mov ah,02H 74 int 21H 75 inc si ;加1不影响cf 76 loop xunhuan1 77 ret 78 tosmall_print endp 79 ;--------------------- 80 tobig_print proc near 81 ;输出结果的提示语句 82 lea dx,PROMPT2 83 mov ah, 9 84 int 21h 85 xunhuan2: 86 mov ax,STR[si] 87 cmp al,5BH 88 jnb nochange2 89 add ax,20H 90 nochange2: 91 sub ax,20H 92 mov dl,al 93 mov ah,02H 94 int 21H 95 inc si ;加1不影响cf 96 loop xunhuan2 97 ret 98 tobig_print endp 99 ;--------------------- 100 input_str proc near 101 ;调用AH=0ah的21H中断程序,获取输入的字符串; 102 ;(ds:dx)=缓冲区最大字符数 103 ;(ds:dx+1)=实际输入字符数 104 ;ds:dx=缓冲区首址 105 lea dx,MAXLEN 106 mov ah,0ah 107 int 21h 108 109 ;取得实际输入的字符串数目 110 mov bl,ACTLEN 111 mov bh,0 112 ;将结尾处改为'$'以便调用AH=09H功能,即输出刚输入的字符串 113 mov STR[bx],'$' 114 ret 115 116 lea dx, PROMPT1 117 mov ah, 9 118 int 21h 119 ret 120 input_str endp 121 ;------------------------ 122 end start ; set entry point and stop the assembler.