一、实习目的
掌握字符和数据的显示方法。
二、实习内容
先显示信息“INPUT STRING THE END FLAG IS $”再接受字符如为0~9则计数器加1并显示数据。如为非数字,则直接显示但不计数。
三、代码
data segment
result dw 0; ;保存转换结果
msgOne db 'INPUT STRING THE END FLAG IS ','$'
msgTwo db 0ah,0dh,'0 - 9 character number in the string is:','$'
nxtLine db 0ah,0dh,'$' ;回车换行
string db 0ah,0dh,'the string is:',100 dup(?)
c10 db 10;
data ends
myStack segment stack
db 100 dup(?)
myStack ends
code segment
assume DS:data,CS:code
start:
mov ax,data;
mov DS,ax;
lea dx,msgOne; 输出提示信息
mov ah,09h;
int 21h;
mov dl,'$'
mov ah,02h;
int 21h;
lea dx,nxtLine;
mov ah,09h;
int 21h;
mov bx,16;
mov cx,0;
input: ;将键盘输入的字符串存储在string中
mov ah,01h;
int 21h;
mov string[bx],al;
cmp al,'$'; 如果输入字符为'$',则结束输入
jz outInput
cmp al,'0'; 如果输入字符不是数字,则转至 next: 处
jb next
cmp al,'9'
ja next
inc cx;
next:
inc bx;
jmp input
outInput:
lea dx,string; 输出字符串string
mov ah,09h;
int 21h;
lea dx,msgTwo; 输出字符串msgTwo
mov ah,09h;
int 21h;
mov ax,cx; 将cx转换为对应数字字符的ASCII,压入stack中
mov dh,0;
mov cx,0;
changeToDec:
mov ah,0;
cmp al,0;
jz outChangeToDec;
div c10;
mov dl,ah;
push dx;
inc cx;
jmp changeToDec
outChangeToDec:
cmp cx,0;
jz endPro; 如果没有数据压入栈,说明字符串中无数字字符
jnz outputResult; 如果有数据压入栈,说明字符串中有数字字符
endPro: ;输出'0',并跳转至last
mov dl,'0'
mov ah,02h;
int 21h;
jmp last;
outputResult: ;将压入栈中的字符输出
pop dx;
add dl,30h;
mov ah,02h;
int 21h;
loop outputResult
last:
mov ah,4ch; 程序结束
int 21h;
code ends
end start
四、运行结果