目录
一.简单介绍printf scanf裸汇编
二.判断偶数
三.把几个数按从小到大排列
四.判断是否是闰年
五.检测字符类型
六:简单计算器
一.简单介绍printf scanf裸汇编
printf 打印数据
scanf 输入数据
注意,scanf后面的参数跟的是地址,&取地址符号
int fun()
{
int a;
int b;
int c;
c=0;
scanf("%d %d",&a,&b);
c=a+b;
printf("%dn",c);
return 0;
}
如上面代码简单应用scanf与printf,写成裸汇编如下面的代码所示
char*p="%d %d";
char*p1="%dn";
_declspec(naked) int fun1()
{
_asm{
push ebp
mov ebp,esp
sub esp,0x4c
push ebx
push esi
push edi
lea edi,dword ptr ds:[ebp-0x4c]
mov ecx,0x13
mov eax,0xcccccccc
rep stosd
mov dword ptr ds:[ebp-0xc],0x0
lea eax,dword ptr ds:[ebp-0x8]
push eax
lea ecx,dword ptr ds:[ebp-0x4]
push ecx
mov edx,p
push edx
call scanf
add esp,0xc
mov eax,dword ptr ds:[ebp-0x4]
add eax,dword ptr ds:[ebp-0x8]
mov DWORD ptr ds:[ebp-0xc],eax
mov ecx,dword ptr ds:[ebp-0xc]
push ecx
mov eax,p1
push eax
call printf
add esp,0x8
xor eax,eax
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret
}
}
下面是应用scanf与printf相关小例子
二.判断偶数
void oushu()
{
int a;
printf("请输入一个数n");
scanf("%d",&a);
if (a % 2==0)
{
printf("您输入的%d是偶数n",a);
}
else
{
printf("您输入的%d是奇数n",a);
}
}
三.把几个数按从小到大排列
void bidaxiao()
{
int a;
int b;
int c;
int t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("从小到大排列%d%d%dn",a,b,c);
}
四.判断是否是闰年
void bidaxiao()
{
int a;
int b;
int c;
int t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("从小到大排列%d%d%dn",a,b,c);
}
四.判断是否是闰年
思路:1.能被4整除,但是不能被100整除;2.能被400整除
int runian()
{
int year;
scanf("%d",&year);
if((year % 4 ==0 && year % 100 !=0)||year %400 ==0)
{
printf("%d是闰年n",year);
}
else
{
printf("%d不是闰年",year);
}
return 0;
}
五.检测字符类型
思路:数字:48-57 大写字母:65-90 小写字母 97-122 特殊符号:剩下的
有两种写法:以大写字母举例,
第一种:c>=’A’&&c<=’Z’
第二种:c>=65&&c<=90
下面代码两种写法混写
int zifu()
{
char c;
scanf("%c",&c);
if(c>='0'&& c<=57)
{
printf("%c是数字",c);
}
else if(c>='a' && c<='z')
{
printf("%c是小写字母",c);
}
else if(c>=65&& c<=97)
{
printf("%c是大写字母",c);
}
else
{
printf("%c是特殊字符",c);
}
return 0;
}
六:简单计算器
void jisuanqi()
{
int a;
int b;
char c;
scanf("%d%c%d",&a,&c,&b);
switch(c)
{
case '+':
{
printf("%dn",a+b);
break;
}
case '-':
{
printf("%dn",a-b);
break;
}
case '*':
{
printf("%dn",a*b);
break;
}
case '/':
{
if(!b)
{
printf("除数不能为0");
break;
}
else
{
printf("%dn",a/b);
break;
}
}
default:
{
printf("输入有错n");
}
}
}
今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!


![[逆向|C语言]C语言printf scanf裸汇编以及相关的小例子 [逆向|C语言]C语言printf scanf裸汇编以及相关的小例子](http://www.mshxw.com/aiimages/31/982176.png)
