home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Assembly / DISP_S14.ASM < prev    next >
Assembly Source File  |  1986-09-23  |  2KB  |  93 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.     ORG    100h
  6.  
  7.     PUBLIC    DISP_HALF_SECTOR
  8.     EXTRN    SEND_CRLF:NEAR
  9. ;-----------------------------------------------------------------------;
  10. ; This procedure displays half a sector (256 bytes)            ;
  11. ;                                    ;
  12. ; Uses:        DISP_LINE, SEND_CRLF                    ;
  13. ;-----------------------------------------------------------------------;
  14. DISP_HALF_SECTOR    PROC    NEAR
  15.     XOR    DX,DX            ;Start at beginning of SECTOR
  16.     MOV    CX,16            ;Display 16 lines
  17. HALF_SECTOR:
  18.     CALL    DISP_LINE
  19.     CALL    SEND_CRLF
  20.     ADD    DX,16
  21.     LOOP    HALF_SECTOR
  22.     INT    20h
  23. DISP_HALF_SECTOR    ENDP
  24.  
  25.     PUBLIC    DISP_LINE
  26.     EXTRN    WRITE_HEX:NEAR
  27.     EXTRN    WRITE_CHAR:NEAR
  28. ;-----------------------------------------------------------------------;
  29. ; This procedure displays one line of data, or 16 bytes, first in hex,    ;
  30. ; then in ASCII.                            ;
  31. ;                                    ;
  32. ;    DS:DX    Offset into sector, in bytes.                ;
  33. ;                                    ;
  34. ; Uses:        WRITE_CHAR, WRITE_HEX                    ;
  35. ; Reads:    SECTOR                            ;
  36. ;-----------------------------------------------------------------------;
  37. DISP_LINE    PROC    NEAR
  38.     PUSH    BX
  39.     PUSH    CX
  40.     PUSH    DX
  41.     MOV    BX,DX            ;Offset is more useful in BX
  42.     MOV    CX,16            ;Dump 16 bytes
  43.     PUSH    BX            ;Save the offset for ASCII_LOOP
  44. HEX_LOOP:
  45.     MOV    DL,SECTOR[BX]        ;Get 1 byte
  46.     CALL    WRITE_HEX        ;Dump this byte in hex
  47.     MOV    DL,' '            ;Write a space between numbers
  48.     CALL    WRITE_CHAR
  49.     INC    BX
  50.     LOOP    HEX_LOOP
  51.  
  52.     MOV    DL,' '            ;Add another space before characters
  53.     CALL    WRITE_CHAR
  54.     MOV    CX,16
  55.     POP    BX            ;Get back offset into SECTOR
  56. ASCII_LOOP:
  57.     MOV    DL,SECTOR[BX]
  58.     CALL    WRITE_CHAR
  59.     INC    BX
  60.     LOOP    ASCII_LOOP
  61.  
  62.     POP    DX
  63.     POP    CX
  64.     POP    BX
  65.     RET
  66. DISP_LINE    ENDP
  67.  
  68. CODE_SEG    ENDS
  69.  
  70.  
  71. DATA_SEG    SEGMENT PUBLIC
  72.     PUBLIC    SECTOR
  73. SECTOR    DB    16 DUP (10h)
  74.     DB    16 DUP (11h)
  75.     DB    16 DUP (12h)
  76.     DB    16 DUP (13h)
  77.     DB    16 DUP (14h)
  78.     DB    16 DUP (15h)
  79.     DB    16 DUP (16h)
  80.     DB    16 DUP (17h)
  81.     DB    16 DUP (18h)
  82.     DB    16 DUP (19h)
  83.     DB    16 DUP (1Ah)
  84.     DB    16 DUP (1Bh)
  85.     DB    16 DUP (1Ch)
  86.     DB    16 DUP (1Dh)
  87.     DB    16 DUP (1Eh)
  88.     DB    16 DUP (1Fh)
  89. DATA_SEG    ENDS
  90.  
  91.  
  92.     END    DISP_HALF_SECTOR
  93.