;This program multiplies two UNsigned bytes, resulting in an
;UNsigned word.  Note there is no chance of an overflow!
        jmp     past
fact1   db      4
fact2   db      80
product  dw      0               ;init to zero

past:   mov     bl, fact1       
        mov     bh, 0           ;convert fact1 into word
        mov     al, fact2       ;factor 2 remains a byte

top:    or      al, al          ;check to see if zero
        je      stopit
        shr     al, 1           ;get rightmost bit
        jnc     next            ;zero bit - don't add it in
        add     product, bx      ;add into running total
next:   shl     bx, 1           ;set up for next add
        jmp     top
stopit: int     20h