mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-11 14:01:48 +00:00
182 lines
2.5 KiB
C
182 lines
2.5 KiB
C
|
|
#include <stdio.h>
|
|
|
|
char in_b, out_b1, out_b2, in_b2;
|
|
|
|
short in_w, out_w1, out_w2;
|
|
|
|
int in_l, out_l1, out_l2;
|
|
|
|
extern void sbb_ib_al ( void );
|
|
asm("\n"
|
|
"sbb_ib_al:\n"
|
|
|
|
"\tmovb in_b, %al\n"
|
|
"\tclc\n"
|
|
"\tsbbb $5, %al\n"
|
|
"\tmovb %al, out_b1\n"
|
|
|
|
"\tmovb in_b, %al\n"
|
|
"\tstc\n"
|
|
"\tsbbb $5, %al\n"
|
|
"\tmovb %al, out_b2\n"
|
|
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
extern void sbb_iw_ax ( void );
|
|
asm("\n"
|
|
"sbb_iw_ax:\n"
|
|
|
|
"\tmovw in_w, %ax\n"
|
|
"\tclc\n"
|
|
"\tsbbw $555, %ax\n"
|
|
"\tmovw %ax, out_w1\n"
|
|
|
|
"\tmovw in_w, %ax\n"
|
|
"\tstc\n"
|
|
"\tsbbw $555, %ax\n"
|
|
"\tmovw %ax, out_w2\n"
|
|
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
extern void sbb_il_eax ( void );
|
|
asm("\n"
|
|
"sbb_il_eax:\n"
|
|
|
|
"\tmovl in_l, %eax\n"
|
|
"\tclc\n"
|
|
"\tsbbl $555666, %eax\n"
|
|
"\tmovl %eax, out_l1\n"
|
|
|
|
"\tmovl in_l, %eax\n"
|
|
"\tstc\n"
|
|
"\tsbbl $555666, %eax\n"
|
|
"\tmovl %eax, out_l2\n"
|
|
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
extern void sbb_eb_gb ( void );
|
|
asm("\n"
|
|
"sbb_eb_gb:\n"
|
|
|
|
"\tmovb in_b, %al\n"
|
|
"\tclc\n"
|
|
"\tsbbb in_b2, %al\n"
|
|
"\tmovb %al, out_b1\n"
|
|
|
|
"\tmovb in_b, %al\n"
|
|
"\tstc\n"
|
|
"\tsbbb in_b2, %al\n"
|
|
"\tmovb %al, out_b2\n"
|
|
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
extern void sbb_eb_gb_2 ( void );
|
|
asm("\n"
|
|
"sbb_eb_gb_2:\n"
|
|
"\tpushl %ecx\n"
|
|
|
|
"\tmovb in_b, %cl\n"
|
|
"\tmovb in_b2, %dh\n"
|
|
"\tclc\n"
|
|
"\tsbbb %dh,%cl\n"
|
|
"\tmovb %cl, out_b1\n"
|
|
|
|
"\tmovb in_b, %cl\n"
|
|
"\tmovb in_b2, %dh\n"
|
|
"\tstc\n"
|
|
"\tsbbb %dh,%cl\n"
|
|
"\tmovb %cl, out_b2\n"
|
|
|
|
"\tpopl %ecx\n"
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
extern void adc_eb_gb ( void );
|
|
asm("\n"
|
|
"adc_eb_gb:\n"
|
|
|
|
"\tmovb in_b, %al\n"
|
|
"\tclc\n"
|
|
"\tadcb in_b2, %al\n"
|
|
"\tmovb %al, out_b1\n"
|
|
|
|
"\tmovb in_b, %al\n"
|
|
"\tstc\n"
|
|
"\tadcb in_b2, %al\n"
|
|
"\tmovb %al, out_b2\n"
|
|
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
extern void adc_eb_gb_2 ( void );
|
|
asm("\n"
|
|
"adc_eb_gb_2:\n"
|
|
"\tpushl %ecx\n"
|
|
|
|
"\tmovb in_b, %cl\n"
|
|
"\tmovb in_b2, %dh\n"
|
|
"\tclc\n"
|
|
"\tadcb %dh,%cl\n"
|
|
"\tmovb %cl, out_b1\n"
|
|
|
|
"\tmovb in_b, %cl\n"
|
|
"\tmovb in_b2, %dh\n"
|
|
"\tstc\n"
|
|
"\tadcb %dh,%cl\n"
|
|
"\tmovb %cl, out_b2\n"
|
|
|
|
"\tpopl %ecx\n"
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
|
|
|
|
int main ( void )
|
|
{
|
|
in_b = 99;
|
|
sbb_ib_al();
|
|
printf("r1 = %d %d\n", (int)out_b1, (int)out_b2);
|
|
|
|
in_w = 49999;
|
|
sbb_iw_ax();
|
|
printf("r2 = %d %d\n", (int)out_w1, (int)out_w2);
|
|
|
|
in_l = 0xF0000000;
|
|
sbb_il_eax();
|
|
printf("r3 = %d %d\n", (int)out_l1, (int)out_l2);
|
|
|
|
in_b = 99;
|
|
in_b2 = 88;
|
|
sbb_eb_gb();
|
|
printf("r4 = %d %d\n", (int)out_b1, (int)out_b2);
|
|
|
|
in_b = 66;
|
|
in_b2 = 77;
|
|
sbb_eb_gb_2();
|
|
printf("r5 = %d %d\n", (int)out_b1, (int)out_b2);
|
|
|
|
in_b = 99;
|
|
in_b2 = 88;
|
|
adc_eb_gb();
|
|
printf("r6 = %d %d\n", (int)out_b1, (int)out_b2);
|
|
|
|
in_b = 66;
|
|
in_b2 = 77;
|
|
adc_eb_gb_2();
|
|
printf("r7 = %d %d\n", (int)out_b1, (int)out_b2);
|
|
|
|
return 0;
|
|
}
|