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 3,406 of 4,675    |
|    luserdroog to luserdroog    |
|    Re: indexing sp in 8086    |
|    12 May 18 21:00:27    |
   
   From: luser.droog@nospicedham.gmail.com   
      
   On Saturday, May 12, 2018 at 10:24:49 AM UTC-5, luserdroog wrote:   
      
   > Current line-up:   
   > SI is forth IP   
   > SP is forth data stack ptr   
   > BP used for indexing stack   
   > DI is forth return stack ptr   
   > AX,CX,DX,BX free for functions to use   
   >   
      
   Custom cpp macro assembler.   
      
   $ cat forth.h   
   #define AX 0   
   #define CX 1   
   #define DX 2   
   #define BX 3   
   #define SP 4   
   #define BP 5   
   #define SI 6   
   #define DI 7   
   #define BX_SI 0   
   #define BX_DI 1   
   #define BP_SI 2   
   #define BP_DI 3   
   #define SI_ 4   
   #define DI_ 5   
   #define BP_ 6   
   #define BX_ 7   
   #define LODS 0xAD   
   #define NEXT LODS, JMP_(R,AX)   
   #define JMP_(m,r) 0xff,MRM(m,5,r)   
   #define PUSHRSP(r) LEA(,B,DI,DI_),0xfc, MOV(,Z,r,DI_)   
   #define POPRSP(r) MOV(F,Z,r,DI_), LEA(,B,DI,DI_),4   
   #define POP(r) 0x58+r   
   #define PUSH(r) 0x50+r   
   #define F -2   
   #define R 3   
   #define Z 0   
   #define B 1   
   #define W 2   
   #define MRM(m,r,r_m) 0##m##r##r_m   
   #define LEA(to,m,r,r_m) to+0x8d,MRM(m,r,r_m)   
   #define MOV(to,m,r,r_m) to+0x8b,MRM(m,r,r_m)   
   #define ADDAX 0x05   
   #define TEST(m,r,r_m) 0x85,MRM(m,r,r_m)   
   #define JZ 0x74   
   #define INC_(m,r_m) 0xff,MRM(m,0,r_m)   
   #define DEC_(m,r_m) 0xff,MRM(m,1,r_m)   
   #define ADD(to,m,r,r_m) to+0x03,MRM(m,r,r_m)   
   #define SUB(to,m,r,r_m) to+0x2b,MRM(m,r,r_m)   
   #define IMUL(m,r_m) 0xf7,MRM(m,5,r_m)   
      
      
   static inline int   
   forth(char *mem){   
    char image[] = {   
   00 5, 'd','o','c','o','l',0, PUSHRSP(SI), ADDAX,4,0, MOV(,R,DI,AX),NEXT,   
   20, 4, 'd','r','o','p', POP(AX),NEXT,   
    9, 4, 's','w','a','p', POP(AX),POP(BX),PUSH(AX),PUSH(BX),NEXT,   
   12, 3, 'd','u','p',0, MOV(,R,BP,SP), MOV(,B,AX,BP_),0, PUSH(AX),NEXT,   
   14, 4. 'o','v','e','r', MOV(,R,BP,SP), MOV(,B,AX,BP_),2, PUSH(AX),NEXT,   
   14, 3, 'r','o','t',0, POP(AX),POP(BX),POP(CX),PUSH(BX),P   
   SH(AX),PUSH(CX),NEXT,   
   14, 4, '-','r','o','t', POP(AX),POP(BX),POP(CX),PUSH(AX),P   
   SH(CX),PUSH(BX),NEXT,   
   14, 5, '2','d','r','o','p',0, POP(AX),POP(AX),NEXT,   
   12, 4, '2','d','u','p', MOV(,R,BP,SP), MOV(,B,AX,BP_),0, M   
   V(,B,BX,BP_),2, PUSH(BX),PUSH(AX),NEXT,   
   18, 5, '2','s','w','a','p',0, POP(AX),POP(BX),POP(CX),POP(DX),PU   
   H(BX),PUSH(AX),PUSH(DX),PUSH(CX),NEXT,   
   18, 4, '?','d','u','p', MOV(,R,BP,SP), MOV(,B,AX,BP_),0, TEST(R,AX,AX),   
   JZ,1, PUSH(AX),NEXT,   
   18, 2, '1','+', MOV(,R,BP,SP), INC_(B,BP_),0, NEXT,   
   11, 2, '1','-', MOV(,R,BP,SP), DEC_(B,BP_),0, NEXT,   
   11, 1, '+',0, POP(AX), MOV(,R,BP,SP), ADD(F,B,AX,BP_),0, NEXT,   
   12, 1, '-',0, POP(AX), MOV(,R,BP,SP), SUB(F,B,AX,BP_),0, NEXT,   
   12, 1, '*',0, POP(AX),POP(BX), IMUL(R,BX), PUSH(AX), NEXT,   
   11, 4, 'e','x','i','t', POPRSP(SI),NEXT,   
   13, 3, 'l','i','t',0, LODS,PUSH(AX),NEXT,   
   10, 1, '!',0, POP(BX), POP(AX), MOV(F,Z,AX,BX), NEXT,   
      
    };   
    return memcpy(mem, image, sizeof image);   
   }   
      
   --- 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