首页 > 代码库 > 汇编-字符和数据的显示程序

汇编-字符和数据的显示程序

一、实习目的

   握字符和数据的显示方法

二、实习内容

    先显示信息“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

四、运行结果



汇编-字符和数据的显示程序