汇编:统计输入字符串内的数字个数(最多三位数0—256)

发布者:SerendipityLove最新更新时间:2015-05-25 来源: 51hei关键字:汇编  统计输入  字符串 手机看文章 扫描二维码
随时随地手机看文章
;This is made by wq  
;编程从键盘读入不超过256个字符的字符串;
;编程统计其中数字的个数,并将结果在屏幕上输出。
;经进一步完善(能输出三位数啦)


DATAS SEGMENT
    sum    db 00h    ;累加器 
    string db 256 dup(0dh);存放字符
    tital  db  'This program is made by wq.',0dh,0ah
           db  'It is used to calculater the amout of the number in the string ',0dh,0ah,'$'
    tital1 db  'PLease input the string: ','$'
    overs  db  'Amout of the nember is : ','$'
    tital2 db  'Do you want to have a try again(if yes,input "y" else "n") : ',0dh,0ah, '$'
    tital3 db  'Welcome to use this program again','$'
    kongzi db 0dh,0ah,'$'
    result db 256 dup(?)   
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
   
    mov ax,offset tital;输出抬头
    mov dx,ax
    mov ah,09h
    int 21h
main:
       lea dx,kongzi
       mov ah,09h
       int 21h
       lea dx,tital1   ;输出抬头1
       mov ah,09h
       int 21h
   
    mov si,0
    mov ax,offset string
    mov dx,ax
again:           ;输入字符
    mov ah,01h
    int 21h
    cmp al,0dh
    jz then
    mov string[si],al
    inc si
    jmp again    ;输入完毕
then:          ;传输
    mov di,0     
    mov si,0
    mov bl,0
exchang:              ;判断字符的性质
     lea dx,string
     cmp string[si],0dh    
     jz over
     cmp string[si],30h
     jnb next
     inc si
    dec cx
    jmp exchang
next:                      
    mov al,string[si]
    cmp string[si],39h 
    jbe calculator
    inc si
    dec cx
    jmp exchang[page]
  
calculator:
     lea dx,result
     mov result[di],al
    inc si
    inc sum
    inc di
    dec cx
    jmp exchang   
over:                   ;处理并输出数字个数
   lea dx,overs
   mov ah,09h
   int 21h
  mov ax,0000h
  mov al,sum[0]         ;判断是否为三位数
  cmp al,64h
  jae san
  mov bl,10
  div bl
  mov dx,ax
  add dx,3030h
   mov ah,02h
   int 21h
   mov dl,dh
   mov ah,02h
    int 21h
    jmp a
san: mov bl,10          ;如果是三位数则多处理一位
     div bl
     mov cl,ah          ;把第一位给cl
     add cl,30h
     mov ah,00h
     div bl              ;第二次除十
     mov dx,ax       
     add dx,3030h
     mov ah,02h
     int 21h
     mov dl,dh
     mov ah,02h
     int 21h
     mov dl,cl
     mov ah,02h
     int 21h    
    
a:  lea dx,kongzi     
    mov ah,09h            ;判断是否循环操作
    int 21h 
    lea dx,tital2
    mov ah,09h
    int 21h
    mov ah,01h
    int 21h
   
    cmp al,'y'
    je main
    lea dx,tital3
    mov ah,09h
    int 21h
        
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
关键字:汇编  统计输入  字符串 引用地址:汇编:统计输入字符串内的数字个数(最多三位数0—256)

上一篇:汇编程序:比较2个字符串是否相同(初级版)
下一篇:汇编:将两位十进制数转化为十六进制数

推荐阅读最新更新时间:2024-03-16 14:03

STM8与汇编语言(8)--16位定时器应用
当需要更长时间的定时时,最好使用16位的定时器,STM8单片机中都提供了2到3个的16位定时器,方便用户使用。 下面的代码给出了一个采用16位定时器实现的定时中断程序,在定时中断程序中,驱动LED指示灯的闪烁。 切记,一定要将中断服务程序的入口地址填写到中断向量表中,并且要根据定时器的中断向量号在正确的位置上填写。 同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 编译通过后,下载到开发板,运行程序,可以看到LED在闪烁,或者用示波器可以在LED引脚上看到方波。 stm8/ #include mapping.inc #include
[单片机]
arm汇编学习(六)跳转到thumb状态
通常函数返回使用 pop {r7,pc}或bx lr等方式(bx,b类似jmp为跳转指令,但bx可以指定跳转区域究竟为thumb还是arm指令。 thumb指令指令的时候,直接填写该地址却总是产生SIGSYS信号(非法指令执行)。 原因就是该函数为thumb指令,因此跳转时必须要把指令地址的最低位设置为1(bx 通过这一位来区分指令集),所以函数地址就加了一。 thumb指令集与arm指令集切换 mov R0,#5 ;Argument to function is in R0 add R1,PC,#1 ;Load address of SUB_BRANCH, Set for THUMB by adding 1 BX
[单片机]
汇编:将两位十进制数转化为十六进制数
这个是一个把两位十进制数转化为十六进制数的的汇编语言程序 考试题目 data segment tital1 db 'Please input shi jin zi shu (example 13): ','$' tital2 db 'it is transpranted into shi liu jin zi shu :','$' tital3 db 'Do you want to have a try again (yes y ,no n ): ','$' tital4 db 'welcome to use th
[单片机]
<font color='red'>汇编</font>:将两位十进制数转化为十六进制数
步进电机驱动汇编程序及调试总结
;*************步进电机驱动***************** ;设计者小苏 FOSC=12MHz 2013.11.05 ;------------------------------------------------ ; 步进角为7.5度 一圈360度,需要48个脉冲完成 ;A组线圈 P2.4 ;B组线圈 P2.5 ;C组线圈 P2.6 ;D组线圈 P2.7 ;正传次序:AB组-BC组-CD组-DA组(即一个脉冲,正转7.5度) ;-------------------------------------------- ;调试平台i51最小系统 ;调试结
[单片机]
STC51从入门到精通(汇编)----第二讲:存储器
微机存储系统的层次结构 半导体存储器的分类 存储器的基本组成 静态RAM内部结构示意图 SRAM6264引脚图 Intel 2764的引脚和功能示意图
[单片机]
STC51从入门到精通(<font color='red'>汇编</font>)----第二讲:存储器
PIC12F675两通道的AD转换的汇编程序
;程序功能:上电开机:PIN5为高电平,绿灯亮;PIN2,PIN3为低电平,红灯灭; ; 轮流检测PIN6,PIN7脚电平,欠压3.9V,10V,红灯亮,绿灯灭,过压5.9V,15.9V ; 红灯亮,绿灯灭,alram为TTL高电平,过压锁死 LIST P=12F675 INCLUDE P12F675.INC __CONFIG(B'11000101110100') ;Highest band gap voltage,0,0,Data memory is not protected ;Program memory is code-protected,BOD enabled,MCLR pin is MC
[单片机]
浮点数转换成字符串函数
sprintf函数太大,在STM8上面根本不敢用,动不动就.text overflow。为了将采集的数值通过串口上传到计算机,只能自己写了一个浮点数转换成字符串的函数: #include stdio.h #include stdint.h static char table ={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; void num2char(char *str, double number, u
[单片机]
IAR下的汇编/单片机启动代码汇编
1、 IAR汇编指令SFB和SFE SFB Segment begin 段开始 语法格式 SFB(segment ) 参数 segment: 可重定位段的段名, 必须在SFB使用前已定义 offset : 从开始地址的偏移, 是一个可选参数, 当偏移量省略时, 可以不添加小括号 描述 SFB 右边可以接受一个操作数, 而且这个操作数必须是一个可重位段的段名. 这个操作符计算段的首字节地址. 这个操作发生在连接时. 例 NAME demo RSEG CODE start: DC16 SFB(CODE) 即使上面的代码和多个其他的模块进行连接, start标号处仍被置为段的首字节地址 语
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved