汇编:统计字符串内各种字符的数目

发布者:chwwdch最新更新时间:2015-05-26 来源: 51hei关键字:汇编  字符串 手机看文章 扫描二维码
随时随地手机看文章
;对这个题目进一步改造:
;3_7 用户输入一个由数字‘0’~‘9’英文大写字母‘A’~‘Z’;以及英文小写字母‘a’~‘z’组成的ASCII 字符串,
;字符串的结束符为 CR(即回车符,其ASCII 码为0DH),字符串总长度不超过256 个。
;要求统计传送的字符总数以及其中各种字符的数目

DATA SEGMENT
  SUM     DB 00H  ;总数          计数器
  CAPITAL DB 00h  ;大写字母个数  计数器
  small   db 00h  ;小写字母个数  计数器
  num     db 00h  ;数字个数      计数器
  result  db 'The amout all of the zifu in this string is  ','$'
  result1 db 'The amout of the number in the string is ','$'
  result2 db 'The amout of the big capital is ','$'
  result3 db 'The amout of the small capital is ','$' 
  string  db  256 dup (?)   ;保存输入的字符
     kongzi  DB 0DH,0AH,'$'      ;换行使用
  buffer  DB 256 DUP(0)       ;目标内存
  results DB 256 DUP(?)         
  tital   db 'Please input the string you want to be done : ',0dh,0ah,'$'
  tip     db 'Do you want to have a try again (if yes: "y" ,else "n"): ','$'
  tip1    db 'welcome to use the program again ,the original is WQ ','$'
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DS,AX  
    lea dx,tital
       mov ah,09h
       int 21h     
       mov di,0
again: 
       mov  ah,01h
       int  21h
       mov string[di],al
       inc di
       cmp al,0dh
       jnz again
       cld         ;将方向标志位置零   串操作递增
main: lods string  ;字符串装入指令 把字符串一个个装入al
      INC SUM      
   CMP AL,0DH
   JE DONE
      CMP AL,30H
      Jb main
      cmp al,41h
      jb k1  
   CMP AL,61H
   Jb k2  
   JMP main
DONE:
      lea dx,result    ;输出SUM
      mov ah,09h
      int 21h
      DEC SUM          
   MOV AX,0
   MOV AL,SUM  
      MOV BL,10
   DIV BL
      MOV DX,AX
   ADD DX,3020H    ;为什么要加20呢?
   cmp dl,30h
   jnz wuling
   mov dl,20h
wuling:
      MOV AH,02h
      INT 21H
   MOV DL,DH       ;这是在干什么?
      MOV AH,2h       ;2号调用每次只输出一个字符,即dl
   INT 21H    
   LEA DX,kongzi  ;换行
      MOV AH,09H
      INT 21H
               
            [page]
  
     ;输出num
    mov ax,0
    mov al,num
    mov bl,10
    div bl
    mov dx,ax
    add dx,3030h
    cmp dl,30h
    jne   wuling3
    mov dl,32
    wuling3:
    push dx
    lea dx,result1
    mov ah,09h
    int 21h
    pop dx
    mov ah,02h
    int 21h
    mov dl,dh
    mov ah,02h
    int 21h
    LEA DX,kongzi
       MOV AH,09H
       INT 21H
                            ;输出CAPITAL
    MOV AX,0
    MOV AL,CAPITAL
    sub al,04h
    MOV BL,10
    DIV BL
    MOV DX,AX
    ADD DX,3030H
    CMP Dl,30H
    JNE WULING2 
       MOV Dl,32 
WULING2:push dx
        lea dx,result2
        mov ah,09h
        int 21h
        pop dx
        MOV AH,02h
     INT 21H
     MOV DL,DH
     MOV AH,2
     INT 21H
     
      mov al,sum
         sub al,capital
         add al,04h
         sub al,num
         mov small,al
                      
                    ;输出small capital
    MOV AX,0
    MOV AL,small
    MOV BL,10
    DIV BL
    MOV DX,AX
    ADD DX,3020H
    CMP Dl,30H
    JNE WULING4 
       MOV Dl,32    ;空格
  
WULING4: push dx
         LEA DX,kongzi
         MOV AH,09H
         INT 21H
         lea dx,result3
         mov ah,09h
         int 21h
         pop dx      
       
        
         MOV AH,02h
      INT 21H
      MOV DL,DH
      MOV AH,2
      INT 21H
     
     lea dx,kongzi
     mov ah,09h
     int 21h
     lea dx,tip
     mov ah,09h
     int 21h
     mov ah,01h
     int 21h
     cmp al,'y'
     je lop   
   
 lea dx,kongzi
 mov ah,09h
 int 21h   
        lea dx,tip1
     mov ah,09h
     int 21h    
over:
     MOV AH,4CH
     INT 21H 
 k2:inc capital                               
    jmp main      
    k1: inc num
    jmp main
    lop:
    lea dx,kongzi
  mov ah,09h
  int 21h  
  jmp start 
  
CODE ENDS
END START
关键字:汇编  字符串 引用地址:汇编:统计字符串内各种字符的数目

上一篇:汇编:判断两个字符串是否相等(匹配)
下一篇:汇编:输入一位十六进制数将其转化为2进制数

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

数字信号处理器的汇编程序优化方案
摘 要:虽然目前大多数DSP都支持C语言缟程,但是在实际工程应用中,多是用C语言编写流程控制,搭建工程框架,具体的算法模块以及比较耗时的功能模块还是采用汇编语言来编写。因为用汇编语言进行编程可以利用电路自身硬件结构的特点对其进行优化与精简,从而能够使一些复杂的算法和功能模块在实时性方面取得非常好的效果。文中从指令并行和软件流水二方面出发。以ADI公司PSl01系列电路的程序为实例,概括归纳出对DSP汇编程序进行优化的一般方法。 关键词:数字信号处理器;汇编优化;指令并行;软件流水 1 引言 数字信号处理器(DSP)相对于模拟信号处理器有很大的优越性,表现在精度高,灵活性大,可靠性好,易于大规模集成等方面。随着半导体制造工艺的
[应用]
TQ2440 ADS 1.2 汇编点亮4个LED
该程序在ADS1.2上编译通过。 ADS上的相关设置如下: 启动DNW后,先设置一下: LED1~LED4对应着 GPB5~GPB8,GPB的端口配置 寄存器 GPBCON的地址为0x56000010,端口数据寄存器的地址为0x56000014 源代码如下: AREA LED_ON,CODE, READONLY ENTRY CODE32 START LDR R0,=0x56000010 ;//把GPBCON地址装载到R0中,即把R0设为GPBCON寄存器 MOV R1,#0x00015400 ;//设置GPB5和GPB6和GPB7和GPB8为输出端口 STR R1, ;//把R1的
[单片机]
TQ2440 ADS 1.2 <font color='red'>汇编</font>点亮4个LED
汇编语言的特点 MCS-51汇编语言的语句格式
由于计算机只能识别二进制数,所以计算机的 指令 均由二进制代码组成。为了阅读和书写的方便,常把它写成十六进制形式,通常称这样的 指令 为机器指令。现在一般的计算机都有几十甚至几百种指令。显然即便用十六进制去书写和记忆也是不容易的,为了便于记忆和使用的方便,制造厂家对指令系统的每一条指令都给出了助记符。助记符是根据机器指令不同的功能和操作对象来描述指令的符号。由于助记符是用英文缩写来描述指令的特征,因此它不但便于记忆,也便于理解和分类。这种用助记符形式来表示的机器指令称为汇编语言指令。 汇编语言有如下特点: ① 助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序
[单片机]
C语言与汇编语言混合编程应遵守的规则
ARM编程中使用的C语言是标准C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境与ARM的硬件紧密相关。 在使用C语言时,要用到和汇编语言的混合编程。若汇编代码较为简洁,则可使用直接内嵌汇编的方法;否则要将汇编程序以文件的形式加入到项目中,按照ATPCS(ARM/Thumb过程调用标准,ARM/Thumb Procedure Call Standard)的规定与C程序相互调用与访问。 在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,哪寄存器的使用规则,堆栈的使用规则和参数的传递规则等。 1)寄存器的使用规则 子程序之间通过寄存器r0
[单片机]
Emu8086-学习汇编语言的好帮手
最近在调试汇编程序,在网上找调试软件,发现有一款工具Emu8086特别好用,它是一个8086的虚拟机,在上边可以模拟运行一些8086的汇编程序.它是一个2M的程序,就能模拟CPU外加调试器,屏幕以及好多I/O设备外加一个好用的程序编辑器大量的经典源码,当然这都是在windows下完成的。那么,在emu8086下学习汇编有什么好处呢?首先就是省去了配置开发环境的麻烦,如果学习DOS汇编的话,需要去找masm link等的汇编器,需要记麻烦的命令行,最恼人的就是用debug来调试,那个麻烦啊 在Emu8086下就没有这么麻烦了,调试程序就像VC,Ollydbg等那么简单直观,可以随时查看中间运行结果跟寄存器的值等等。另一个非常突出的优点
[单片机]
PIC控制时钟芯片DS1302汇编程序
#INCLUDE CBLOCK 20H SEC ;秒 MIN ;分 HOU ;小时 DATE ;日期 MON ;月 DAY ;日 YERR ;年 DDD ;写使能位 TIME_TX ;1302发送寄存器 TIME_RX ;1302接收寄存器 COUNT1 ; COUNT2 ; DELAY1 DELAY2 ENDC ******************************* ; ; 1302子程序说明 ; ;****************************** ; DS1302INI ;1302初始化,先禁止RST,设定充电方式 ; SET_TIME ;一次发送7个数据设定时间,包含写使能寄存器,8个数据 ; GET_T
[单片机]
实验九 定时、记数、显示(80C51单片机汇编语言编程)
设计一个带有控制功能的脉冲发生器/计数器系统,脉冲发生器发出周期为2秒的方波(提示:可由P3.0口输出,用发光二极管显示);被计数脉冲由T0口输入,所记录的脉冲数以十进制形式在数码管显示(至少应可记录256个脉冲);设两个按键,一个启动脉冲发生器,一个启动记数,(按一次启动,再按一次停止),不启动时,发光管灭,数码管显示学号。 伟福:数码管为共阴极; KEY/LED_CS与CS0连线,则段地址为:8004H,位地址为:8002H ORG 0000H AJMP MAIN ORG 0003H AJMP INT0 ORG 0013H AJMP INT1 ORG 001BH AJMP T1 ORG 0030H MAIN:MOV TMOD
[单片机]
51 单片机汇编语言--矩阵键盘的驱动
用这个矩阵键盘做单片机输入,插 P1 口的 P1.0~P1.6。 想问的是,当: 按下 1 键 P0 口的 P0.0 输出高电平; 按下 2 键 P0.1 输出高电平; …… 一直到 8 键就可以了。 还有一个要求,当按下一个键时延时5秒并锁住其它按键,5秒之后回到起点。用汇编语言 ;===================================================== ;如下即可: ORG 0000H START: MOV P0, #255 MOV P1, #255 CLR P1.0 NOP JNB P1.4, K1 JNB P1.5
[单片机]
51 单片机<font color='red'>汇编</font>语言--矩阵键盘的驱动
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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