超高分求救?

zuoyunguo 2004-05-04 09:33:14
编一程序,统计出一汇编程序的总的指令有多少条?各类指令有多少条?最好用C语言编写,汇编语言采用文件读入方式。
...全文
57 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
汇编是一条指令一行
;是注释
指令的第一个词是指令标识符

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


65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧