zoukankan      html  css  js  c++  java
  • 【汇编程序】要求统计数字0-9 字符A-Z和其他的个数,存储到NUM开始的3个内存单元中

     需求:在存储器中以首地址BUF开始存有一串字符,字符串个数用count表示。要求统计数字0-9 字符A-Z和其他的个数,

    并分别将他们的个数存储到NUM开始的3个内存单元中。

    编程思路:我们知道数字0-9对应的ascll为30h-39h 大写字母 41h-5ah 数据段中定义 buf存储一串字符,count判断出自总字符的个数。num 定义3个重复的字节空间,分别用来存放数字 字母 其他字符的个数、在代码段中段地址和偏移地址赋值,然后将字符串的总个数获取到。存储到寄存器ch中。dx中高8位用来存储数字的个数,低8位用来存储大写字母的个数

    然后获取第一个数,去判断是否是cmp al,30h 小于的话 说明这个数字是一个其他字符 程序跳转到next cmp al,39 大于 跳转到abc处 因为 这个字符有可能是一个大写的字母,两种情况都不是的话,这个字符就是一个数字因此 inc dh。

    如果这个字符是一个大于39的字符 跳转到abc处,先判断cmp ah,41h 小于 跳转到 next,否者的话 cmp ah,5ah 高于的,跳转到next 。上面两种情况都不属于的话,int dl

    最后程序 执行到next处,这时可以确信这个字符 是一个既非数字 也非大写字母的字符。先将基地址加1 字符串的个数减1

    (这块为什么字符串的个数要进行减1,其实是出于程序循环次数来判断 ch中存放着字符的个数,每次判断结束完 就应该进行减一 用jz去判断程序是否执行完。)将dh 和 dl中个数赋值给num num[1] 程序最关键的位置就这步,上面我们已经获取到数字和大写字母的个数,那么其他字符的个数,怎么去获取。此时 我们已经知道了总字符的长度 ,通过总字符的长度减去数字和大写字母的个数,就可以获取到其他字符的个数,然后 通过mov指令存储到num[2]位置上。嗯  我的理解就是这样。

    ;在存储器中以首地址BUF开始存有一串字符,字符串个数用count表示
    ;要求统计数字0-9 字母A-Z和其他字符的个数,并分别将他们的个数存储到NUM开始的3个内存单元中去
    ;程序分析 数字0-9 ascll为30h-39h  大写字母 A-Z 的ASCLL为41h-5Ah 
    data segment 
         buf db 'paint' 'abc',35h,52h,30h,08h  ;一串字符
         count equ $-BUF  ;count = 字符总个数
         num db 3 dup(?)  ;先存放数字 字母 其他字符个数
     data ends
     code segment 
        assume cs:code,ds:data
        start:mov ax,data
              mov ds,ax
              mov ch,count  ;ch-数组长度
              mov bx,0      ;bx为基址指针 初值清0
              mov dx,0      ;dh -数字个数 dl字母个数  初值清0
        loop1:mov ah,buf[bx]  ;取第一个数
              cmp ah,30h    ;<30h
              jl  next
              cmp ah,39h    ;>39
              jg  abc 
              inc dh
              jmp next
           abc:cmp ah,41h  ;41h
              jl next ;非字母 转
              cmp ah,5ah;>5ah
              jg next ;非字母 转
              inc dl ;字母个数加1
           next:inc bx;基地址指针加1
              dec ch;字符串减1
              jz  loop1 ;未完 取下一个数
              mov num,dh ;已完
              mov num+1,dl
              mov ah,count 
              sub ah,dh
              sub ah,dl          ;计算出其他字符个数
              mov num+2,ah     
              mov ax,4c00h
              int 21h
           code ends
     end start
  • 相关阅读:
    树形结构基础
    最长公共子序列
    四 过滤模式 map Only
    三 概要模式 2) MR倒排索引、性能分析、搜索干扰词。
    三 概要模式 1)数值概要 (单词计数记录计数最大值/最小值/计数平均值、中位数、标准差)
    一 梳理 从 HDFS 到 MR。
    个人学习源码的 HBase误区的总结 与 架构图
    15 hbase 学习(十五)缓存机制以及可以利用SSD作为存储的BucketCache
    13 hbase源码系列(十三)缓存机制MemStore与Block Cache
    HBase 系统架构
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860878.html
Copyright © 2011-2022 走看看