#80386 machine code + DOS, <del>75</del> 69 bytes

***NOTE: This is a reply to [@anatolyg's really clever 2015 answer][1], with a few tweaks to reduce score by -6 bytes. I'm only submitting this as a separate non-competing answer because it wouldn't be possible to explain fully in a comment.***

**Changes:**

- Use `SI` to reset the `BX` pointer to `100H`, since DOS sets `SI` initially to `100H` ([ref][2]).  Use that to reset `BX` instead of an `imm`. **(-1 byte)**
- Instead of using a 3/5 counter in `DX`, use `AAM` for modulo operations on counter.  IMHO, `AAM` is a really underrated instruction since it's effectively a byte-length `DIV` using only 2 bytes that can accept an `imm` value as the divisor. @Peter Cordes touches on this in his very brilliant post about [FizzBuzz in assembly][3]. **(-5 bytes)**

**Unassembled:**

Per [@Peter Cordes's request][4], instruction opcodes included in listing:

    0D 0A 24		db 13, 10, '$'          ; a CF/LF (but really it's 'OR AX,240A')
    B1 64			mov cl, 100             ; loop counter set to 100 
    33 C0			xor ax, ax              ; clear AX (+2 bytes to undo 'OR AX,240A') 
    				 
    			main_loop: 
    8B DE		    mov bx, si              ; init bx to 100h 
    40			    inc ax                  ; increment fizz counter 
    50			    push ax                 ; save fizz counter
    				 				     
    50			    push ax                 ; save ax from getting clobbered by AAM 
    D4 05			aam 5                	; AL = AL mod 5, ZF if AL = 0
    58			    pop ax                  ; restore ax 
    75 0A			jnz short buzz_done 
    83 EB 04		sub bx, 4               ; offset for output string 
    66C707 7A7A7542 mov dword ptr [bx], 'zzuB' 
    			buzz_done: 
    				 
    50				push ax 
    D4 03			aam 3 					; AL = AL mod 3, ZF if AL = 0
    58				pop ax 
    75 0A			jnz short fizz_done 
    83 EB 04		sub bx, 4 
    66C707 7A7A6946 mov dword ptr [bx], 'zziF' 
    
    			fizz_done: 
    
    84 FF		    test bh, bh 
    74 0C		    jz short num_done 
    				 
    			decimal_loop: 
    D4 0A		    aam;					; AL = AL mod 10
    04 30		    add al, '0' 			; convert to ASCII
    4B		    	dec bx 
    88 07			mov [bx], al 
    C1 E8 08		shr ax, 8 				; 'mov al, ah' that sets ZF - nice!
    75 F4			jnz decimal_loop 
    				 
    			num_done: 
    8B D3		    mov dx, bx              ; set dx to output string pointer
    B4 09		    mov ah, 9 
    CD 21		    int 21h 
    58			    pop ax                  ; restore fizz counter
    				 
    E2 C3		    loop main_loop 
    C3			    ret 

**`xxd` binary:**

    00000000: 0d0a 24b1 6433 c08b de40 5050 d405 5875  [email protected]
    00000010: 0a83 eb04 66c7 0742 757a 7a50 d403 5875  ....f..BuzzP..Xu
    00000020: 0a83 eb04 66c7 0746 697a 7a84 ff74 0cd4  ....f..Fizz..t..
    00000030: 0a04 304b 8807 c1e8 0875 f48b d3b4 09cd  ..0K.....u......
    00000040: 2158 e2c3 c3                             !X...

  [1]: https://codegolf.stackexchange.com/questions/58615/1-2-fizz-4-buzz/58779#58779
  [2]: https://codegolf.stackexchange.com/questions/132981/tips-for-golfing-in-x86-x64-machine-code/181407#181407
  [3]: https://stackoverflow.com/questions/28334034/fizzbuzz-in-assembly-segmentation-fault/37494090#37494090
  [4]: https://codegolf.stackexchange.com/questions/58615/1-2-fizz-4-buzz?page=1&tab=votes#comment198509_58779