免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1736 | 回复: 6
打印 上一主题 下一主题

这段代码什么意思呀 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-05 20:39 |只看该作者 |倒序浏览
#!/usr/bin/perl
###### data format sample
#R1 <- R2
#        opcode op_ld_12
#        comment proc_opcode := "00000101";        -- R1 <- R2
#        0: MDR <- mem[PC], PC <- PC + 1
#        1: IR <- MDR, ALUs2 <- R2
#        2: ALU_FUNC = alu_pass_s2, ALUOUT_DEST = R1, ALUOUT <- ALU_OUT
#        3: R1 <- ALUOUT
#        a: MDR <- mem[PC], PC <- PC + 1
#        b: ALUs2 <- R2, ALU_FUNC <- alu_pass_s2, ALUOUT_DEST <- R1, ALUOUT_LOAD <- 1
#        c: WB_DEST <- R1, REG_LOAD <- 1
#

$maxstage = 0;

while(<>{
        chop;
        if( /^#/ ){
                next;
        }
        if( /^        opcode *(.*)/ ){
                $opcode = $1;
                next;
        }
        if( /^        comment *(.*)/ ){
                $comment = $1;
                $Comment{$opcode} = $comment;
                next;
        }
        if( /^        ([a-z]): *(.*)/ ){
                $stage = ord($1) - ord('a');
                $microoperations = $2;
#printf( "\$stage=%d, \$microoperations=%s\n", $stage, $microoperations );
                $maxstage = $stage if( $maxstage < $stage );
                # we skip the first control stage (stage 'a')
                next if( $stage == 0 );
                @operations = split( /, */, $microoperations );
                for( $i=0 ; $i<=$#operations ; $i++ ){
                        if( $operations[$i] =~ /([^ ]*)[ ]*<-[ ]*([^ ]*)/ ){
                                $dest = $1;
                                $value = $2;
                                $instruction{$opcode}[$stage]{$dest} = $value;
                        }
                }
        }
}

论坛徽章:
0
2 [报告]
发表于 2005-01-05 20:40 |只看该作者

这段代码什么意思呀

$stage = ord($1) - ord('a');什么意思呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2005-01-05 23:31 |只看该作者

这段代码什么意思呀

ord 返回字符集中字符的顺序,实际上就是 ASCII 码值。

论坛徽章:
0
4 [报告]
发表于 2005-01-06 01:19 |只看该作者

这段代码什么意思呀

谢谢版主
chop 是表示把最后一个字节去掉,在这段代码中,chop是把全部的文本文件的换行去掉了么?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-01-06 08:33 |只看该作者

这段代码什么意思呀

沒錯.文本內容要從STDIN進來...
有時候chop不一定有辦法刪除掉換行...
windows下 的換行是\r\n....
因此即便你用chop或chomp將\n刪除..
去讀數據的時候還是會看到\r (^M)..
所以比較好的作法是
s/[\015\012]//g;
給你當參考...

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2005-01-06 19:21 |只看该作者

这段代码什么意思呀

to apile:
chomp 是根据 $/ 的内容删除行分隔符的,
只要 $/ 的值没问题,就不会有错的。
另外,只有在 binmode STDIN 了之后,行分隔符才等于 \r\n,否则还是 \n

论坛徽章:
0
7 [报告]
发表于 2005-01-06 19:37 |只看该作者

这段代码什么意思呀

明白了,谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP