用汇编语言编写一个多字节压缩BCD加法程序。要求显示被加数、加数及结果。 50

求教怎么写?... 求教怎么写? 展开
 我来答
gcbjoy
2018-01-01 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2159万
展开全部
只显示结果,加数、被加数的显示你自己琢磨吧 !
 
 
        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
追问
大哥,你这个程序执行后并不能按照要求啊。。。它直接输出结果77H  32H 55H  01H了。。。
追答
因为程序中给出了x、y,你可以修改x、y
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式