| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1563 人关注过本帖
标题:如何快速统计汇编源码中各指令个数?
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:20 回复次数:8 
如何快速统计汇编源码中各指令个数?
程序代码:
// 统计指令的频度,并进行排序输出

#include "stdio.h"
#include "string"
using namespace std;

int main()
{
    // 获取输入文件
    FILE *fin=fopen("in.s","r");      // 输入汇编文件
    FILE *fout=fopen("out.txt","w");    // 输出汇编文件中各个指令的频度

    // 根据指令表创建hash树
   


    // 获得两个文件中指令频度

    // 根据两个文件中指令频度排序

    // 根据指定顺序输出指令频度

}
这个是我将要编写的程序总体结构,不知道各位大侠有什么好想法?
搜索更多相关主题的帖子: 如何 
2011-09-01 00:43
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
Instruction.rar (2.12 KB)

1、所有的汇编指令如附件所示,有什么方法能快速的根据这个指令列表创建创建hash树
2、如何方便获取汇编源码中的指令
3、对于指定的汇编指令应该创建一个怎样的结构体来记录频度信息
希望各位高手不舍赐教

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-09-01 01:17
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
今天看到同事用脚本实现了,改天添出代码!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-09-01 23:08
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
能帮忙使用perl处理下吗?10行还是有难度的

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-09-05 21:59
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
testlog=$1
uniteBundleLine $testlog ${testlog}.tmp
cat ${testlog}.tmp | sed '/^$/d' | awk '{print $1}' | sort | uniq -c > ${testlog}.tmp2
cat ${testlog}.tmp2 | grep -v "iss\|clocks\|cycle\|fetch" | sort -k1 -g | tee ${testlog}.freqtab
uniteBundleLine.cpp
程序代码:
#include "stdio.h"
#include "string"
using namespace std;

char fsm[2][256];

void initfsm()
{
    const int line_len=sizeof(char)*256;
    memset(fsm[0],0,line_len);
    memset(fsm[1],1,line_len);
    fsm[0]['"']=1;
    fsm[1]['"']=0;
}

int main(char argc, char**argv)
{
    int state=0;
    unsigned char c;
    std::string s;

    if ( (argv[1] == NULL) || (argv[2] == NULL) )
    {
        printf("please check the input parameter.\n");
        return 1;
    }

    FILE *fin=fopen(argv[1], "r");
    FILE *fout=fopen(argv[2], "w");
   
    if ( (fin == NULL) || (fout == NULL) )
    {
        printf("please check the name of input files.\n");
        return 1;
    }

    initfsm();
    while(fscanf(fin,"%c",&c)!=EOF)
    {
        state=fsm[state][c];
        switch(state)
        {
        case 1:
            if(c=='\"')
            {
                fputc('\n',fout);  // 将第一个引号换成空格
            }
            else
                fputc(c,fout);
            break;
        default:
            if(c=='\n')
            {
                fputc(c,fout);
            }
            break;
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
} 


~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-09-06 16:29
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
该程序利用--trace=6的特点开发

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-09-07 20:53
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
研读下,谢谢

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-10-15 07:30
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 12楼 wfoo
脚本真是好东西!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2011-10-15 21:12
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 14楼 BlueGuy
嗯,我提供的附件只是指令列表,而不是真正的汇编代码,因此没有重复的指令。

确实,真正的汇编文件中应该不仅仅含有指令,也包含指令的操作数。虽然我看不懂12楼提供的perl语言

但是我感觉12楼的理解是正确的,也就是根据附件创建指令的hash表

然后解析输入的汇编语言,提取指令,并统计指令的个数。
谢谢两位的耐心指导

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2013-01-20 16:30
快速回复:如何快速统计汇编源码中各指令个数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019363 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved