AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

PRINT FILE PROGRAM (打印文件)

51自学网 http://www.wanshiok.com

INTRODUCTION

The following example is a simple program to read a file and print the contents to a standard printer. It gets the filename of the file to print from the DOS command prompt input line. The prompt input information is passed to the program in a buffer area of the Program Segment Prefix (PSP). The address of the Program Segment Prefix is passed to the program in the ES and DS registers when the program execution starts. This program checks the keyboard between every character printed for an escape key code to terminate execution of the program.

; This program prints a file defined on the command line.MODEL small;************* Stack Section *********************.STACK 500;************* Data Section **********************.DATApsp_seg       dw   0no_cl_mess    db  "This routine requires that a "   db    "filename be on the command line for printing."   db 0dh,0ah,"Please try with a filename.",0dh,0ah,"$"file_bad_open  db "Bad file open",0dh,0ah,"$"file_bad_read db "Bad file read",0dh,0ah,"$"printer_bad_mess  db   "!! Printer Error !!!!",0dh,0ah,"$"printing_mess db  "A file is being printed,",0dh,0ah   db   "To stop printing, Press ESC key",0dh,0ah,"$"filename       db   128 dup(0)file_handle    dw   0file_count     dw   0file_pointer   dw   offset file_bufferfile_buffer    db   1024 dup(0); ************* ----------- *********************;*************  Code Section  *******************.CODEstart     proc near  ;DS and ES are indexing PSP area   mov  al,[DS:80H]     ;load AL with size of data line   mov  dx,@data        ;get segment address of data area   mov  ds,dx           ;point DS to data area   mov  psp_seg,ES      ;save PSP address   cmp  al,1         ;?? data in DOS command line ??   ja   get_PSP_filename  ;branch if data found  ;if here, there is no data on command line   ;display error message to user and terminate   lea  dx,no_cl_mess;-------------------------terminate_display:   ;display message indexed by DX then terminate   mov  ah,09   int 21H     ;DOS Call;-------------------------terminate_program:;terminating the program    mov  ah,4CH    ;set AH for terminating function    mov  al,00     ;set terminating code variable    int 21H        ;call DOS to terminate;------------------------------------------; %%%%%%%%%%%%% ----------- %%%%%%%%%%%%%%%get_PSP_filename:  ;move PSP filename to filename buffer in our data area   mov  ax,ds   mov  es,ax    ;point ES to data segment   mov  ds,psp_seg   mov  si,82H   ;SI source is PSP data area   lea  di,filename   cld           ;make strings go forward   get_PSP_data_1:      lodsb      ;load string data byte         ;check for end of filename      cmp  al,21H         ;branch if end of string      jb  got_PSP_filename         stosb     ;store string data byte         jmp  get_PSP_data_1got_PSP_filename:   mov  al,0   stosb     ;make ASCIIZ string with zero end   push es   pop  ds   ;reset data segment pointer;try to open file   mov  ah,3dH   lea  dx,filename   mov  al,0     ;read access code   int 21H      ;DOS Call   jnc  file_open_ok   lea  dx,file_bad_open   jmp  terminate_display;+++++++++++++++++++++++++++++++++++++++++++;############### +++++++++++ ###############file_open_ok:   ;save file handle    mov  file_handle,ax    lea dx,printing_mess  ;display start message    mov  ah,09    int 21H       ;DOS Callfile_read:   ;read in block of file data    mov  ah,3fH    lea dx,file_buffer    mov  cx,1024    mov  bx,file_handle    int 21H        ;DOS Call    jnc  file_read_ok   ;branch if good read       ;else read file error occurred         ;close file        mov  ah,3eh        mov  bx,file_handle        int 21H        ;index exit error message        lea  dx,file_bad_read        jmp  terminate_displayfile_read_ok:   ;check to see if no more file data    cmp  ax,0    je   close_file   ;branch if no data left    ;else reset data block size and pointer    mov  file_count,ax    lea  bx,file_buffer    mov  file_pointer,bx;!!!!!!!!!!!!!!!!!  ^^^^^^^^  !!!!!!!!!!!!!!!!!!!!print_data_block:   ;main loop to print block of file data    ;scan keyboard to check for any keys      mov  ah,1      int 16H      jz  print_data_block_1  ;branch if no key     ;get key code out of buffer      mov   ah,0      int  16H          ;call BIOS keyboard      cmp   al,01BH         ;check key code      je   close_file    ;branch if ESCprint_data_block_1:    mov  si,file_pointer    mov  al,[si]    mov  ah,0    mov  dx,0      ;select LPT1    int 17H       ;BIOS Call    test ah,25H    jnz  printer_error    inc  si    mov  file_pointer,si    dec  file_count    jnz  print_data_block    ;loop if more data   ;else go read in next block of file data    jmp  file_read;!!!!!!!!!!!!!!!!  ^^^^^^^^  !!!!!!!!!!!!!!!!!!!!close_file:    mov  ah,3eh    mov  bx,file_handle    int  21H    ;DOS Call    jmp  terminate_program;--------------  ??????????  -------------------printer_error:      ;index exit error message      lea  dx,printer_bad_mess      jmp  terminate_display;_______________________________________________start  endp      ;end of start procedure   end  start   ;define start as beginning of program

 

 

 
上一篇:GET TIME OF DAY(获取时间)  下一篇:The 808 Virus