; 输入不超过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