start writting examples
This commit is contained in:
commit
13cbecb0e9
|
@ -0,0 +1,19 @@
|
||||||
|
; assembly that shows how to return values to a
|
||||||
|
; a C function
|
||||||
|
|
||||||
|
option casemap:none
|
||||||
|
|
||||||
|
; constants
|
||||||
|
nl = 10
|
||||||
|
maxlen = 256
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
title_str byte "Listing 1-8", 0
|
||||||
|
prompt byte "Enter a string: ", 0
|
||||||
|
fmt_string byte "User entered: '%s'", nl, 0
|
||||||
|
|
||||||
|
; make `maxlen` copies/duplicates of size byte, each uinitialized
|
||||||
|
input byte maxlen dup (?)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
void asm_main(void);
|
||||||
|
|
||||||
|
|
||||||
|
char *get_title(void);
|
||||||
|
|
||||||
|
int readline(char* dest, int maxlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
int readline(char *dest, int maxlen)
|
||||||
|
{
|
||||||
|
char *result = fgets(dest, maxlen, stdin);
|
||||||
|
if (results != NULL) {
|
||||||
|
int len = strlen(result);
|
||||||
|
if (len > 0) {
|
||||||
|
dest[len - 1] = 0;
|
||||||
|
}
|
||||||
|
return(len);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(-1) // an error occured
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
try {
|
||||||
|
char *title = get_title();
|
||||||
|
printf("calling %s\n", title);
|
||||||
|
asm_func();
|
||||||
|
printf("%s terminated\n", title);
|
||||||
|
|
||||||
|
} catch(...) {
|
||||||
|
printf("an error occured!")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
; a hello world program using printf from C
|
||||||
|
|
||||||
|
option casemap:none
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
format_string byte "Hello from asm world!", 10, 0
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
externdef printf:proc
|
||||||
|
|
||||||
|
public asm_func
|
||||||
|
|
||||||
|
asm_func proc
|
||||||
|
|
||||||
|
sub rsp, 56
|
||||||
|
lea rcx, format_string
|
||||||
|
call printf
|
||||||
|
add rsp, 56
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
asm_func endp
|
||||||
|
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
void asm_func(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("calling asm main\n");
|
||||||
|
asm_func();
|
||||||
|
printf("return from asm main\n");
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
; comments start with a colon
|
||||||
|
|
||||||
|
|
||||||
|
.CODE
|
||||||
|
|
||||||
|
option casemap:none
|
||||||
|
|
||||||
|
public asm_func
|
||||||
|
|
||||||
|
asm_func PROC
|
||||||
|
|
||||||
|
ret ; returns to the caller
|
||||||
|
|
||||||
|
asm_func ENDP
|
||||||
|
|
||||||
|
END
|
||||||
|
|
Loading…
Reference in New Issue