#include
#include
int main()
{
int X;
char
BUFFER[1200]="skazAZslkdnl12098210nsoqjo1%E%2uh891uee10s191skazAZslkd nl12098210nsoqjo1%E%2uh891uee10s191skazAZslkdnl12098210nsoqjo1%E%2uh8 91uee10s191skazAZslkdnl12098210nsoqjo1%E%2uh891uee10s191skazAZslkdnl1 2098210nsoqjo1%E%2uh891uee10s191skazAZslkdnl12098210nsoqjo1%E%2uh891u ee10s191";//一共个字母
char RESULT10[12];
char RESULT16[12];
_asm
{
XOR EAX,EAX
LEA ESI,BUFFER
LABEL1://下面几行得到字符串中字母个数,存储在EAX中
CMP [ESI],'\0'
JZ OVER
MOV BL,[ESI]
INC ESI
CALL PANDUAN
JMP LABEL1
OVER:
PUSH EAX//用作保存EAX的值
LEA ESI,RESULT10
MOV EBX,10
CALL CHANGE
POP EAX
LEA ESI,RESULT16
MOV EBX,16
CALL CHANGE
}
strrev(RESULT10);
strrev(RESULT16);
puts(RESULT10);
puts(RESULT16);
return 0;
//子函数,CHANGE,把EAX中的数转化为进制或进制字符串放到首地址为ESI 开头的字符串中
_asm
{
CHANGE:
XOR ECX,ECX
LAB:
CALL FUN
MOV [ESI+ECX],DL
INC ECX
AND EAX,EAX
JNZ LAB
MOV [ESI+ECX],'\0'
RET
}
//子函数:PANDUAN,BL传递参数,判断BL是否为字母,是EAX加,否则直接返回
_asm
{
PANDUAN:
CMP BL,'z'
JG LAST
CMP BL,'a'
JGE LABEL
CMP BL,'Z'
JG LAST
CMP BL,'A'
JL LAST
LABEL:
INC EAX
LAST:
RET
}
//子函数:FUN,EAX传递参数,EBX也传递参数,EBX为,则除以,EBX为,则除以,在调用函数前给EBX赋值每调用一次,EDX=EAX%10+'0',即EDX为对应的字符,EAX=EAX/10作为返回结果
_asm
{
FUN:
XOR EDX,EDX
DIV EBX
ADD EDX,'0'
CMP EDX,'9'
JLE END
ADD EDX,'A'-10-'0'
END:
RET
}
}
本文档为【统计字符串中字母的个数,并且转化为10进制和16进制字符串输出】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。