Failed to display on LCD when interfacing with PIC18F4520 using ASM language
Your initialization could be more robust.

EDIT

Updated with code tested in PICDEM2+.

Please try this code:

  list n=0,c=255,r=DEC

  PROCESSOR PIC18F4520

#include &lt;p18f4520.inc&gt;

  CONFIG WDT=OFF
  CONFIG BOREN=OFF
  CONFIG OSC=INTIO67
  CONFIG LVP=OFF

  CBLOCK 0x20
    TEMP
  ENDC

#IFDEF TARGET_PICDEM2_PLUS

#DEFINE RS_MASK   0X10
#DEFINE RW_MASK   0X20
#DEFINE E_MASK    0X40
#DEFINE PWR_MASK  0X80
#DEFINE DATA_MASK 0X0F

#ELSE

#DEFINE RS_MASK   0X01
#DEFINE RW_MASK   0X02
#DEFINE E_MASK    0X04
#DEFINE DATA_MASK 0XF0

#ENDIF

    ORG     0X000

MAIN:
    CLRF    PORTD
    CLRF    TRISD
    CALL    INIT_LCD
    MOVLW   'L'
    CALL    SEND_DATA
    MOVLW   'C'
    CALL    SEND_DATA
    MOVLW   'D'
    CALL    SEND_DATA
    MOVLW   ' '
    CALL    SEND_DATA
    MOVLW   'T'
    CALL    SEND_DATA
    MOVLW   'e'
    CALL    SEND_DATA
    MOVLW   's'
    CALL    SEND_DATA
    MOVLW   't'
    CALL    SEND_DATA
    MOVLW   ' '
    CALL    SEND_DATA
    MOVLW   '1'
    CALL    SEND_DATA
    GOTO    $

INIT_LCD:
; Wait for 15 milliseconds after power on
#IFDEF PWR_MASK
    MOVLW   PWR_MASK
    MOVWF   PORTD
#ENDIF
    CLRF    TEMP
    MOVLW   0
POR_WAIT:
    ADDLW   -1
    BTFSC   STATUS,C
    BRA     POR_WAIT
    DECFSZ  TEMP,F
    BRA     POR_WAIT

    MOVLW   0X33
    CALL    SEND_CMD
    MOVLW   0X32
    CALL    SEND_CMD
    MOVLW   0X28
    CALL    SEND_CMD
    MOVLW   0X0E
    CALL    SEND_CMD
    MOVLW   0X06
    CALL    SEND_CMD
    MOVLW   0X01
    CALL    SEND_CMD
    RETURN

SEND_CMD:
    MOVWF   TEMP
#IF DATA_MASK == 0X0F
    SWAPF   TEMP,W
#ENDIF
    ANDLW   DATA_MASK
    CALL    ALLOW
#IF DATA_MASK == 0X0F
    MOVF    TEMP,W
#ELSE
    SWAPF   TEMP,W
#ENDIF
    ANDLW   DATA_MASK
    CALL    ALLOW
; Longest required delay after a command write is 4 milliseconds
    MOVLW   0X40
    MOVWF   TEMP
    MOVLW   0x01
CMD_WAIT:
    ADDLW   -1
    BTFSC   STATUS,C
    BRA     CMD_WAIT
    DECFSZ  TEMP,F
    BRA     CMD_WAIT
    RETURN

ALLOW:
#IFDEF PWR_MASK
    IORLW   PWR_MASK
#ENDIF
    MOVWF   PORTD
    IORLW   E_MASK
    MOVWF   PORTD
    XORLW   E_MASK
    MOVWF   PORTD
    RETURN

SEND_DATA:
    MOVWF   TEMP
#IF DATA_MASK == 0X0F
    SWAPF   TEMP,W
#ENDIF
    ANDLW   DATA_MASK
    IORLW   RS_MASK
    CALL    ALLOW
#IF DATA_MASK == 0X0F
    MOVF    TEMP,W
#ELSE
    SWAPF   TEMP,W
#ENDIF
    ANDLW   DATA_MASK
    IORLW   RS_MASK
    CALL    ALLOW
; Longest required delay after a data write is 40 microseconds
    MOVLW   0XA0
DATA_WAIT:
    ADDLW   -1
    BTFSC   STATUS,C
    BRA     DATA_WAIT
    RETURN

    END