Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Assembly Language > _fillbuf
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 14 Topic 3451 of 5082
Post > Topic >>

_fillbuf

by "¬a\\/b" <al@[EMAIL PROTECTED] > Jul 3, 2006 at 09:23 AM

i'm translating the chapter 8.5(from K&R2) _fillbuf in assembly for
windows (because that routine has many calls in the code (although i
thought it was better in C) ). This is the first time, i have compiled
it not run it. Is there some advise? Is it for you still assembly?
I use here the window API ReadFile
pf point an objet of this kind
thank you

typedef struct _iobuf{
int       cnt;
char*     ptr;
char*    base;
unsigned flag;
int        fd;
} FILE_m;

/* int  _fillbuf_m(FILE_m*   pf)
/* nota per essere chiamata D[pf+cnt]<0
/* s=0r, 4j, 8i, 12r, 16c, 20ra, 24P_fp
__fillbuf_m:
< c, r, i, j, r
<<  READ=1, UNBUF=4, EOF=8, ERR=16, LAST=64, BUFSIZ=1024
<<  @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
     i=@[EMAIL PROTECTED]
 i==0#.e2; #.c0;
..e0: D[i+@[EMAIL PROTECTED]
|=EOF;
..e1: D[i+@[EMAIL PROTECTED]
 ] =  0;
..e2: a=-1; ##.cf;
..c0: a=[i+@[EMAIL PROTECTED]
 a&= _ READ||EOF||ERR _; a!=READ#.e2;
     a=[i+@[EMAIL PROTECTED]
 a&LAST#.e0; 
 /* per file aggiornati ci vuole clearerr? 
     j=1; a&UNBUF#.c1; j=BUFSIZ;
..c1: a=[i+@[EMAIL PROTECTED]
 a==0!#.c2;
          a=j; a<<=1; a+=2; _malloc_m<(a); a==0#.e2;
          a+=j; [i+@[EMAIL PROTECTED]
 [i+@[EMAIL PROTECTED]
 r=@[EMAIL PROTECTED]
 c=s; ReadFile(r, a, j, c, 0);
     a==0!#.c4  | D[i+@[EMAIL PROTECTED]
|=ERR; ##.e1;
..c3: ##.e0;
..c4: *s!=j !#.c5| D[i+@[EMAIL PROTECTED]
|=LAST
..c5: --D[i+@[EMAIL PROTECTED]
 !<?#.c6  | D[i+@[EMAIL PROTECTED]
 ##.e1; 
   /* __iobStream_m==stdin, "sta" e "val_now" sono dword per 
   /* permettere input mode senza echo all'esterno
..c6: i==__iobStream_m!#.c7 | D*sta=0; D*val_now#.c7; D*sta=1; 
..c7: r=[i+@[EMAIL PROTECTED]
 a^=a; al=*r; ++D[i+@[EMAIL PROTECTED]
>>  READ, UNBUF, EOF, ERR, LAST, BUFSIZ
>>  @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
 @[EMAIL PROTECTED]
> c, r, i, j, r
ret

; int  _fillbuf_m(FILE_m*   pf)
; nota per essere chiamata D[pf+cnt]<0
; s=0r, 4j, 8i, 12r, 16c, 20ra, 24P_fp
__fillbuf_m:
    push  ecx 
    push  edx 
    push  esi 
    push  edi 
    push  edx
%define READ  1 
%define UNBUF  4 
%define EOF  8 
%define ERR  16 
%define LAST  64 
%define BUFSIZ  1024 
%define @[EMAIL PROTECTED]
  [esp+24] 
%define @[EMAIL PROTECTED]
  0 
%define @[EMAIL PROTECTED]
  4 
%define @[EMAIL PROTECTED]
  8 
%define @[EMAIL PROTECTED]
  12 
%define @[EMAIL PROTECTED]
  16 
    mov   esi,  @[EMAIL PROTECTED]
    cmp   esi,  0 
    je   .e2 
    jmp short  .c0
..e0:
    or    dword[esi+@[EMAIL PROTECTED]
  EOF
..e1:
    mov   dword[esi+@[EMAIL PROTECTED]
 ],  0
..e2:
    mov   eax,  -1
    jmp   .cf
..c0:
    mov   eax,  [esi+@[EMAIL PROTECTED]
    and   eax,   READ|EOF|ERR  
    cmp   eax,  READ 
    jne  .e2 
    mov   eax,  [esi+@[EMAIL PROTECTED]
    ; per file aggiornati ci vuole
clearerr? 
    test  eax,  LAST 
    jnz  .e0 
    mov   edi,  1
    test  eax,  UNBUF 
    jnz  .c1 
    mov   edi,  BUFSIZ
..c1:
    mov   eax,  [esi+@[EMAIL PROTECTED]
    cmp   eax,  0 
    jne  .c2 
    mov   eax,  edi
    shl   eax,  1
    add   eax,  2
    push  eax 
    call  _malloc_m
    add   esp,  4
    cmp   eax,  0 
    je   .e2 
    add   eax,  edi
    mov   [esi+@[EMAIL PROTECTED]
  eax
..c2:
    mov   [esi+@[EMAIL PROTECTED]
  eax
    mov   edx,  @[EMAIL PROTECTED]
    mov   ecx,  esp
    push  0 
    push  ecx 
    push  edi 
    push  eax 
    push  edx 
    call  ReadFile
    cmp   eax,  0 
    jne  .c4   
    or    dword[esi+@[EMAIL PROTECTED]
  ERR
    jmp   .e1
..c3:
    jmp   .e0
..c4:
    cmp   [esp],  edi 
    je   .c5 
    or    dword[esi+@[EMAIL PROTECTED]
  LAST
..c5:
    dec   dword[esi+@[EMAIL PROTECTED]
 
    jge  .c6   
    cmp   dword[esi+@[EMAIL PROTECTED]
  -1 
    je   .c3 
    jmp   .e1
; __iobStream_m==stdin, "sta" e "val_now" sono dword per 
; permettere input mode senza echo all'esterno
..c6:
    cmp   esi,  __iobStream_m 
    jne  .c7  
    mov   dword[sta],  0
    cmp   dword[val_now],  0  
    jne  .c7
    mov   dword[sta],  1
..c7:
    mov   edx,  [esi+@[EMAIL PROTECTED]
    xor   eax,  eax
    mov   al,  [edx]
    inc   dword[esi+@[EMAIL PROTECTED]
 
..cf:
%undef  READ 
%undef  UNBUF 
%undef  EOF 
%undef  ERR 
%undef  LAST 
%undef  BUFSIZ 
%undef  @[EMAIL PROTECTED]
 
%undef  @[EMAIL PROTECTED]
 
%undef  @[EMAIL PROTECTED]
 
%undef  @[EMAIL PROTECTED]
 
%undef  @[EMAIL PROTECTED]
 
%undef  @[EMAIL PROTECTED]
 
    pop   edx 
    pop   edi 
    pop   esi 
    pop   edx 
    pop   ecx
    ret
 




 14 Posts in Topic:
_fillbuf
"¬a\\/b" <al  2006-07-03 09:23:55 
Re: _fillbuf
"¬a\\/b" <al  2006-07-03 14:50:11 
Re: _fillbuf
"f0dder" <f0  2006-07-03 16:12:12 
Re: _fillbuf
"¬a\\/b" <al  2006-07-03 18:35:15 
Re: _fillbuf
"¬a\\/b" <al  2006-07-04 18:23:50 
Re: _fillbuf
"santosh" <s  2006-07-03 07:30:02 
Re: _fillbuf
"¬a\\/b" <al  2006-07-03 18:35:10 
Re: _fillbuf
"¬a\\/b" <al  2006-07-03 20:28:32 
Re: _fillbuf
Frank Kotler <fbkotler  2006-07-03 15:08:10 
Re: _fillbuf
"Julienne Walker&quo  2006-07-03 08:26:10 
Re: _fillbuf
"santosh" <s  2006-07-03 09:03:59 
Re: _fillbuf
rhyde@[EMAIL PROTECTED]   2006-07-03 13:53:46 
Re: _fillbuf
"santosh" <s  2006-07-03 14:19:48 
Re: _fillbuf
"¬a\\/b" <al  2006-07-04 18:24:10 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Thu Jul 24 17:43:26 CDT 2008.