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 4,598 of 4,675   
   Paul Edwards to All   
   ss and lea on 8086   
   24 Jun 23 00:35:07   
   
   From: mutazilah@nospicedham.gmail.com   
      
   I have the following code:   
      
   void dumplong(unsigned long x)   
   {   
       static int y;   
       char *z = "0123456789abcdef";   
       char buf[9];   
      
       y = 0;   
       buf[0] = 'P';   
       buf[1] = 'P';   
       buf[2] = 'P';   
       buf[3] = 'P';   
       buf[3-y] = 'R';   
       buf[4] = 'P';   
       buf[4+y] = 'S';   
       buf[5] = 'P';   
       buf[6] = 'P';   
       buf[7] = 'P';   
      
   And Visual C++ 1.52 is generating this assembler:   
      
    x = 0006   
    buf = fff4   
    z = fff0   
    Line 5836   
   _dumplong:   
   	push	bp   
   	mov	bp,sp   
   	sub	sp,OFFSET L04604   
    Line 5837   
    Line 5838   
   	mov	ax,OFFSET L03767   
   	mov	dx,ds   
   	mov	WORD PTR -16[bp],ax   
   	mov	WORD PTR -14[bp],dx   
    Line 5839   
    Line 5841   
   	mov	WORD PTR ?y@?1??dumplong@@9@9,OFFSET 0   
    Line 5842   
   	mov	BYTE PTR -12[bp],OFFSET 80   
    Line 5843   
   	mov	BYTE PTR -11[bp],OFFSET 80   
    Line 5844   
   	mov	BYTE PTR -10[bp],OFFSET 80   
    Line 5845   
   	mov	BYTE PTR -9[bp],OFFSET 80   
    Line 5846   
   	mov	ax,OFFSET 3   
   	sub	ax,WORD PTR ?y@?1??dumplong@@9@9   
   	lea	bx,WORD PTR -12[bp]   
   	add	bx,ax   
   	mov	BYTE PTR ss:[bx],OFFSET 82   
    Line 5847   
   	mov	BYTE PTR -8[bp],OFFSET 80   
    Line 5848   
   	mov	ax,WORD PTR ?y@?1??dumplong@@9@9   
   	add	ax,OFFSET 4   
   	lea	bx,WORD PTR -12[bp]   
   	add	bx,ax   
   	mov	BYTE PTR ss:[bx],OFFSET 83   
    Line 5849   
   	mov	BYTE PTR -7[bp],OFFSET 80   
    Line 5850   
   	mov	BYTE PTR -6[bp],OFFSET 80   
    Line 5851   
   	mov	BYTE PTR -5[bp],OFFSET 80   
      
      
   I've been looking at this for hours.   
      
   Unless I've somehow stuffed up the test, this data is   
   all being set to 'P'.   
      
   Regardless of whether I do a subtraction or an addition   
   (of 0), the data is not changed.   
      
   I do have one unusual thing happening - my "ss" is set   
   to something a long way away from "ds" because this   
   is the PDOS/86 kernel and I didn't create a separate   
   stack for the kernel, I just reused the one from the   
   bootloader.   
      
   But I don't see any reason for that effect. The lea shouldn't   
   care, and the ss is explicitly used.   
      
   It is not easy to debug this because this IS what I use   
   to debug!   
      
   Original code, before I started debugging, is here:   
      
   https://sourceforge.net/p/pdos/gitcode/ci/master/tree/src/pdos.c   
      
      
   Any ideas?   
      
   Thanks. Paul.   
      
   --- 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