home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.asm.x86      Ahh, the lost art of x86 assembly      4,675 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 2,924 of 4,675   
   Frank Kotler to Kevin Mardoux   
   Re: copy bytes in a file   
   14 Aug 17 18:21:17   
   
   From: fbkotler@nospicedham.myfairpoint.net   
      
   Kevin Mardoux wrote:   
   > Hello, to day : i add :   
   > You propose to reserve a buffer for each file, then save the total result in   
   one time, or buffer   
   > ... instead of recording byte by byte   
   > Can someone give me an example?   
      
   I haven't used DOS for a long time, and A86 for even longer.   
      
   > I confirm: byte 0 and all unaltered even bytes  (Byte=2n) so     
   ,2,4,6,8,10,12...   
   > Bytes 1, 3 and all odd ones are replaced  B=2n+1)  : 1,3,5,7,9,11,13 ...   
      
   What I had in mind was roughly...   
      
   >> mov si,0080H  ;  how many Char after ?   
   >> lodsb   
   >>  cmp al,0   
   >>  jne suite   
   >>  erreur:  mov dx,offset usage   
   >>   mov ah,9   
   >>   int 21h  ; indicate the syntax : to run type " R2 S2.DAT "   
   >>   ret    ; this file will open automatiquely the file R1.DAT   
   >>   
   >> suite:   cbw   
   >> xchg ax,bx   
   >> mov byte [bx+si],00    ; 0 Terminate   
   >> inc si ; mov si,0082H   
   >>   
   >> mov ax,3d12H   
   >> mov dx,0082H         ; adresse name S2.DAT  i MUST tape it   
   >> int 21H   
   >> jb err82     ; can i open it ?   jnc   
   >> ; the user MUST type de name of the file with data 1,2,3,4...   
   >>   
   >> xchg ax,bx   ; Handle   
   >> mov ah,3fH   
   >> mov cx,0FFFFh  ;             ; size max  buffer   
   >> mov dx,offset table          ; position  file  of S2.DAT   
   >> int 21H    ; cmp ax,0000  ; JBE fermer   
   >> ; i suppose more than 0 byte to read   
   >> ; i suppose that datas of S2.DAT are on address Table   
   >>   
   >> mov word VS2,ax ;  just for information Verify S2   
   >> mov word ntest,ax ;  True number of bytes to read in the TABLE  S2.DAT   
   >> ; ntest is usefull : will count number of cycles   
   >> push bx ; i qave the handle of file S2.DAT   
   >>   
   >> mov ax,3d12H        ; i will write in this file   
   >> mov dx,offset S1R1              ; file R1.DAT   
   >> int 21H   
   >> jb err1      ; i verify : i have NO error : counter stay at 0   
   >>   
   >> xchg ax,bx  ; handle of R1.DAT in BX   
   >> mov ah,3fH   ; read  file R1   
   >> mov cx,0FFFFh              ; test a large buffer   
   >> mov dx,offset table+30000   ; i suppose file S2 is less than 30k   
   >> int 21H        ;             ; S2.DAT begin at offset TABLE   
   >> jb err2        ; same no error   
      
   mov dat_len, ax   
      
   mov si, offset table   
   mov di, offset table + 30000   
   xor cx, cx   
   xor dx, dx   
   top:   
   inc di   
   movsb   
   inc dx   
   add cx, 2   
   cmp dx, ntest   
   ja ??? ; if we run out of source first, start over?   
   cmp cx, dat_len   
   ja done ;?   
   jmp top   
   done:   
    seek back to beginning of "dest" file, handle still in bx   
    write buffer at "table + 30000", dat_len bytes   
      
   That's untested, and probably not correct syntax for A86, but something   
   along those lines...   
      
   Best,   
   Frank   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca