编写多字节加法程序,将分别存放于60H,61H和50H,51H的两个16位相加(高地址单元存放高8

编写多字节加法程序,将分别存放于60H,61H和50H,51H的两个16位相加(高地址单元存放高8,第1张

这是学习单片机入门的最基础的知识了,也是编程最简单的问题呀,这也不会呀?

MOV A, 40H

ADD A,41H

MOV 50H,A 和的低字节

MOV A ,#0

ADDC A,#0 取低位字节相加的进位

MOV 51H,A 和的高位字节,其实就是进位,最大是1

上课时还是用心学习吧,这么简单的问题也来提问,那需要提问到什么时候,才能考试及格呢?

只显示结果,加数、被加数的显示你自己琢磨吧 !

 

 

        CODE  SEGMENT

              ASSUME    CS:CODE

 

           X  DB        12H,34H,56H

           Y  DB        65H,98H,98H

           N  EQU       $-Y

           Z  DB        N+1 DUP(0)

 

      START:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES           使数据段、附加段与代码在同一段中

              MOV       CX,N         字节数置入cx

              MOV       BX,0         基址寄存器置0

              CLC                    清进位借位标志

         @0:

              MOV       AL,X[BX]     将被加数的低字节移入al

              ADC       AL,Y[BX]     带进未的加,加加数的低字节

              DAA

              MOV       Z[BX],AL     将结果移入和的低字节

              INC       BX           基址寄存器加1

              LOOP      @0           循环

              

              MOV       BYTE PTR Z[BX],0         处理最高位

              JNC       @01

              MOV       BYTE PTR Z[BX], 1

        @01:

              LEA       SI,Z         将和的首地址置入 si

              MOV       CX,N+1       字节数置入 cx

              CLD

         @1:

              LODSB                  装入和的低字节到 al

              CALL      DSPAL        调用子程序以16进制形式显示(其实是显示bcd数)

              LOOP      @1           循环

 

              MOV       AH,4CH

              INT       21H

 

=============================

       DSPAL  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSHF

              MOV       CX,2         一个字节只有2位的16进制数

              MOV       BX,AX        将al 保存到 bl 中

    @DSPAL1:

              ROR       BL,1         循环将bl 右移4次 ,即将高位移到右侧

              ROR       BL,1

              ROR       BL,1

              ROR       BL,1

              MOV       DL,BL        放到 dl 中

              AND       DL,0FH       清掉 高位

              CMP       DL,9         和9比较

              JA        @DSPAL2      大于 即在 A~F 之间

              ADD       DL,30H       否则就是 0~9,加30H变为 ASCii码

              JMP       @DSPAL3

    @DSPAL2:

              ADD       DL,37H       加 37H 变为 A~F 的ASCii码

    @DSPAL3:

              MOV       AH,2

              INT       21H

              LOOP      @DSPAL1      循环输出 低位

              MOV       AH,2

              MOV       DL,'H'       显示 H

              INT       21H

              MOV       DL,32        显示空格

              INT       21H

              POPF

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

       DSPAL  ENDP

 

        CODE  ENDS

              END       START


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11025838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存