assume cs:code
code segment
start:
call readHex
call print
mov ah,4ch
int 21h
;print (ax) in decimal
print proc near
xor cx, cx
mov bx, 10
Q0:
xor dx, dx
div bx
xor dx, 0e30H
push dx
inc cx
cmp ax, 0
jnz Q0
Q1:
pop ax
int 10h
loop Q1
ret
print endp
;read a Hex number (16bit)
;输入数据存储在ax中返回
;不做输入数据有效性检查
readHex proc near
mov cx,0404h
mov bx,0
mov ah,1
L0:
int 21h
cmp al,'F'
ja L1
cmp al,'9'
ja L2
jmp L3
L1:
sub al,20H
L2:
sub al,7H
L3:
sub al,30H
shl bx,cl
or bl,al
dec ch
jnz L0
;
mov ah,0eh
mov al,0dh
int 10h
mov al,0ah
int 10h
mov ax, bx
ret
readHex endp
code ends
end start
;输入4位16进制数,将其以10进制的形式显示
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START:
JMP BBB
MSG DB 10,13,'please input a number(hex):','$'
T1 DB 0,1,2,3,4,5,6,7,8,9
db 10,10,11,11,12,12,13,13,14,14,15,15
T2 db '0123456789aAbBcCdDeEfF'
BBB:
PUSH CS
POP DS
PUSH CS
POP ES
LEA DX,MSG
MOV AH,9
INT 21H
;----------------------
MOV AX,0
MOV CX,4
PUSH AX
@0:
MOV AH,1
INT 21H
LEA SI,T2
LEA DI,T1
@1: CMP AL,[SI]
JE @2
INC SI
INC DI
JMP @1
@2: MOV AL,[DI]
MOV AH,0
MOV SI,AX
POP AX
MOV BL,16
MOV BH,0
MUL BX
ADD AX,SI
PUSH AX
LOOP @0
LINE0:
POP AX
CALL DISPNUM
;-------------------------
MOV AH,4CH
INT 21H
; 显示十进制整型数值子程序
DISPNUM PROC NEAR
; 将要显示的数据放入AX中
JMP DISPSUB
Y DB 10,13,0,0,0,0,0,'$'
DISPSUB: MOV DX,0
MOV BX,10
DIV BX
MOV BYTE PTR[Y+6],DL ;保存个位
MOV DX,0
DIV BX
MOV BYTE PTR[Y+5],DL ;保存十位
MOV DX,0
DIV BX
MOV BYTE PTR[Y+4],DL ;保存百位
MOV DX,0
DIV BX
MOV BYTE PTR[Y+3],DL ;保存千位
MOV BYTE PTR[Y+2],AL ;保存万位
;------------------------
MOV AL,BYTE PTR[Y+2]
ADD AL,30H ;万位转ASC2
MOV BYTE PTR[Y+2],AL
;---------------------------
MOV AL,BYTE PTR[Y+3]
ADD AL,30H ;千位转ASC2
MOV BYTE PTR[Y+3],AL
;---------------------------
MOV AL,BYTE PTR[Y+4]
ADD AL,30H ;百位转ASC2
MOV BYTE PTR[Y+4],AL
;--------------------------
MOV AL,BYTE PTR[Y+5]
ADD AL,30H ;十位转ASC2
MOV BYTE PTR[Y+5],AL
;---------------------------
MOV AL,BYTE PTR[Y+6]
ADD AL,30H ;个位转ASC2
MOV BYTE PTR[Y+6],AL
;-----------------------------
MOV DI,1
DISP1:
INC DI
CMP DI,6
JE DISPEXIT
CMP BYTE PTR[Y+DI],'0'
JNE DISPEXIT
MOV BYTE PTR[Y+DI],' '
JMP DISP1
DISPEXIT:
MOV AH,9
LEA DX,Y
INT 21H
RET
DISPNUM ENDP
CODE ENDS
END START
是那种汇编,win32汇编还是8080,要用控制台还是窗口界面输出
原则:0-9对应0-9,ABCDEF对应10,11,12,13,14,15
设计思路:
1、读取输入控件(或Interbox)的数字,并以&H(十六进制)的integer类型保存;
2、调用 &O(十进制);
3、输出数据。