.MODEL    SMALL

.DATA?

     PUBLIC    SECTOR
SECTOR    DB   8192 DUP (?)

.CODE

     PUBLIC    DISP_HALF_SECTOR
     EXTRN     SEND_CRLF:PROC
;-----------------------------------------------------------------------;
; Este procedimiento visualiza la mitad de un sector (256 bytes).       ;
; A la entrada: DS:DX    Desplazamiento dentro del sector, en bytes     ;
;                        -- deber  ser m£ltiplo de 16.                  ;
; Usa:         DISP_LINE, SEND_CRLF                                     ;
;-----------------------------------------------------------------------;
DISP_HALF_SECTOR    PROC
     PUSH CX
     PUSH DX
     MOV  CX,16               ;Visualiza 16 l¡neas
HALF_SECTOR:
     CALL DISP_LINE
     CALL SEND_CRLF
     ADD  DX,16
     LOOP HALF_SECTOR
     POP  DX
     POP  CX
     RET
DISP_HALF_SECTOR    ENDP



     PUBLIC    DISP_LINE
     EXTRN     WRITE_HEX:PROC
     EXTRN     WRITE_CHAR:PROC
;-----------------------------------------------------------------------;
; Este procedimiento muestra una l¡nea de datos, o 16 bytes, primero en ;
; hex y despu‚s en ASCII.                                               ;
;                                                                       ;
; A la entrada:     DS:DX     Desplazamiento dentro del sector, en bytes;
;                                                                       ;
; Usa:         WRITE_CHAR, WRITE_HEX                                    ;
; Lee:         SECTOR                                                   ;
;-----------------------------------------------------------------------;
DISP_LINE      PROC
     PUSH BX
     PUSH CX
     PUSH DX
     MOV  BX,DX               ;El desplazamiento es m s util en BX
     MOV  CX,16               ;Vuelca 16 bytes
     PUSH BX                  ;Salva el desplazamiento para ASCII_LOOP
HEX_LOOP:
     MOV  DL,SECTOR[BX]       ;Lee 1 byte
     CALL WRITE_HEX           ;Vuelca este byte en hex
     MOV  DL,' '              ;Escribe un espacio entre n£meros
     CALL WRITE_CHAR
     INC  BX
     LOOP HEX_LOOP

     MOV  DL,' '              ;A¤ade otro espacio delante de los caracteres
     CALL WRITE_CHAR
     MOV  CX,16
     POP  BX                  ;Desplazamiento de retorno a SECTOR
ASCII_LOOP:
     MOV  DL,SECTOR[BX]
     CALL WRITE_CHAR
     INC  BX
     LOOP ASCII_LOOP

     POP  DX
     POP  CX
     POP  BX
     RET
DISP_LINE ENDP


     END
