Write an assembly program where the user enters:

Load AL by an arbitrary number, if there is parity even, transfer 80H to the Port 0, and if there is parity odd, transfer 01H to the Port 0.

Assuming a microcontroller with an 8-bit data bus and 8-bit ports, here's an example program in x86 assembly language:

```assembly
; Initialize segment registers
mov ax, @data
mov ds, ax
mov es, ax

; Prompt user for input and store in AL
mov ah, 01h ; input function code
int 21h ; interrupt to get character from keyboard
sub al, 30h ; convert ASCII digit to binary number

; Check parity of AL
mov bl, al
xor al, ah ; XOR with high-order bits to set parity flag in AH
shr ah, 1 ; shift parity flag to LSB

; Transfer value to Port 0 based on parity
mov dx, 00h ; select Port 0
cmp ah, 00h ; if even parity
je even

odd:
mov al, 01h ; set output value to 01h
jmp out

even:
mov al, 80h ; set output value to 80h

out:
out dx, al ; transfer output value to Port 0

; Terminate program
mov ah, 4Ch ; exit function code
int 21h ; interrupt to exit program
```

The program starts by setting up the data segment and prompting the user for input. The input character is converted to a binary number and stored in the AL register. The program then uses the XOR instruction to check the parity of AL, storing the result in AH (with a bit shift to move the parity flag to the least significant bit).

Next, the program uses a compare (CMP) instruction to check the parity flag, setting the appropriate output value in AL based on whether the parity is odd or even. Finally, the program selects Port 0 using the DX register, stores the output value in AL, and transfers it to the port using the OUT instruction. The program then terminates with an interrupt call.

Here's an example of an assembly program that performs the described logic:

```assembly
.MODEL SMALL
.STACK 100H

.DATA
MSG DB 'Enter a number: $'
AL_INPUT DB ?

.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX

; Display message to enter a number
LEA DX, MSG
MOV AH, 09H
INT 21H

; Read the input number from the user
MOV AH, 01H
INT 21H
SUB AL, 30H ; convert ASCII to actual number

; Check the parity of the input number
MOV BL, AL ; save AL in BL for later
AND AL, 1H ; mask out all bits except LSB

; If parity is even, transfer 80H to Port 0
CMP AL, 0H
JE EVEN_PARITY
; If parity is odd, transfer 01H to Port 0
MOV AL, 01H
JMP TRANSFER

EVEN_PARITY:
MOV AL, 80H

TRANSFER:
MOV DX, 0H ; Port 0
OUT DX, AL

; Terminate the program
MOV AH, 4CH
INT 21H
MAIN ENDP

END MAIN
```

This program uses interrupt 21H with function 01H to read the input number from the user. The AL register is then checked for parity by masking out all bits except the least significant bit (LSB). If the LSB is 0, the program transfers 80H to Port 0; otherwise, it transfers 01H. Finally, the program terminates using interrupt 21H with function 4CH.