Here's the BASIC equivalent commands to the right of the assembly version.
Code:
FOR Duty = 50 TO $500 STEP 4
        ASM
        bsf   PWMCON1,UDIS    ; PWMCON1.1 = 1
        MOVFF _Duty,PDC0L     ; PDCOL = Duty.LowByte
        MOVFF _Duty+1,PDC0H   ; PDC0H = Duty.HighByte
        MOVFF _Duty,PDC1L     ; PDC1L = Duty.LowByte
        MOVFF _Duty+1,PDC1H   ; PDC1H = Duty.HighByte
        MOVFF _Duty,PDC2L     ; PDC2L = Duty.LowByte
        MOVFF _Duty+1,PDC2H   ; PDC2H = Duty.HighByte
        ;MOVFF _Duty,PDC3L    ; PDC3L = Duty.LowByte
        ;MOVFF _Duty+1,PDC3H  ; PDC3H = Duty.HighByte
        bcf   PWMCON1,UDIS    ; PWMCON1.1 = 0
        ENDASM
        PAUSE 50
    NEXT Duty
bsf PWMCON1,UDIS just sets bit 1 in PWMCON1. bcf PWMCON1,UDIS then
clears the UDIS bit.

MOVFF is move file to file.

MOVFF _Duty,PDC0L moves the low byte of Duty into file register PDC0L.

MOVFF _Duty+1, PDC0H moves the high byte of Duty into file register PDC0H.

Placing the underscore before the _Duty variable allows you to access the
variable declared in BASIC with assembler.

So the BASIC version would look like this;
Code:
  FOR Duty = 50 TO $500 STEP 4
    PWMCON1.1 = 1
    PDC0L = Duty.LowByte
    PDC0H = Duty.HighByte
    PDC1L = Duty.LowByte
    PDC1H = Duty.HighByte
    PDC2L = Duty.LowByte
    PDC2L = Duty.HighByte
    PDC3L = Duty.LowByte
    PDC3H = Duty.HighByte
    PWMCON1.1 = 0
    PAUSE 50
  NEXT Duty

  FOR Duty = $500 TO 50 STEP-4
    PWMCON1.1 = 1
    PDC0L = Duty.LowByte
    PDC0H = Duty.HighByte
    PDC1L = Duty.LowByte
    PDC1H = Duty.HighByte
    PDC2L = Duty.LowByte
    PDC2L = Duty.HighByte
    PDC3L = Duty.LowByte
    PDC3H = Duty.HighByte
    PWMCON1.1 = 0
    PAUSE 50
  NEXT Duty