加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

汇编程序——键盘输入0~9,输出其平方值

(2007-04-30 13:37:31)
标签:

汇编程序

求平方

分类: 程序设计

DATAS SEGMENT
OUTERROR DB 0AH,0DH,'ERROR!$'
INPUT DB'PLEASE INPUT X(0..9):$'
TABLE DB 0H,1H,4H,9H,16H,25H,36H,49H,64H,81H
RESULT DB ?
BUF1 DB 0AH,0DH,'IT IS ='
BUF2 DB 4 DUP(?)
DATAS ENDS

STACKS SEGMENT
    DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    LEA DX,INPUT
    MOV AH,9
    INT 21H
   
    MOV AH,1
    INT 21H
   
    CMP AL,'0'
    JB  ERROR
    CMP AL,'9'
    JA  ERROR
   
    AND AL,0FH
    MOV BL,AL
    MOV BH,0
    MOV AL,TABLE[BX]
    MOV RESULT,AL
    LEA DI,BUF2
   
    MOV CL,4
    SHR AL,CL
    OR AL,30H
    MOV [DI],AL
    INC DI
   
    MOV AL,RESULT
    AND AL,0FH
    OR AL,30H
    MOV [DI],AL
    INC DI

 

    MOV BYTE PTR[DI],'$'
    MOV DX,OFFSET BUF1
    MOV AH,9
    INT 21H
    JMP EXIT
ERROR:LEA DX,OUTERROR
      MOV AH,9
      INT 21H
EXIT:MOV AH,4CH
    INT 21H
CODES ENDS
    END START

平方表中的平方值后都加了H(加了H“形不变值变”),这里是便于直接以10进制输出结果。(输出必须先处理成ASCII码)如果不加H,则以十六进制输出(数字在机内以二进制储存,不加H以16进制输出)

 

我的另一篇相关文章http://blog.sina.com.cn/u/4c59c08a010007l1

 

 

又一种思路,我帮别人完善了一下的。http://www.programfan.com/club/post-239368.html
DATA  SEGMENT
      TABLE  DB        0,1,4,9,16,25,36,49,64,81
        ASK  DB        0DH,0AH,'Please enter a nummble(0~9):',0DH,0AH,'$'
        SEV  DB        'Key (N/n) to close!$'
        ANS  DB        'THE RESULT IS:$'
        OVER  DB        0DH,0AH,'ERROR!',0DH,0AH,0AH,0DH,'$'
        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA
      START:  MOV      AX,DATA
              MOV      DS,AX      ;将数据送入DS
        STA:  MOV      DX,OFFSET SEV          ;输出提示
              MOV      AH,9
              INT      21H
              MOV      DX,OFFSET ASK
              MOV      AH,9
              INT      21H
             
              MOV      AH,1        ;输入数字
              INT      21H
             
              CMP      AL,'N'      ;判断输入是否为“N/n”
              JZ        CLO        ;为“N/n”则跳转至CLO
              CMP      AL,'n'
              JZ        CLO
             
              CMP      AL,'9'      ;输入数字与9和0进行比较
              JA        OVE        ;当数大于9或小于0则转移至OVE
              CMP      AL,'0'
              JL        OVE
             
              SUB      AL,30H      ;将字符3转换成数字3
              MOV      BL,AL
             
              LEA      SI,TABLE    ;将指针指向TABLE段
             
              MOV      AH,2
              MOV      DL,13
              INT      21H        ;输出回车符
              MOV      DL,10
              INT      21H        ;输出换行符
             
              MOV      AH,0        ;将AH清零
              MOV      AL,[SI+BX]
              DIV      DL          ;将TABLE中的数据除以10
             
              MOV      CH,AH      ;把余数送入CH中暂存
              MOV      CL,AL
              CMP      AL,0        ;将商与0相比较
              JZ        AGI2        ;商为零则跳转至AGI不输出商
              LEA      DX,ANS
              MOV      AH,9
              INT      21H
             
              MOV      AL,CL
              ADD      AL,30H      ;不为零则将数字转换成字符
              MOV      DL,AL
              MOV      AH,2
              INT      21H        ;输出商
              JMP      AGI
        AGI2: LEA      DX,ANS
              MOV      AH,9
              INT      21H
        AGI: 
              MOV      AL,CH
              ADD      AL,30H
              MOV      DL,AL
              MOV      AH,2
              INT      21H        ;输出余数
              MOV      DL,13
              INT      21H        ;输出回车符
              MOV      DL,10
              INT      21H        ;输出换行符
              MOV      DL,13
              INT      21H        ;输出回车符
              MOV      DL,10
              INT      21H
              JMP      STA        ;循环
        OVE:  MOV      DX,OFFSET OVER          ;输出错误提示
              MOV      AH,9
              INT      21H
              JMP      STA
        CLO:  MOV      AH,4CH
              INT      21H        ;返回DOS
        CODE  ENDS
              END      START      ;整个程序结束

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有