home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Assembly / DISP_S15.ASM < prev    next >
Assembly Source File  |  1986-09-23  |  2KB  |  82 lines

  1. CGROUP    GROUP    CODE_SEG, DATA_SEG    ;Group two segments together
  2.     ASSUME    CS:CGROUP, DS:CGROUP
  3.  
  4. CODE_SEG    SEGMENT PUBLIC
  5.  
  6.     PUBLIC    DISP_HALF_SECTOR
  7.     EXTRN    SEND_CRLF:NEAR
  8. ;-----------------------------------------------------------------------;
  9. ; This procedure displays half a sector (256 bytes)            ;
  10. ;                                    ;
  11. ;    DS:DX    Offset into sector, in bytes -- should be multiple of 16;
  12. ;                                    ;
  13. ; Uses:        DISP_LINE, SEND_CRLF                    ;
  14. ;-----------------------------------------------------------------------;
  15. DISP_HALF_SECTOR    PROC    NEAR
  16.     PUSH    CX
  17.     PUSH    DX
  18.     MOV    CX,16            ;Display 16 lines
  19. HALF_SECTOR:
  20.     CALL    DISP_LINE
  21.     CALL    SEND_CRLF
  22.     ADD    DX,16
  23.     LOOP    HALF_SECTOR
  24.     POP    DX
  25.     POP    CX
  26.     RET
  27. DISP_HALF_SECTOR    ENDP
  28.  
  29.     PUBLIC    DISP_LINE
  30.     EXTRN    WRITE_HEX:NEAR
  31.     EXTRN    WRITE_CHAR:NEAR
  32. ;-----------------------------------------------------------------------;
  33. ; This procedure displays one line of data, or 16 bytes, first in hex,    ;
  34. ; then in ASCII.                            ;
  35. ;                                    ;
  36. ;    DS:DX    Offset into sector, in bytes.                ;
  37. ;                                    ;
  38. ; Uses:        WRITE_CHAR, WRITE_HEX                    ;
  39. ; Reads:    SECTOR                            ;
  40. ;-----------------------------------------------------------------------;
  41. DISP_LINE    PROC    NEAR
  42.     PUSH    BX
  43.     PUSH    CX
  44.     PUSH    DX
  45.     MOV    BX,DX            ;Offset is more useful in BX
  46.     MOV    CX,16            ;Dump 16 bytes
  47.     PUSH    BX            ;Save the offset for ASCII_LOOP
  48. HEX_LOOP:
  49.     MOV    DL,SECTOR[BX]        ;Get 1 byte
  50.     CALL    WRITE_HEX        ;Dump this byte in hex
  51.     MOV    DL,' '            ;Write a space between numbers
  52.     CALL    WRITE_CHAR
  53.     INC    BX
  54.     LOOP    HEX_LOOP
  55.  
  56.     MOV    DL,' '            ;Add another space before characters
  57.     CALL    WRITE_CHAR
  58.     MOV    CX,16
  59.     POP    BX            ;Get back offset into SECTOR
  60. ASCII_LOOP:
  61.     MOV    DL,SECTOR[BX]
  62.     CALL    WRITE_CHAR
  63.     INC    BX
  64.     LOOP    ASCII_LOOP
  65.  
  66.     POP    DX
  67.     POP    CX
  68.     POP    BX
  69.     RET
  70. DISP_LINE    ENDP
  71.  
  72. CODE_SEG    ENDS
  73.  
  74.  
  75. DATA_SEG    SEGMENT PUBLIC
  76.     PUBLIC    SECTOR
  77. SECTOR    DB    8192 DUP (0)
  78. DATA_SEG    ENDS
  79.  
  80.  
  81.     END
  82.