O programa a seguir inicializa um contador de 16 bits em 0000H, incrementa continuamente, exibe o valor (via porta de saída simulada) e insere delay de ~1 segundo entre contagens usando loop aninhado calibrado para clock 3 MHz.
ORG 1000H ; Endereço inicial do programa
LXI H, 0000H ; Inicializa contador 16 bits (H-L) com 0
MVI B, 00H ; Byte alto do contador de delay (loop externo)
MVI C, 00H ; Byte baixo do contador de delay (loop interno)
DISPLAY: ; Rotina de saída simulada
MOV A, L ; Obtém byte baixo do contador
OUT 01H ; Sai para porta 01H (ex.: LEDs/display)
MOV A, H ; Obtém byte alto
OUT 02H ; Sai para porta 02H
INCREMENT:
INX H ; Incrementa contador 16 bits (HL = HL + 1)
DELAY_1S: ; ~1 segundo delay @ 3 MHz (~1M ciclos aprox)
LXI B, 0F424H ; Carrega BC com 62.500 (0xF424) para loops externo+interno
DELAY_LOOP:
DCX B ; Decrementa BC (10 T-states)
MOV A, B ; Verifica byte alto (4 T-states)
ORA C ; OR com byte baixo (4 T-states)
JNZ DELAY_LOOP ; Salta se não zero (10/7 T-states)
; Total ~ 62.500 * 28 ≈ 1.75M T-states ≈ 0.58s @ 3MHz
; Ajuste constante para 1s exato (ex.: 0x10000 = 65.536)
JMP DISPLAY ; Repete indefinidamente
DCX B + JNZ para decremento 16 bits. Constante 0F424H resulta ~0.58s a 3 MHz; use 10000H para ~1s.OUT pela rotina de display real do seu hardware (ex.: display mapeado em memória, saída serial).Tecnologia Eletrônica © [www.351231.com]