You're pushing the address, not the number itself. Since your number is only 1 byte, you need to load it with sign-extension and then push that 32-bit integer.
movzx eax, byte [DAT0]
push eax
push DAT1
call _printf
add esp, 8
Or you could change your format string to use "%hhd"
to print an 8-bit integer. Then it would be ok to load 3 bytes of garbage following your number, because x86 is little-endian.
push dword [DAT0] ; push a 4-byte memory source operand
push fmt ; push the address of the format string
call _printf
add esp,8
...
fmt: db "%hhd", 0xa, 0 ; print signed char as a number, not a character
Note that printf expects a 0-terminated C string, so you must have a ,0
at the end of it. It might happen to work if you get lucky and there was 0 padding after your DAT1.