org 100h xra a ; set A=0 loop: push psw ; print number as decimal call decout call padding ; print padding pop psw push psw call binout ; print number as binary call padding pop psw ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov b,a ; gray encode ana a ; clear carry rar ; shift right xra b ; xor the original ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; push psw call binout ; print gray number as binary call padding pop psw ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov b,a ; gray decode decode: ana a ; clear carry jz done ; when no more bits are left, stop rar ; shift right mov c,a ; keep that value xra b ; xor into output value mov b,a ; that is the output value mov a,c ; restore intermediate jmp decode ; do next bit done: mov a,b ; give output value ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; push psw call binout ; print decoded number as binary call padding pop psw push psw call decout ; print decoded number as decimal lxi d,nl call strout pop psw inr a ; next number ani 1fh ; are we there yet? jnz loop ; if not, do next number ret ;; Print A as two-digit number decout: mvi c,10 call dgtout mvi c,1 dgtout: mvi e,'0' - 1 dgtloop: inr e sub c jnc dgtloop add c push psw mvi c,2 call 5 pop psw ret ;; Print A as five-bit binary number binout: ani 1fh ral ral ral mvi c,5 binloop: ral push psw push b mvi c,2 mvi a,0 aci '0' mov e,a call 5 pop b pop psw dcr c jnz binloop ret ;; Print padding padding: lxi d,arrow strout: mvi c,9 jmp 5 arrow: db ' ==> $' nl: db 13,10,'$'