Mi maestro dijo que un microprocesador Intel 8086 tiene una dirección de 16 bits y una dirección física de 20 bits. ¿Cuál es la diferencia entre una dirección y una dirección física?

Significa que en 8086, las direcciones utilizadas en los programas (la dirección lógica o virtual como la llama) son de 16 bits, pero la dirección real que 8086 envía a la RAM es de 20 bits.
¿Por qué? Porque 16 bits = 64 KB de espacio de direcciones donde 20 bits de dirección = 1 MB de memoria. Por lo tanto, puede direccionar más memoria de la que es posible con un direccionamiento simple de 16 bits (16 veces más memoria en este caso).

¿Cómo? Recordemos el esquema de direccionamiento segmentado en modo real. En 8086, la dirección enviada a RAM = registro de segmento * 16 + desplazamiento (reemplace el registro de segmento y desplazamiento con cs: ip, ds: si, es: di, etc.)

Por lo tanto, aunque los registros de segmento y las compensaciones son de 16 bits, podríamos tener una dirección física de 20 bits de longitud.

(Si observa que multiplicar por 16 es lo mismo que desplazarse a la izquierda por 4. Una dirección de 16 bits desplazada a la izquierda por 4 se convierte en una dirección de 20 bits (el desplazamiento aún no se ha agregado))

Significa que el bus de datos es de 16 bits, y todos los registros y ALU son de 16 bits, mientras que la dirección física, es decir, el bus de direcciones, es de 20 bits.