超高分求救?

zuoyunguo 2004-05-04 09:33:14
编一程序,统计出一汇编程序的总的指令有多少条?各类指令有多少条?最好用C语言编写,汇编语言采用文件读入方式。
...全文
14 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cngdzhang 2004-05-05
我做了一个简单的还有一些极端情况没考虑,
(我好久没用汇编了),
要自己添关键字,

输入asm.txt

prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov ch,4
rotate: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
main endp
prognam ends
end

程序代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>

FILE *f;
//关键字的个数
#define KEYNUM 17
//关键字列表
char keyword[KEYNUM][10]={"mov","cmp","dec","push","add",
"sub","mul","div","jmp","jl",
"rol","int","jnz","ret","and",
"or","xor"};
int keycount[KEYNUM];//各指令统计

void main()
{
char c;
char str[100];
char *p;
int i;
int total=0;

for(i=0;i<KEYNUM;i++)
{
keycount[i]=0;//初始为0
}

clrscr();//清屏

f=fopen("asm.txt","rb");
while(!feof(f))
{
c=fgetc(f);
while(c==' ' || c=='\t' || c=='\r' || c=='\n') c=fgetc(f);//过滤掉空白符
if(c==';')
{
while(c!='\n') c=fgetc(f);//如果碰到注释.读到行尾为止
}
if(isalpha(c)) //如果是字母
{
p=str;
while(isalpha(c)) //获取整个单词
{
*p++=c;
c=fgetc(f);
}
*p='\0';
for(i=0;i<KEYNUM;i++) //查询是否是关键字
{
if(strcmp(keyword[i],str)==0) //如果是
{
keycount[i]++;
total++;
break;
}
}
}
}
printf("Total Instructions : %d\n\n",total); //输出结果
for(i=0;i<KEYNUM;i++)
{
printf("%-10s %3d\n",keyword[i],keycount[i]);
}
fclose(f);
}
  • 打赏
  • 举报
回复
lall 2004-05-05
up
  • 打赏
  • 举报
回复
vcchunhong 2004-05-05
我现在也在学汇编
挺乱的~
  • 打赏
  • 举报
回复
sharkhuang 2004-05-05
这样的软件又下载哦
  • 打赏
  • 举报
回复
look01 2004-05-05
由简单到复杂啊,呵呵
  • 打赏
  • 举报
回复
lizhongkun 2004-05-05
有实际意义吗??统计 了干什么??
  • 打赏
  • 举报
回复
freefalcon 2004-05-04
很简单的词法分析,甚至用字符串比较都行(当然还要视具体需求而定)
不过楼主关于“各类指令”的要求中的“类”是如何划分的?
  • 打赏
  • 举报
回复
cngdzhang 2004-05-04
好难,帮你UP
  • 打赏
  • 举报
回复
carambo 2004-05-04
进来学习:)
  • 打赏
  • 举报
回复
zuoyunguo 2004-05-04
汇编程序的样本:
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov ch,4
rotate: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
main endp
prognam ends
end

  • 打赏
  • 举报
回复
cngdzhang 2004-05-04
汇编是一条指令一行
;是注释
指令的第一个词是指令标识符

楼主能给个 你的 汇编程序的样本 吗?


  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-04 09:33
社区公告
暂无公告