重复检查过程,直到用户在 emu8086 中给出一个偶数的十六进制数
Repeating checking process until user give an even hexadecimal number in emu8086
我需要编写一个汇编语言程序(在 emu8086 中),提示用户输入一个十六进制数字字符
(“0”,......”9”
or “A”,.... “F”
), 以十进制显示在下一行,并检查这个小数是否
号码是 odd
或 not
。如果是奇数则程序将重复,如果是偶数则程序将重复
终止。如果用户输入了非法字符,则提示用户输入其他字符。
现在我像这样完成十六进制到十进制的转换:
.MODEL SMALL
.STACK 100H
.DATA
PROMPT1 DB 'Enter a hex digit : $'
PROMPT2 DB 'In decimal it is : $'
RESULT DB ?
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
LEA DX,PROMPT1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
MOV RESULT,AL
SUB RESULT,11H
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA DX,PROMPT2
MOV AH,9
INT 21H
MOV AH,2
MOV DL,'1'
INT 21H
MOV DL,RESULT
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
但是我无法完成此代码的其余部分,我该如何完成它?
.model small
.stack 100h
.data
msg1 db 10,13,'ENTER A HEX DIGIT:$'
msg2 db 10,13,'IN DECIMAL IS IT:$'
msg4 db 10,13,'ILLEGAL CHARACTER- ENTER 0-9 OR A-F:$'
evenmsg db 0dh,0ah,"Number is Even"
oddmsg db 0dh,0ah,"Number is Odd"
.code
main proc
again:
mov ax,@data
mov ds,ax
lea dx,msg1
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,al
go:
cmp bl,'9'
ja hex
jb num
je num
hex:
cmp bl,'F'
ja illegal
lea dx,msg2
mov ah,9
int 21h
\
mov ah,2
mov dl,'1'
int 21h
mov ah,2
SUB BL,17D
mov dl,bl
int 21h
sub dl,30h
add dl,10
jmp exit
num:
cmp bl,'0'
jb illegal
lea dx,msg2
mov ah,9
int 21h
mov dl,bl
mov ah,2
int 21h
jmp again
illegal:
lea dx,msg4
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,al
jmp go
exit:
xor ax,ax
mov al,dl
mov dl,2
div dl
cmp ah,1
je odd
mov ah,9
lea dx,evenmsg
int 21h
odd:
mov ah,9
lea dx,oddmsg
int 21h
mov ah,4ch
int 21h
main endp
end main
我需要编写一个汇编语言程序(在 emu8086 中),提示用户输入一个十六进制数字字符
(“0”,......”9”
or “A”,.... “F”
), 以十进制显示在下一行,并检查这个小数是否
号码是 odd
或 not
。如果是奇数则程序将重复,如果是偶数则程序将重复
终止。如果用户输入了非法字符,则提示用户输入其他字符。
现在我像这样完成十六进制到十进制的转换:
.MODEL SMALL
.STACK 100H
.DATA
PROMPT1 DB 'Enter a hex digit : $'
PROMPT2 DB 'In decimal it is : $'
RESULT DB ?
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
LEA DX,PROMPT1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
MOV RESULT,AL
SUB RESULT,11H
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA DX,PROMPT2
MOV AH,9
INT 21H
MOV AH,2
MOV DL,'1'
INT 21H
MOV DL,RESULT
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
但是我无法完成此代码的其余部分,我该如何完成它?
.model small
.stack 100h
.data
msg1 db 10,13,'ENTER A HEX DIGIT:$'
msg2 db 10,13,'IN DECIMAL IS IT:$'
msg4 db 10,13,'ILLEGAL CHARACTER- ENTER 0-9 OR A-F:$'
evenmsg db 0dh,0ah,"Number is Even"
oddmsg db 0dh,0ah,"Number is Odd"
.code
main proc
again:
mov ax,@data
mov ds,ax
lea dx,msg1
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,al
go:
cmp bl,'9'
ja hex
jb num
je num
hex:
cmp bl,'F'
ja illegal
lea dx,msg2
mov ah,9
int 21h
\
mov ah,2
mov dl,'1'
int 21h
mov ah,2
SUB BL,17D
mov dl,bl
int 21h
sub dl,30h
add dl,10
jmp exit
num:
cmp bl,'0'
jb illegal
lea dx,msg2
mov ah,9
int 21h
mov dl,bl
mov ah,2
int 21h
jmp again
illegal:
lea dx,msg4
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,al
jmp go
exit:
xor ax,ax
mov al,dl
mov dl,2
div dl
cmp ah,1
je odd
mov ah,9
lea dx,evenmsg
int 21h
odd:
mov ah,9
lea dx,oddmsg
int 21h
mov ah,4ch
int 21h
main endp
end main