两个多位十进制数相加(纪念本人的第一次汇编代码)

第一次写汇编代码,带着懵懂和尝试,写到半夜两点,54行代码终于出炉了,勉强能够实现两个4位十进制数的加法,在此留下代码作纪念

STACK    SEGMENT STACK                       ;定义堆栈段STACK
         DW    521 DUP(?)                    ;堆栈段的大小是1024B(512字)空间
STACK    ENDS                                ;堆栈段结束
DATA     SEGMENT                             ;定义数据段DATA
STRING1  DB '9619+','$'
STRING2  DB '9658=','$'
SUM      DB '     ','$'
DATA     ENDS                                ;数据段结束
CODE     SEGMENT  'CODE'                     ;定义代码段
         ASSUME  CS:CODE,DS:DATA,SS:STACK    ;确定CS、DS、SS指向的逻辑段
START:MOV  AX,DATA                           ;设置数据段的段地址DS
      MOV  DS,AX
      LEA  SI,STRING1
      LEA  DI,STRING2
      LEA  BX,SUM
      MOV  CX,3
      ADD  SI,3
      ADD  DI,3
      ADD  BX,4
      CLC
      PUSHF
AGAIN:MOV  AL,[SI]
      POPF
      ADC  AL,[DI]
      AAA
      PUSHF
      OR   AL,'0'
      MOV  [BX],AL
      DEC  SI
      DEC  DI
      DEC  BX
      DEC  CX
      JNS  AGAIN
      POPF
      JNC  ONE
      LAHF
      AND  AH,1
      OR   AH,'0'
      MOV  [BX],AH
      JNZ  TWO
ONE:  INC  BX
TWO:  MOV  AH,9
      MOV  DX,OFFSET STRING1
      INT  21H
      MOV  AH,9
      MOV  DX,OFFSET STRING2
      INT  21H
      MOV  AH,9
      MOV  DX,BX
      INT  21H
      MOV  AX,4C00H                          ;利用系统功能调用返回DOS
      INT  21H
      CODE ENDS                              ;代码段结束
      END  START                             ;汇编结束,同时表明程序起始位置为标号START处
实验结果:

该程序可以实现任意的两个4位十进制数相加

菜鸟成长记

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值