汇编,输入八进制,输出十六进制

来源:百度知道 编辑:UC知道 时间:2024/06/26 04:12:43
P1 SEGMENT
ORG 100H
ASSUME CS:P1,DS:P1,ES:P1,SS:P1
P2 PROC NEAR
XOR BX,BX
MOV CX,6
L1:MOV AH,1
INT 21H
CMP AL,0DH
JNE L2
CMP AL,30H
JB L1
CMP AL,37H
JA L1
SUB AL,30H
TEST BX,0E000H
JNE L7
PUSH CX
MOV CL,3
SHL BX,CL
ADD BL,AL
POP CX
LOOP L1
MOV CX,4
L2:XOR DX,DX
PUSH CX
MOV CX,4
L8:SHL BX,1
RCL DX,1
LOOP L8
CMP DL,9
JA L4
L3:ADD DL,30H
JMP L5
L4:ADD DL,37H
L5:MOV AH,2
INT 21H
POP CX
LOOP L2
L7:INT 20H
ENTER DB 0DH,0AH,24H
ERROR DB "ERROR",0DH,0AH,24H
P2 ENDP
P1 ENDS
END P2

请各位指导指导,输不出答案。

;汇编,输入八进制,输出十六进制
code segment
assume cs:code,ds:code
org 100h
start:
push cs
pop ds
Again:lea dx,Tips1
mov ah,9
int 21h ;显示提示
xor bp,bp ;BP清0
mov cx,6
@In:mov ah,0
int 16h ;无回显输入
cmp al,1bh ;Esc退出程序
jz quit
cmp al,0dh
jz Show ;回车结束输入
cmp al,'0'
jb @In
cmp al,'7';数据校验
ja @In
mov ah,0eh
int 10h ;显示有效输入
and al,0fh
shl bp,1
shl bp,1
shl bp,1 ;BP×8
mov ah,0
add bp,ax ;BP+AX
loop @In

Show:lea dx,Tips2
mov ah,9
int 21h ;显示结果
mov cx,4
lop:push cx
mov cl,4
rol bp,cl
mov ax,bp
and al,0fh
or al,30h
cmp al,'9'
jbe Q1
add al,7
Q1:mov ah,0eh
int 10h ;化为十六进制显示
pop cx
loop lop
mov al,'H'
int 10h
jmp Again
quit:
mov ah,4ch
int 21h
Tips1 db 0dh,0ah,09,'Input(0-777777Q),Esc to Quit: $'