找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2709|回复: 1
收起左侧

分类统计字符个数 汇编语言

[复制链接]
ID:275526 发表于 2018-1-13 12:57 | 显示全部楼层 |阅读模式
  1. DATAS SEGMENT
  2. STRING1 DB'Please input a string:
  3.     ;输入提示信息
  4. STRING2 DB'Number of letter:
  5.                ;各类字符提示信息
  6. STRING3 DB'Number of digits:

  7. STRING4 DB'Number of others:

  8. STRING5 DB'Number of upperletter:

  9. STRING6 DB'Number of lowerletter:

  10. LETTER DB 0         ;字母
  11. UPPERLETTER DB 0;大写字母
  12. LOWERLETTER DB 0;小写字母
  13. DIGIT DB 0          ;数字
  14. OTHERS DB 0         ;其他

  15. DATAS ENDS

  16. STACKS SEGMENT PARA STACK 'STACK';此处输入堆栈段代码
  17.         DB 256 DUP(?)
  18. STACKS ENDS
  19. CODES SEGMENT

  20. ASSUME CS:CODES,DS:DATAS,SS:STACKS

  21. start: MOV AX,DATAS
  22.         MOV DS,AX
  23.         LEA DX,STRING1                 ;显示输入提示信息Please input a string,LEA取指功能实现。
  24.         MOV AH,09H              ;09H为字符串输出
  25.         INT 21H                 ;中断调用,INT 21H 中断为DOS中断
  26.         MOV CX,80                 ;设置循环次数足够大,CX用来保存循环指令


  27. L1:        MOV AH,01H                 ;中断调用,单字符输入,01H带回显的键盘输入,
  28.         INT 21H                 ;输入符号的ASCII代码在AL寄存器中。

  29.         CMP AL,0DH                 ;若输入回车符则结束,CMP比较指令。如果为数字:30H---39H
  30.         JZ OVER2                 ;JZ条件转移指令,根据ZF进位转移
  31.         CMP AL,30H                 ;若<30H(0),OTHERS++
  32.         JB OTHER                 ;JB条件转移指令,为低于不高于指令。
  33.         CMP AL,39H                 ;若>39H(9),跳转进一步比较
  34.         JA ONE                         ;JA条件转移指令。为高于/不低于指令。
  35.         JMP DIGITAL                 ;DIGIT++,JMP无条件转移指令,
  36. ONE:        CMP AL,41H                 ;若IF<41H(A),OTHERS++ 如果为大写字母“A-Z”字符:41H---5AH
  37.         JB OTHER         
  38.         CMP AL,5AH                 ;若IF>5AH(Z),跳转继续比较
  39.         JA TWO  
  40.         JMP CHAR1                ;检测为大写字母,字母和大写字母数加一
  41. TWO:        CMP AL,61H                ;若IF<61H(a),OTHERS++ 如果为小写字母字符“a-z”字符:61H--7AH
  42.         JB OTHER
  43.          CMP AL,7AH
  44.         JA OTHER
  45.         JMP CHAR2                 ;检测为小写字母,字母和小写字母数加一
  46.         JMP OVER                 ;比较结束
  47. OTHER:  INC OTHERS
  48.         JMP OVER
  49. CHAR1:         INC LETTER                 ;字母
  50.         INC UPPERLETTER                ;大写字母
  51.         JMP OVER                 ;比较结束
  52. CHAR2:        INC LETTER                ;字母
  53.         INC LOWERLETTER                ;小写字母
  54.         JMP OVER                ;结束比较
  55. DIGITAL:INC DIGIT                 ;DIGIT++
  56.         JMP OVER                 ;比较结束
  57.          JMP OVER                 ;比较结束
  58. OVER:        NOP
  59. LOOP L1                         ;循环,输入下一字符
  60. OVER2:        CALL HUANHUANG                 ;回车换行


  61.         LEA DX,STRING2                 ;字符串的输出Number of letter
  62.         MOV AH,09H                 ;09H为字符串输出
  63.         INT 21H                 ;中断调用,INT 21H 中断为DOS中断
  64.         XOR AX,AX
  65.         MOV AL,LETTER                 ;将统计的数字送 AX
  66.         CALL OUTPUT                 ;调用输出两位数字的子程序
  67.         CALL HUANHUANG                 ;回车换行
  68.         
  69.         
  70.         LEA DX,STRING5                ;字符串的输出Number of upperletter
  71.         MOV AH,09H                 ;09H为字符串输出
  72.         INT 21H  
  73.         XOR AX,AX
  74.         MOV AL,UPPERLETTER        ;将统计的数字送AX
  75.         CALL OUTPUT                 ;调用输出两位数字的子程序
  76.         CALL HUANHUANG                ;回车换行

  77.         LEA DX,STRING6                 ;字符串的输出Number of lowerletter:
  78.         MOV AH,09H                 ;09H为字符串输出
  79.         INT 21H  
  80.         XOR AX,AX
  81.         MOV AL,LOWERLETTER        ;将统计的数字送AX
  82.         CALL OUTPUT                 ;调用输出两位数字的子程序
  83.         CALL HUANHUANG                ;回车换行

  84.         LEA DX,STRING3                ;字符串的输出为Number of digits:
  85.         MOV AH,09H                ;09H为字符串输出
  86.         INT 21H
  87.         XOR AX,AX
  88.         MOV AL,DIGIT                ;将统计的数字送AX
  89.         CALL OUTPUT                ;调用输出两位数字的子程序
  90.         CALL HUANHUANG                ;回车换行

  91.         LEA DX,STRING4                 ;字符串的输出Number of others
  92.         MOV AH,09H                 ;09H为字符串输出
  93.         INT 21H  
  94.         XOR AX,AX
  95.         MOV AL,OTHERS                ;将统计的数字送AX
  96.         CALL OUTPUT                 ;调用输出两位数字的子程序
  97.         MOV AH,4CH                 ;4CH带返回码结束
  98.         INT 21H

  99.         


  100.         HUANHUANG PROC NEAR        ;控制输出格式,输出回车换行子程序
  101.         MOV AH,02H
  102.         MOV DL,0AH                 ;0AH键盘输入至缓冲区
  103.         INT 21H                 ;输出换行符
  104.         MOV AH,02H
  105.         MOV DL,0DH                 ;0DH键盘复位。
  106.         INT 21H                 ;输出回车符
  107.         RET
  108.         HUANHUANG ENDP
  109.         


  110.         OUTPUT  PROC NEAR        ;输出两位数字的子程序(输出两位数字为十进制)
  111.         MOV BL,10
  112.         DIV BL                         ;AX/BL,AL=商,AH=余数
  113.         PUSH AX                 ;保存AX中的信息        
  114.         MOV DL,AL                 
  115.         ADD DL,30H                 ;十进制转为ASCAII码
  116.         MOV AH,02H                ;显示一个字符
  117.         INT 21H                 ;输出十位数
  118.         POP AX                         ;出栈送AX
  119.         MOV DL,AH
  120.         ADD DL,30H
  121.         MOV AH,02H                 ;显示一个字符
  122.         INT 21H                 ;输出个位数
  123.         RET
  124.         OUTPUT ENDP


  125.         CODES ENDS
  126.         END START
复制代码

回复

使用道具 举报

ID:275526 发表于 2018-1-13 15:08 | 显示全部楼层
附件见下面

基于8086的波形发生器设计与proteus电路仿真_魏凤旗.pdf

628.67 KB, 下载次数: 4, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表