键盘输入4位十进制数,求其补码并在屏幕上输出对应的十六进制数,用汇编语言完成程序设计,求指导。

2025-04-26 18:58:36
推荐回答(1个)
回答1:

; 输入不超过65535的10进制数,将其以16位2进制数的形式 以及4位的16进制数形式显示补码 
; 负数本身用补码表示,再求补码即得 原码
; 用 word 类型 表达的 4位 十进制均为正数,所以其补码即其自身。 
        CODE  SEGMENT
              ASSUME    CS:CODE

           X  DW        0
        MSG1  DB        13,10,'please input a number:','$'
        MSG2  DB        13,10,16 DUP(0),'B$'
        MSG3  DB        13,10,4 DUP(0),'H$'
        
      START:  PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
              LEA       DX,MSG1
              MOV       AH,9
              INT       21H
              LEA       BX,X
              MOV       AX,0
              PUSH      AX
     AGAIN1:
              MOV       AH,1
              INT       21H
              CMP       AL,13
              JE        LINE0
              SUB       AL,30H
              MOV       AH,0
              MOV       SI,AX
              POP       AX
              MOV       CL,10
              MOV       CH,0
              MUL       CX
              ADD       AX,SI
              PUSH      AX
              JMP       AGAIN1
      LINE0:
              POP       AX
              OR        AX,AX
              JNS       @0
              NEG       AX
              OR        AX,8000H
         @0:
              MOV       X,AX
      ;=================
              LEA       DI,MSG2
              INC       DI
              INC       DI
              MOV       CX,16
              MOV       AX,X
     AGAIN2:
              ROL       AX,1
              JC        @1
              MOV       BYTE PTR[DI],30H
              JMP       @2
         @1:  MOV       BYTE PTR[DI],31H
         @2:  INC       DI
              LOOP      AGAIN2
;====================================
              LEA       DI,MSG3
              INC       DI
              INC       DI
              MOV       CX,4
              MOV       AX,X
     AGAIN3:
              ROL       AX,1
              ROL       AX,1
              ROL       AX,1
              ROL       AX,1
              MOV       DX,AX
              AND       DX,0FH
              OR        DL,30H
              CMP       DL,39H
              JBE       @3
              ADD       DL,7
         @3:
              MOV       BYTE PTR [DI],DL
              INC       DI
              LOOP      AGAIN3
      ;==============
              LEA       DX,MSG2
              MOV       AH,9
              INT       21H
              LEA       DX,MSG3
              INT       21H

              MOV       AH,4CH
              INT       21H
        CODE  ENDS
              END       START