I want to write an assembly program to convert Hexadecimal to Binary in 8086 assembly language. I am using Winasm as my compiler.
However i have no idea how to write this code.
Can anyone shed some light?

thanks in advance!

Recommended Answers

All 4 Replies

I want to write an assembly program to convert Hexadecimal to Binary in 8086 assembly language. I am using Winasm as my compiler.
However i have no idea how to write this code.
Can anyone shed some light?

thanks in advance!

Hello,

how is your hex value coded and stored, char, reg/data segment?

If you want to output the binary (0/1) of a register's content, for example reg bl, you only need to get its bits by left-rotating bl through the carry flag (rcl). But if you really want to convert a hexadecimal number into its binary representation you have to code the hex number like a char priorly.

This macro converts aByte into its binary, converts it to asccii 30h/31h and output the eight figures 0/1 on screen by using dos function 02h (sorry, not tested till now):

bioBin macro aByte                      ; binary (0/1) output of aByte to screen 
local lup                               ; local symbol
      push   ax                         ; save our regs (flag reg should also be saved)
      push   cx                         ;
      push   dx                         ;
      mov    bl, aByte                  ; move aByte into bl reg
      mov    cx, 8                      ; Loop counter, a byte has 8 bits
      mov    ah, 2h                     ; DOS function to output one char from dl
                                        ; the gist of the matter is the four-line lup
lup:  rcl    bl, 1                      ; left-rotating bl through carry CF
      mov    dl, 30h                    ; make an ASCII out of it, ascii = number + '0'
      adc    dl, 0                      ; Add with carry, that is ascii=30h+0 or 30h+1
      int    21h                        ; jump to DOS and execute 2h there
      loop   lup                        ; dec cx and repeat until cx = 0
      pop    dx                         ; revive our regs
      pop    cx                         ;
      pop    ax                         ;
endm  bioBin

I hope it will work fine (took some code fragments from my older resources and modified them into a macro, not tested till now, yet, i am hopeful it will work) Btw, aByte can be a constant, a reg, also an address like byte ptr [bx].

; How to make use of the macro?
bioBin dh             ; reg dh contains a byte to output in a binary way
;or
bioBin 15H            ; 15H to output its binary  rep. (possibly your case?) 
;or
bioBin byte ptr [bx]  ; where bx points to a byte in data segment

If you don't care macros:
1. Drop lines 1, 2 and 18, maybe the pushs and pops too
2. In line #6 replace aByte by for example 20H

-- tesu

Hi wayn3san

I have neither MSN nor ICQ. You can easily post your questions here.

Here on daniweb you are really sure that your problems be read and may also be solved by other more adept experts.

-- tesu

its because bro,i dont really get what are you projecting to me..thats why i really need your help.im really weak at this assembly language!

btw,"how is your hex value coded and stored, char, reg/data segment?"
i think i want to store it at data segment. how am i gonna write this in?

and , if i input your aByte macro,will it work to convert my Hexa to Binary? as i've not tried it.im still working on the Input of the program..

and , regarding the last syntax, i dont really get what are you trying to say to me..
enlighten me please ?

THANKS A MILLION

title convert from hexadecimal to binary
dosseg
.model small
.stack 100h
.data

msgstar		db 0dh,0ah,0dh,0ah,"*******************************************************************************",0dh,0ah,"$"
msgintro	db "                                 PROGRAM FUNCTION",0dh,0ah,
				   "                      TO CONVERT HEXADECIMAL NUMBER INTO BINARY NUMBER","$"
msginput	db  0dh,0ah,"Your HEXADECIMAL INPUT (MAXIMUM FF) :",0dh,0ah,"$"
msgafter	db 	0dh,0ah,"Your INPUT AFTER CONVERT INTO BINARY : ",0dh,0ah,"$"
msgagain	db	0dh,0ah,0dh,0ah,"DO YOU WANT TO TRY AGAIN ?",0dh,0ah,"PRESS (y OR Y) TO TRY AGAIN,PRESS OTHER KEY TO TERMINATE:",0dh,0ah,"$"
msgmax		db	0dh,0ah,0dh,0ah,"YOUR INPUT HAD REACH MAXIMUM 8 DIGITS / BIT , CALCULATION WILL START NOW",0dh,0ah,"$"
blank		db	0dh,0ah,"$"
error		db  0dh,0ah,"INVALID INPUT, ONLY 1 AND 0 IS ALLOW. PROGRAM WILL TERMINATE NOW.",0dh,0ah,"$"
print		dw	0
count		dw	0
num		dw	0

.code
main	proc
		mov ax,@data
		mov ds,ax
		
		mov ax,0
		mov bx,0
		mov cx,0
		mov dx,0
		mov print,0	; reset evrything used in program to makesure the calculation will be correct

		mov count,0	; after user request repeat
		mov num,0
		
		mov dx,offset msgstar ;display start (decoration)
		mov ah,9
		int 21h
		
		mov dx,offset msgintro ;display intro message
		mov ah,9
		int 21h
		
		mov dx,offset msgstar ;display start (decoration)
		mov ah,9
		int 21h
		
		
		mov	dx,offset msginput ;display input message
		mov ah,9
		int 21h
		
		mov cx,-1 ; assign -1 into cx to act as counter
		
	

input:	mov ah, 00h
		int 16h
		cmp ah, 1ch
		je exit

number: cmp al, '0'
		jb input
		cmp al, '9'
		ja uppercase
		sub al, 30h
		call process
		jmp input

uppercase: 	cmp al, 'A'
	   		 jb input
		    cmp al, 'F'
			ja lowercase
			sub al, 37h
			call process
			jmp input

lowercase: 	cmp al, 'a'
			jb input
			cmp al, 'f'
			ja input
			sub al, 57h
			call process
			jmp input

			loop input

process: 	mov ch, 4
			mov cl, 3
			mov bl, al

convert:	mov al, bl
			ror al, cl
			and al, 01
			add al, 30h

			mov ah, 02h
			mov dl, al
			int 21h

			dec cl
			dec ch
			jnz convert

			mov dl, 20h
			int 21h
ret

exit:
int 20h

	
	
main EndP
end main

this is my code but im not able to project the Input that i insert.
whenever i input the number,it automatic will output the hexa into Binary

how can i make it project its Input?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.