Hi all;
this time i will show you how to use labels with c--
the demo ,self explanation.
=====================
/*************************************
* Sphinx C-- *
* *
* using labels with c-- *
* *
* By Emil Halim *
* 10-11-2013 *
*************************************/
#pragma option w32c //create Windows console EXE.
#pragma option OS //speed optimization
#jumptomain NONE //just jump to main function
#includepath "D:\Ext_c--\winlib"
#include <windows.h>
#include <MSVCRT.H-->
#pragma option ia //allow inserte asm instructions
#pragma option LST
// declare some c-- variable
byte xSrc = "This is a string, that serves for a variety of purposes, such as testing algos.";
long xNum = 20;
// declare some masm variable via labels
src19: db "1234567890123456789", 0
src20: db "12345678901234567890", 0
num1: dd 10
// code with masm label
dumy:
mov eax,1
ret
/******************************************
some functions will using data label
******************************************/
/***************
s > t >>> > 0
s = t >>> = 0
s < t >>> < 0
***************/
int strcmp1(char *s, char *t) // pure C code
{
for( ;byte *s == byte *t; s++, t++)
if (byte *s == '\0') return 0;
return DSBYTE[s] - DSBYTE[t];
}
/**********************
Testing
**********************/
void main()
{
// move label dumy address into EBX
EBX = #dumy;
EBX(); //call it via register
printf("EAX is = %d\n", EAX );
call dumy //call it directly
printf("EAX is = %d\n", EAX );
// move lable dumy address into EBX
MOV EAX,#dumy
EAX();
printf("EAX is = %d\n", EAX );
// compare EAX against label src20 address
CMP EAX,src20
CMP EAX,#src20
// move label src20 address into EAX
LEA EAX,DSWORD[src20]
printf("str is = %s\n", EAX );
//compare variable xNum contains against EAX
CMP EAX,xNum //compiled to --> cmp eax,[401160h]
// compare label num1 address against EAX
CMP EAX,num1 //compiled to --> cmp eax,401164h
CMP EAX,#num1 //compiled to --> cmp eax,401164h
// compare label num1 contains against EAX
CMP EAX,DSDWORD[num1] //compiled to --> cmp eax,[401164h]
printf("str#1 = str#2 , result = %d\n", strcmp1(#src20, #src20) );
printf("str#1 > str#2 , result = %d\n", strcmp1(#src20, #src19) );
printf("str#1 < str#2 , result = %d\n", strcmp1(#src19, #src20) );
MessageBox(0,"","",0);
}
enjoy coding masm & c--.