Category : Files from Magazines
Archive   : DDJ-9008.ZIP
Filename : LADD.LST

 
Output of file : LADD.LST contained in archive : DDJ-9008.ZIP
_OPTIMIZING WITH MICROSOFT C 6.0_
by Scott Robert Ladd

[LISTING ONE]

***********************
*** Microsoft C 6.0 ***
***********************

#include "stdio.h"

/* prototypes */

void doit(int i);

void (* func_ptr)(int i) = doit;

void doit(int i)
{
--> push bp
--> mov bp,sp
--> push di
--> push si
--> mov di,WORD PTR [bp+4]

int loop;

for (; i > 0; --i)

--> or di,di
--> jle $EX225

{
for (loop = 0; loop < 26; ++loop)

--> $F227:
--> sub si,si
--> mov WORD PTR [bp+4],di

{
printf("loop character = %c\n", 0x41 + loop);

--> $F230:
--> lea ax,WORD PTR [si+65]
--> push ax
--> mov ax,OFFSET DGROUP:$SG233
--> push ax
--> call _printf
--> add sp,4
--> inc si
--> cmp si,26
--> jl $F230
}

printf("i / 16 = %d\n\n",i / 16);

--> mov ax,di
--> cwd
--> xor ax,dx
--> sub ax,dx
--> mov cx,4
--> sar ax,cl
--> xor ax,dx
--> sub ax,dx
--> push ax
--> mov ax,OFFSET DGROUP:$SG234
--> push ax
--> call _printf
--> add sp,4
--> dec di
--> jne $F227

}

--> $EX225:
--> pop si
--> pop di
--> mov sp,bp
--> pop bp
--> ret
--> nop
}

int main(void)
{
func_ptr(100);

--> mov ax,100
--> push ax
--> call WORD PTR _func_ptr
--> add sp,2

return 0;

--> sub ax,ax
--> ret
}



[LISTING TWO]

*****************************************
*** Microsoft C 6.0 (using _fastcall) ***
*****************************************

#include "stdio.h"

/* prototypes */

void doit(int i);

void (* func_ptr)(int i) = doit;

void doit(int i)
{

--> push bp
--> mov bp,sp
--> sub sp,2
--> push ax
--> push si

int loop;

for (; i > 0; --i)

--> or ax,ax
--> jle $EX225

{
for (loop = 0; loop < 26; ++loop)

--> $F227:
--> sub si,si

{
printf("loop character = %c\n", 0x41 + loop);

--> $F230:
--> lea ax,WORD PTR [si+65]
--> push ax
--> mov ax,OFFSET DGROUP:$SG233
--> push ax
--> call _printf
--> add sp,4
--> inc si
--> cmp si,26
--> jl $F230

}

printf("i / 16 = %d\n\n",i / 16);

--> mov ax,WORD PTR [bp-4]
--> cwd
--> xor ax,dx
--> sub ax,dx
--> mov cx,4
--> sar ax,cl
--> xor ax,dx
--> sub ax,dx
--> push ax
--> mov ax,OFFSET DGROUP:$SG234
--> push ax
--> call _printf
--> add sp,4
--> dec WORD PTR [bp-4]
--> jne $F227

}

--> $EX225:
--> pop si
--> mov sp,bp
--> pop bp
--> ret
}

int main(void)
{
func_ptr(100);

--> mov ax,100
--> call WORD PTR _func_ptr

return 0;

--> sub ax,ax
--> ret

}



[LISTING THREE]

************************
*** Microsoft C 5.10 ***
************************

#include "stdio.h"

/* prototypes */

void doit(int i);

void (* func_ptr)(int i) = doit;

void doit(int i)
{
--> push bp
--> mov bp,sp
--> sub sp,2
--> push di
--> push si

int loop;

for (; i > 0; --i)

--> cmp WORD PTR [bp+4],0
--> jle $FB202
--> mov di,WORD PTR [bp+4]

{
for (loop = 0; loop < 26; ++loop)

--> $L20002:
--> sub si,si

{
printf("loop character = %c\n", 0x41 + loop);

--> $L20000:
--> lea ax,WORD PTR [si+65]
--> push ax
--> mov ax,OFFSET DGROUP:$SG206
--> push ax
--> call _printf
--> add sp,4
}

--> inc si
--> cmp si,26
--> jl $L20000
--> mov WORD PTR [bp-2],si ;loop

printf("i / 16 = %d\n\n",i / 16);

--> mov ax,di
--> cwd
--> xor ax,dx
--> sub ax,dx
--> mov cx,4
--> sar ax,cl
--> xor ax,dx
--> sub ax,dx
--> push ax
--> mov ax,OFFSET DGROUP:$SG207
--> push ax
--> call _printf
--> add sp,4

}

--> dec di
--> jne $L20002
--> mov WORD PTR [bp+4],di

--> $FB202:
--> pop si
--> pop di
--> mov sp,bp
--> pop bp
--> ret
--> nop

}

int main(void)
{
func_ptr(100);

--> mov ax,100
--> push ax
--> call WORD PTR _func_ptr
--> add sp,2

return 0;

--> sub ax,ax
--> ret
}



[LISTING FOUR]

********************
*** Watcom C 7.0 ***
********************

#include "stdio.h"

/* prototypes */

void doit(int i);

void (* func_ptr)(int i) = doit;

void doit(int i)
{
int loop;

--> push bx
--> push cx
--> push dx
--> mov cx,ax
--> jmp short L3

for (; i > 0; --i)
{
for (loop = 0; loop < 26; ++loop)
{
--> L1:
--> mov bx,0041H

printf("loop character = %c\n", 0x41 + loop);

--> L2:
--> push bx
--> mov ax,offset DGROUP:L4
--> push ax
--> call near ptr printf_
--> add sp,0004H
--> inc bx
--> cmp bx,005bH
--> jne L2

}

printf("i / 16 = %d\n\n",i / 16);

--> mov bx,0010H
--> mov ax,cx
--> cwd
--> idiv bx
--> push ax
--> mov ax,offset DGROUP:L5
--> push ax
--> call near ptr printf_
--> add sp,0004H
--> dec cx

}

--> L3:
--> test cx,cx
--> jg L1

--> pop dx
--> pop cx
--> pop bx
--> ret

}

int main(void)
{

func_ptr(100);

--> mov ax,0064H
--> call word ptr _func_ptr

return 0;

--> xor ax,ax
--> ret

}


[Listing Five]
/* Skeleton Program demonstrating the use of based pointers */

#include
#include
#include
#include

#define MAX_TAG 2000
unsigned long get_size(void);
_segment segvar; /* name a segment for use with based pointers */

/* set up structures and tags within segment segvar */

typedef mytag {
char filename[14];
unsigned long size;
mytag _based(segvar) *next;
} _based(segvar) *PTAG, TAG;

main() {

PTAG head, curptr;

/* Allocate a based heap of MAX_TAG structs. Put segment address in segvar. */

if((segvar = _bheapseg(sizeof(TAG) * MAX_TAG))) == NULLSEG){
printf("error allocating based heap \n");
exit(-1);
}

/* Allocate memory within segvar for first structure in linked list */

if((head = _bmalloc(segvar, sizeof(TAG)) == _NULLOFF) {
printf("error allocating TAG \n");
exit(-1);
}
head->size = get_size();
_fstrcpy((char far *) head->filename, get_name()); /* get a
filename and copy it to segvar */

if((head->next = _bmalloc(segvar, sizeof(TAG)) == _NULLOFF) {
printf("error allocating TAG \n");
exit(-1);
}
.
.
.
}
unsigned long get_size(void) {
return 1;
}

char *get_name(void) {
return("foo");
}


  3 Responses to “Category : Files from Magazines
Archive   : DDJ-9008.ZIP
Filename : LADD.LST

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/