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,922 of 4,675   
   Kevin Mardoux to All   
   Re: copy bytes in a file   
   13 Aug 17 08:20:11   
   
   From: mardou2k@nospicedham.gmail.com   
      
   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 confirm: byte 0 and all unaltered even bytes  (Byte=2n) so  0,   
   ,4,6,8,10,12...   
   Bytes 1, 3 and all odd ones are replaced  B=2n+1)  : 1,3,5,7,9,11,13 ...   
      
   Regards Kevin   
      
      
      
      
   Le vendredi 4 août 2017 17:47:42 UTC+2, Kevin Mardoux a écrit :   
   > I try this it is OK   
   >    
   >  may be somebody have a better solution ?   
   >    
   >    
   > ; the file R1 containts bytes value A,a,B,b,C,c,D,d....   
   > ; the file S2 contain 1,2,3,4,5,6...   it is my table   
   > ; The aim to have il file R1 with  bytes A,1,B,2,C,3,D,4....   
   >    
   > ; i use A86 8-16 bytes compilator   
   > ; R2.COM is the name of this file   
   >    
   > 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    
   >    
   > dec byte testok  ; if no error before, i comme here   
   >    
   > jmp short continue     
   >                         ; this part count errors   
   > err82: inc byte cerr82   
   > jmp short continue   
   > err1:  inc byte cerr1   
   > jmp short continue   
   > err2:  inc byte cerr2   
   > continue:   
   >    
   > tesbou:  mov ax,4200H         ; position  file   
   > inc word verify         ; i come here    number   ?   
   > ; word verify just a test  > the counter indicate a good answer   
   >    
   > xor cx,cx             ; begin byte 0   
   > confil:  mov dx,1   
   >             ;  i suppose i read the byte 1 of the file R1.DAT   
   >    
   > ; the value of confil is   BA 01 01  next BA 03 01    next BA 0501   
   > ; if i do  mov dx,offset table+30000 ; the size of the file grow   
   >    
   > int 21H   
   > ; i use a counter : BA 0101  BA 0301  BA 0501 "BA" is "mov dx"   
   > mov ax, word confil+1   ; next step read the byte 1 +2 = 3   
   > add ax,2   
   > mov word confil+1,ax ;  I prepare for the next test   
   >    
   > mov ah,40H   
   > mov cx,1                     ; write 1 byte   
   >    
   >   conta: mov dx,offset table   ; + 1 by test   
   > int 21H   
   >   mov ax, word conta+1   ; i suppose i read the 1st byte   
   >   add ax,1               ; then i read the 2nd   
   >   mov word conta+1,ax    ;  then the 3rd   
   >                         ; i use it like a counter   
   >    
   > mov ax,word ntest   ; i count the number of bytes in file S2.DAT   
   > dec ax   
   > zontest: mov word ntest,ax   
   > cmp ax,0          ; byte to read ?  yes do again   
   > jnz tesbou        ; no byte to read ; go away   
   >    
   > mov dx,82H   
   > fermer: mov ah,3eH   ; i close  S2.DAT   
   > int 21H   
   > pop bx   
   > mov dx,offset S1R1   ; AH stay at value 3E   
   > int 21H   
   >    
   > ; part below only to register informations   
   >    
   > jmp short openfil  ; this part to verify   
   >    
   > crefil:           ; i register in a file errors a number of byte read   
   > mov ah,3ch   
   > mov dx,offset fildat   
   > xor cx,cx              ; attribute   
   > int 21h    ; if FIL.DAT do not exist, i have an error, but it don't care   
   >           ;  the i have FIL.DAT size 0 ; second try fileexist, it is ok   
   >    
   > openfil:   
   > mov ax,3d12h   
   > mov dx,offset fildat   
   > int 21h   
   > jb crefil   
   > xchg ax,bx  ; save the handle   
   >    
   > mov ax,4202h   ;  handle in BX   
   > xor cx,cx         ; begin byte 0   
   > xor dx,dx  ; no offset   
   > int 21h   
   > jc erreur1   
   >    
   > mov dx,ax   
   > mov ax,4200h  ;    
   > xor cx,cx   
   > int 21h   
   >    
   > mov ah,40h     ; write file  ;  BX keep same value   
   > mov cx,16     ; write 16 bytes   1 line is easy to read   
   > mov dx,offset verify   
   > int 21h   
   > jb erreur1   
   >    
   > mov ah,3eh     ; close   ; mov bx,[offset] handle   
   > int 21h   
   > mov ah,09   
   > mov dx,offset txt   
   > int 21h   
   > int 20h   
   >    
   > txt db:    
   > verify dw: ,0  ; count number of test   "tesbou"   ; 2 bytes   
   > VS2  dw:   ,0  ; number of byte read in S2.DAT    
   > db:  ,9        ; separator  again 1 byte   
   >    
   > cerr82 db: ,0   ;  1 B    is the inkey correct ?   
   > cerr1 db:  ,0   ;  1 b    about main file R1.DAT   
   > cerr2 db:  ,0   ;  1 b      
   > testok db: ,0   ; if ok i read value FF   
   > db:        ,9   
   > fildat db: "FIL.DAT",0,36   ; used for TXT error and History File   
   > erreur1:   
   > mov dx,offset fildat   
   > mov ah,09   
   > int 21h   
   > int 20H   
   >    
   > S1R1 db: "R1.DAT" ,0   
   > ntest dw: ,0   
   > usage db: "R2 S2.DAT"  ,24H   
   > table db:   
   > ret   
   >    
   > Best regards   
   > Kevin   
      
   --- 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