超高分求救?

zuoyunguo 2004-05-04 09:33:14
编一程序,统计出一汇编程序的总的指令有多少条?各类指令有多少条?最好用C语言编写,汇编语言采用文件读入方式。
...全文
58 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
  • 打赏
  • 举报
回复
汇编是一条指令一行
;是注释
指令的第一个词是指令标识符

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


Infineon DPS310 是一款基于MEMS技术的低功率数字式大气压力传感器,具有±5厘米高分辨率,可促进开发新的增强型导航、定位、健康、手势识别和天气监测等应用。 DPS310是一种精度很高、耗电量很低的袖珍型数字大气压力传感器,可同时用作压力 和温度传感器。其压力和温度的检测可应用在家庭安防上,如过火灾,爆炸等事故产生时,可通过手戴此穿戴设备产生报警信号以求救求援! 也可在shopping mall等大型封闭场所中,由于GPS信号受到阻挡,我们无法通过GPS系统来导航。为了在这种受屏蔽的环境中实现导航,我们可以结合气压传感器(高度)和加速度计(计步)的数据来实现室内导航。 结合联发科技MT2503芯片可做成具体应用产品。 联发科技MT2503芯片产品系列是一个高度集成且面积极小的 system in package (SiP)。集成了GPS BT PMIC GPRS ,外接各种Sensor及connectivity实现各种相应的功能。是目前成熟的方案,为了检测各种需要气压参数而实现的功能,可接入我司代理的Infineon DPS310气压sensor。 方案规格1.操作系统 NucleusPlus OS 2.处理器 32-bit ARM7EJ-S 260 MHz 3.内存 4MB RAM + EX SF (please check QVL) Or 4MB RAM + SIP 4MB SF 4.无线连接 Bluetooth: 内置BT3.0 BT4.0 FM: FM接收器 GNSS: GPS BEIDOU GLONASS, A-GPS支持双星系统 5. 工作范围 大气压力:300-1200hPa 温度: -40 -85°C 6.精度 压力:±0.006hPa(高精度模式), ±0.06hPa (相对精度) 温度:±0.5°C 7.操作模式 Command (manual) Background (automatic) Standby 方案来源于大大通

65,187

社区成员

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

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