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

一、实习目的

   握字符和数据的显示方法

二、实习内容

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

四、运行结果


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的单片机字符LCD1602显示汇编程序的例子: ``` ; LCD1602显示汇编程序 ; 适用于AT89C51或类似的单片机 ORG 0H ; 程序起始地址 MOV P0, #38H ; 初始化LCD命令 CALL DELAY ; 延时 MOV P0, #0FH ; 显示开、光标开、闪烁开 CALL DELAY ; 延时 MOV P0, #06H ; 光标右移 CALL DELAY ; 延时 MOV P0, #01H ; 清屏 CALL DELAY ; 延时 MOV P0, #80H ; 显示位置设为第一行第一列 CALL DELAY ; 延时 MOV A, #'H' ; 显示字符H CALL LCD_WR ; 写入LCD MOV P0, #81H ; 显示位置设为第一行第二列 CALL DELAY ; 延时 MOV A, #'E' ; 显示字符E CALL LCD_WR ; 写入LCD MOV P0, #82H ; 显示位置设为第一行第三列 CALL DELAY ; 延时 MOV A, #'L' ; 显示字符L CALL LCD_WR ; 写入LCD MOV P0, #83H ; 显示位置设为第一行第四列 CALL DELAY ; 延时 MOV A, #'L' ; 显示字符L CALL LCD_WR ; 写入LCD MOV P0, #84H ; 显示位置设为第一行第五列 CALL DELAY ; 延时 MOV A, #'O' ; 显示字符O CALL LCD_WR ; 写入LCD JMP $ ; 循环等待 ; LCD写入子程序 LCD_WR: MOV P2, A ; 将要显示字符写入P2口 SETB P0.1 ; RS=1,选择数据寄存器 CLR P0.0 ; RW=0,写操作 SETB P0.2 ; E=1,使能信号 NOP ; 稍作延时 CLR P0.2 ; E=0,停止使能信号 RET ; 延时子程序 DELAY: MOV R2, #255 D1: MOV R1, #255 D2: DJNZ R1, D2 DJNZ R2, D1 RET ``` 该程序使用P0口连接LCD1602,并实现了在第一行显示"HELLO"的功能。其中,LCD_WR子程序用于将字符写入LCD,DELAY子程序用于延时。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值