鱼C论坛

 找回密码
 立即注册
查看: 1560|回复: 0

写了一个简单的两个数相加,有几个问题,解决不了,还望个位大神指点指点

[复制链接]
发表于 2014-4-28 01:08:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
两个任意的十进制数相加,结果写入显存显示下面还有几个问题,解决不了
1>两个加数的位数必须一样,假如第一个是个2位数 71,那第二个数也必须是个2位数,
2>两个加数的结尾必须加0dH,例如:71 就要写成 n1 db 7,1,0dH  
3>两个加数不支持个位为0
我的代码挺乱的,如果看的麻烦,给点思路也行……
  1. ;两个数相加,输出结果

  2. assume cs:code,ds:data,ss:stack

  3. data segment
  4.         n1 db 1,2,3,4,5,1,1,0,0dh        ;被加数
  5.         n2 db 1,2,3,4,5,1,1,0,0dH        ;加数        
  6.         sum db 20 dup(0)                                        ;结果
  7. data ends

  8. stack segment
  9.         z dw 16 dup(0)
  10. stack ends

  11. code segment
  12. start:
  13.                 mov ax,data                        ;数据段
  14.                 mov ds,ax
  15.                
  16.                 mov ax,0b872h                ;确定显示位置
  17.                 mov es,ax
  18.                
  19.                 mov ax,stack                ;确定栈段
  20.                 mov ss,ax
  21.                 mov sp,32
  22.                
  23.                 mov cx,0
  24.                 mov bx,0
  25.                
  26.                 a:
  27.                         
  28.                         mov al,n1[bx]
  29.                         cmp  al,0d
  30.                         jz a1
  31.                         inc cx
  32.                         inc bx
  33.                         jmp a
  34.                 a1:
  35.                         mov ax,cx
  36.                         mov di,cx
  37.                         dec di
  38.                         mov bx,di
  39.                         mov bx,di
  40.                         mov cl,2
  41.                         div cl
  42.                         
  43.                         
  44.                         mov cl,al
  45.                         mov ch,0
  46.                         mov si,0
  47.                         
  48.                         
  49.                         a2:
  50.                                                         
  51.                                 mov al,n1[si]
  52.                                 mov ah,n1[di]
  53.                                 mov n1[si],ah
  54.                                 mov n1[di],al
  55.                                 
  56.                                 mov al,n2[si]
  57.                                 mov ah,n2[di]
  58.                                 mov n2[si],ah
  59.                                 mov n2[di],al

  60.                                 inc si
  61.                                 dec di
  62.                                 
  63.                         loop a2
  64.                
  65.                 mov di,10H
  66.                 mov bx,0
  67.                
  68.                
  69.                 mov cx,0
  70.                
  71.                 clc                                        ;清除进位标志位
  72.                 s:
  73.                         mov al,n1[bx]
  74.                         mov dl,n2[bx]
  75.                         
  76.                         ;判断al是否等于0
  77.                         cmp  al,0dH
  78.                         ;al的结果不为0就进行运算
  79.                         jnz s1               
  80.                         
  81.                         mov ax,4c00h
  82.                         int 21h                        
  83.                                        
  84.                 s1:
  85.                         ;相加
  86.                         add al,dl
  87.                         ;是否大于9
  88.                         cmp al,10
  89.                         jns s3
  90.                         
  91.                 s4:
  92.                         add al,30h
  93.                         mov es:[di],al
  94.                         mov byte ptr es:[di+1],03h
  95.                         

  96.                         inc bx
  97.                         sub di,2
  98.                         
  99.                         jmp s
  100.                
  101.                 s3:
  102.                         sub al,10
  103.                         js s5
  104.                         
  105.                 s6:        add byte ptr n1[bx+1],1
  106.                         jmp s4
  107.                 s5:
  108.                         mov al,9
  109.                         jmp s6
  110.                                 
  111. code ends
  112. end start
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 00:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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