Sunteți pe pagina 1din 4

display macro msg

mov ah,09h
lea dx,msg
int 21h
endm
data segment
menu1 db 10,13,"1)hex to bcds$"
menu1 db 10,13,"1)bcd to hex$"
db 10,13,"3)exit$"
menu3 db 10,13,"enter your choice:-$"
msg1 db 10,13,"enter the number:-$"
msg2 db 10,13,"equivalent hex:-$"
msg3 db 10,13,"equivalent bcd:-$"
msg4 db 10,13,"invalid hex number$"
msg1 db 10,13,"invalid bcd number$"
array db 6 dup(?)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
menu: mov cl,04h
mov ch,04h
mov bx,00h
display menu1
display menu2
display menu3
mov ah,01h
int 21h
cmp al,31h
je hb
cmp al,32h
je b_h
cmp al,33h
je exit
hb:display msg1
call hex_b
jmp menu
b_h:call bcd_h
call con
jmp menu
exit:mov ah,4ch
int 21h
hex_b proc
up:mov ah,01h
int 21h
call check
shl bx,cl
add bl,al
dec ch
jnz up
mov ax,bx
jmp bcd
check proc
cmp al,30h
jb invalid
cmp al,39h
jg next
sub al,30h
jmp down
next:
cmp al,41h
jb invalid
cmp al,46h
jg next1
sub al,37h
jmp down
next1:
cmp al,61h
jb invalid
cmp al,66h
jg invalid
sub al,57h
jmp down
invalid:
display msg3
jmp menu
down: ret
check endp
bcd:mov ax,bx
cwd
mov ch,0000h
mov cl,00h
bcd1:
mov bx,10
mov dx,00h
div bx
push dx
inc cl
cmp ax,0
jnz bcd1
display msg2
disp:pop dx
mov ah,02h
add dl,30h
int 21h
dec cl
jnz disp
ret
hex_b endp
bcd_h proc
display msg1
movcl,05h
lea si,array
up2:
mov ah,01h
int 21h
cmp al,30h
jb invalid1
cmp al,39h
jg invalid1
sub al,30h
mov [si],al
inc si
dec cl
jnz up2
jmp d
invalid1:display msg4
jmp menu
d:ret
bcd_h endp

con proc
display msgb
b:mov bh,00
mov cx,00
lea si,array
mov ax,10000
mov bl,[si]
mul bx
add cx,ax
inc si
mov ax,1000
mov bl,[si]
mul bx
add cx,ax
inc si
mov ax,100
mov bl,[si]
mul bx
add cx,ax
inc si
mov ax,10
mov bl,[si]
mul bx
add cx,ax
inc si
mov bl,[si]
add cx,bx
mov ax,cx
mov ch,04h
mov cl,04h
p1:rol ax,cl
push ax
and al,0fh
cmp al,09h
jbe a30
add al,37h
jmp disph
a30:add al,30h
disph:
mov ah,02h
mov dl,al
int 21h
pop ax
dec ch
jnz p1
ret
con endp

code ends
end start

S-ar putea să vă placă și