<b>1.1 By DPTR</b>
MOV  DPL,#address ; 8-bit external address
MOV  DPH,#data_high_byte
MOV  A,#data_low_byte
MOVX @DPTR,A
;
<b>1.2. By either @R0 or @R1</b>
MOV  R0,#address  ; 8-bit external address
MOV  P2,#data_high_byte
MOV  A,#data_low_byte
MOVX @R0,A
;
In both cases above, an external hardware should latch
address from port 0 by ALE and catch data by /WR.
Limitation: both ways cannot be used for read 16-bit data.
;

<b>2.1. By software-emulated sequence.</b>
In this case you should re-route address latch signal
to a pin and pull-up all pins of the port 0.
;
; next line is required if address is locked
; with external flip-flops, for example, 74574.
CLR  Px.y  ; prepare address lock signal
MOV  P0,#address_low_byte
MOV  P2,#address_high_byte
SETB Px.y  ; latch/lock 16-bit address
; next two lines are required if address is latched
; with external D-latches, for example, 74573.
NOP
CLR  Px.y  ; keep address in external latch
MOV P2,#data_high_byte
MOV P0,#data_low_byte
CLR  P3.6  ; /WR emulation
NOP
SETB 3.6
;
;
<b>3.1. By appropriate MCU.</b>
Some MCU like AT89C5132, AT89C51SND1/SND2 has enchanted
external memory access mode called IDE/ATAPI interface.
This mode supports 16-bit data over 16-bit address
read and write cycles.