So I am using spim and I am trying to figure out how to take a users input say "16" and then print it as 9 digit binary number. for example 16, 000010000 or say 4, 000000100, 67 01000011 etc etc always 9 spaces and in binary. I have all the input and I am currently just printing the number itself, but I want to print the binary anyone got any ideas/ tips?
Try something like this:
NineDigits db "123456789$" ;the target sting - any old junk will do mov cx,9 ;loop count move ax,value ;value to convert move bx NineDigits ;Pointer to NineDigits LoopHere: shr ax ;low order bit into carry flag mov [bx],'0' ;Assume bit is not set jnc NextDigit ;if no cary flag, it was 0 mov [bx],'1' ;if carry flag, it is 1 NextDigit: inc bx loop LoopHere ; code to print the NineDigits
Forgot offset operator on pointer load. Line 5 should have been:
move bx offset NineDigits ;Load Pointer to NineDigits
The offset could also be coded directly into the instruction like this:
mov NineDigits[bx], '0'
In this case bx is just an offset into the array. The mov [bx],'1' could also be replaced with an inc. I also notice that I built the string in reverse. I can also get rid of the loop instruction by using bx as both a loop count and an offset. With these changes, the whole snippet then becomes:
NineDigits db "123456789$" ;the target string - any old junk will do move ax,value ;value to convert mov bx,8 ;Offset to end of string LoopHere: shr ax ;low order bit into carry flag mov NineDigits[bx],'0' ;Store char '0' in array jnc PrevDigit ;if no cary flag, leave it '0' inc NineDigits[bx] ;if carry flag, turn '0' into '1' PrevDigit: dec bx ;previous element in array jb LoopHere ;loop till bx is negative ; more of your code to print the NineDigits