找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3743|回复: 0
打印 上一主题 下一主题
收起左侧

编写程序求两个十进制数之和,并将和以十进制数的形式送屏幕显示

[复制链接]
跳转到指定楼层
楼主

   汇编作业:
  1. DATA  SEGMENT
  2. KEYBUFFER DB 100
  3.           DB ?
  4.           DB 100 DUP(?)
  5. TEMP   DW ?
  6. ADD1    DB 100 DUP(?)
  7. ADD2    DB 100 DUP(?)
  8. SUM     DB 100 DUP(?)
  9. STRING1  DB 'Please input a decimal data:

  10.    [1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
  11.    [2] 和以二进制数的形式存入SUM以下单元。
  12.    [3] 将和送到屏幕显示采用子程序形式。



  13. STRING2  DB 'The sum of two datas is:

  14.    [1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
  15.    [2] 和以二进制数的形式存入SUM以下单元。
  16.    [3] 将和送到屏幕显示采用子程序形式。



  17. DATA ENDS
  18. STACK SEGMENT STACK 'STACK'
  19.        DW 100H DUP(?)
  20. TOP   LABEL WORD
  21. STACK ENDS
  22. CODE  SEGMENT
  23.        ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
  24. START:
  25.      MOV  AX, DATA
  26.      MOV  DS,AX
  27.      MOV  ES,AX
  28.      MOV  AX,STACK
  29.      MOV  SS,AX
  30.      LEA  SP,TOP
  31.      CALL INPUT                ;输入十进制数
  32.      CALL DISPCR
  33.      LEA SI,KEYBUFFER        
  34.      CALL TRANS10TO32
  35.      MOV WORD PTR ADD1+2,DX    ;低位在前高位在后
  36.      MOV WORD PTR ADD1,AX
  37.      CALL INPUT                ;输入十进制数
  38.      CALL DISPCR
  39.      LEA SI,KEYBUFFER              
  40.      CALL TRANS10TO32          ;将缓存区中ASCII码转换成32位二进制数
  41.      MOV WORD PTR ADD2+2,DX    ;低位在前高位在后
  42.      MOV WORD PTR ADD2,AX
  43.      LEA SI,ADD1
  44.      LEA DI,ADD2
  45.      MOV AX,[SI]
  46.      MOV BX,[DI]
  47.      ADD AX,BX                 ;低位相加
  48.      MOV WORD PTR SUM,AX
  49.      MOV AX,[SI+2]
  50.      MOV BX,[DI+2]
  51.      ADC AX,BX                 ;高位与低位进位相加
  52.      MOV WORD PTR SUM+2,AX
  53.      PUSH AX
  54.      PUSH DX
  55.      LEA DX,STRING2            ;显示输出提示字符串
  56.      MOV AH,09H
  57.      INT 21H
  58.      POP DX
  59.      POP AX
  60.      CALL DISPAXD
  61.      MOV AX,WORD PTR SUM
  62.      CALL DISPAXD
  63.      MOV AH,4CH
  64.      INT 21H
  65. DISPAXD PROC NEAR
  66. ;功能:将AX中的内容输出为十进制
  67. ;入口参数:AX,DI(缓冲区地址)
  68. ;出口参数:无
  69.      PUSH AX
  70.      PUSH CX
  71.      PUSH DX       
  72.      PUSH DI
  73.      LEA DI,KEYBUFFER
  74.      MOV CX,5               
  75.      CALL TRANS16TO10          ;将16进制转化为十进制   
  76.      LEA DI,KEYBUFFER+4
  77. L2:
  78.      MOV DL,[DI]
  79.      ADD DL,30H
  80.      MOV AH,02H               ;显示
  81.      INT 21H
  82.      DEC DI                   ;从后往前输出显示
  83.      LOOP L2
  84.      POP DI
  85.      POP DX
  86.      POP CX
  87.      POP AX
  88.      RET
  89. DISPAXD  ENDP
  90. TRANS16TO10 PROC NEAR
  91. ;功能:将AX中的二进制数转化为十进制
  92. ;入口参数:AX,DI(缓冲区地址)
  93. ;出口参数:缓冲区内容
  94.      PUSH AX
  95.      PUSH BX
  96.      PUSH CX
  97.      PUSH DX
  98.      PUSH DI
  99.      MOV BX,10
  100.      MOV CX,5                 ;循环五次
  101. L1:
  102.      XOR DX,DX
  103.      DIV BX
  104.      MOV [DI],DL
  105.      INC DI
  106.      LOOP L1
  107.      POP DI
  108.      POP DX
  109.      POP CX
  110.      POP BX
  111.      POP AX
  112.      RET
  113. TRANS16TO10 ENDP
  114. INPUT PROC NEAR      
  115. ;入口参数:DX(缓冲区首地址)
  116. ;出口参数:缓存区内容
  117.          LEA DX,STRING1       ;显示输入提示字符串
  118.          MOV AH,09H
  119.          INT 21H
  120.          LEA DX,KEYBUFFER
  121.          MOV AH,0AH
  122.          INT 21H
  123.          RET
  124. INPUT ENDP
  125. TRANS10TO32 PROC NEAR   
  126. ;将缓冲区中以ASCII码表示的十进制数转换成32位二进制数
  127. ;入口参数:SI(缓冲区首地址)
  128. ;出口参数:DX:AX(变换结果)
  129.       XOR AX,AX
  130.       XOR CX,CX
  131.       MOV CL,[SI+1]
  132.       ADD SI,2
  133.       MOV AL,[SI]
  134.       INC SI
  135.       SUB AL,30H
  136.       DEC CX
  137.       JCXZ TRANSF_OK
  138. TRANSF1:
  139.       MOV BX,DX
  140.       LEA DI,TEMP
  141.       MOV [DI],WORD PTR 000AH
  142.       MUL WORD PTR [DI]
  143.       PUSH AX
  144.       PUSH DX
  145.       MOV AX,BX
  146.       MUL WORD PTR [DI]
  147.       PUSH AX
  148.       POP DX
  149.       POP BX
  150.       ADD DX,BX
  151.       POP AX
  152.       XOR BX,BX
  153.       MOV BL,[SI]
  154.       INC SI
  155.       SUB BL,30H
  156.       ADD AX,BX
  157.       ADC DX,0
  158. LOOP TRANSF1
  159. TRANSF_OK:
  160.        RET
  161. TRANS10TO32 ENDP
  162. DISPCR  PROC  NEAR
  163.         PUSH AX
  164.         PUSH DX
  165.         MOV AH,2
  166.         MOV DL,0AH
  167.         INT 21H
  168.         MOV AH,2
  169.         MOV DL,0DH
  170.         INT 21H
  171.         POP DX
  172.         POP AX
  173.         RET
  174. DISPCR  ENDP
  175. CODE  ENDS
复制代码


   [1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
   [2] 和以二进制数的形式存入SUM以下单元。
   [3] 将和送到屏幕显示采用子程序形式。


汇编1.png (13.57 KB, 下载次数: 109)

1

1

1.doc

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

代码和程序

1.zip

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

asm文件

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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