ZealOS/src/Doc/HelloWorld.DD
2020-02-15 17:56:05 -06:00

99 lines
1.6 KiB
Text
Executable file

$HL,1$//Press F5 in the editor to compile and run.
--------Hello.HC---------
"Hello World\n";
--------Hello.HC---------
U0 Main()
{
"Hello World\n";
}
Main;
--------Hello.HC---------
U0 MyPrint(U8 *st)
{
"%s",st;
}
MyPrint("Hello World\n");
--------Hello.HC---------
U0 MyPrint2(U8 *st1,U8 *st2) //Any number of args.
{
"%s %s\n",st1,st2; //Any number of args.
}
MyPrint2("Hello","World");
--------Hello.HC---------
U0 MyPrint(U8 *st)
{
"" st; //Empty with no comma means first is fmt str.
}
MyPrint("Hello World\n");
--------Hello.HC---------
asm {
MESSAGE: DU8 "Hello World\n",0;
//The convention is underscore on C callable.
//Two colons means exported symbol.
_HELLO_WORLD::
//You can only clobber RAX,RBX,RCX,RDX
PUSH RSI
MOV RSI,MESSAGE
CALL PUT_STR
POP RSI
RET
}
Call(_HELLO_WORLD);
--------Hello.HC---------
asm {
_HELLO_WORLD::
//You can only clobber RAX,RBX,RCX,RDX
MOV RAX,'Hello '
CALL PUT_CHARS //Up to 8 chars packed into one 64-bit int.
MOV RAX,'World\n'
CALL PUT_CHARS
RET
}
Call(_HELLO_WORLD);
--------Hello.HC---------
asm {
_MY_PRINT::
//You can only clobber RAX,RBX,RCX,RDX
PUSH RBP
MOV RBP,RSP
PUSH RSI
MOV RSI,U64 SF_ARG1[RBP]
CALL PUT_STR
POP RSI
POP RBP
RET1 8 //Callee pops the stack to clear args.
}
_extern _MY_PRINT U0 MyPrint(U8 *st);
MyPrint("Hello World\n");
--------Hello.HC---------
asm {
_MY_PRINT::
//You can only clobber RAX,RBX,RCX,RDX
PUSH RBP
MOV RBP,RSP
PUSH U64 SF_ARG1[RBP]
CALL &PutS //Callee pops the stack to clear args.
POP RBP
RET1 8
}
_extern _MY_PRINT U0 MyPrint(U8 *st);
MyPrint("Hello World\n");
$HL,0$