亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? assembler.pm

?? ARM上的如果你對底層感興趣
?? PM
字號:
#      Assembler.pm
#
#      Copyright (c) 1996 Malcolm Beattie
#
#      You may distribute under the terms of either the GNU General Public
#      License or the Artistic License, as specified in the README file.
package B::Assembler;
use Exporter;
use B qw(ppname);
use B::Asmdata qw(%insn_data @insn_name);

@ISA = qw(Exporter);
@EXPORT_OK = qw(assemble_fh assemble_insn strip_comments
		parse_statement uncstring);

use strict;
my %opnumber;
my ($i, $opname);
for ($i = 0; defined($opname = ppname($i)); $i++) {
    $opnumber{$opname} = $i;
}

my ($linenum, $errors);

sub error {
    my $str = shift;
    warn "$linenum: $str\n";
    $errors++;
}

my $debug = 0;
sub debug { $debug = shift }

#
# First define all the data conversion subs to which Asmdata will refer
#

sub B::Asmdata::PUT_U8 {
    my $arg = shift;
    my $c = uncstring($arg);
    if (defined($c)) {
	if (length($c) != 1) {
	    error "argument for U8 is too long: $c";
	    $c = substr($c, 0, 1);
	}
    } else {
	$c = chr($arg);
    }
    return $c;
}

sub B::Asmdata::PUT_U16 { pack("n", $_[0]) }
sub B::Asmdata::PUT_U32 { pack("N", $_[0]) }
sub B::Asmdata::PUT_I32 { pack("N", $_[0]) }
sub B::Asmdata::PUT_objindex { pack("N", $_[0]) } # could allow names here

sub B::Asmdata::PUT_strconst {
    my $arg = shift;
    $arg = uncstring($arg);
    if (!defined($arg)) {
	error "bad string constant: $arg";
	return "";
    }
    if ($arg =~ s/\0//g) {
	error "string constant argument contains NUL: $arg";
    }
    return $arg . "\0";
}

sub B::Asmdata::PUT_pvcontents {
    my $arg = shift;
    error "extraneous argument: $arg" if defined $arg;
    return "";
}
sub B::Asmdata::PUT_PV {
    my $arg = shift;
    $arg = uncstring($arg);
    error "bad string argument: $arg" unless defined($arg);
    return pack("N", length($arg)) . $arg;
}
sub B::Asmdata::PUT_comment {
    my $arg = shift;
    $arg = uncstring($arg);
    error "bad string argument: $arg" unless defined($arg);
    if ($arg =~ s/\n//g) {
	error "comment argument contains linefeed: $arg";
    }
    return $arg . "\n";
}
sub B::Asmdata::PUT_double { sprintf("%s\0", $_[0]) }
sub B::Asmdata::PUT_none {
    my $arg = shift;
    error "extraneous argument: $arg" if defined $arg;
    return "";
}
sub B::Asmdata::PUT_op_tr_array {
    my $arg = shift;
    my @ary = split(/\s*,\s*/, $arg);
    if (@ary != 256) {
	error "wrong number of arguments to op_tr_array";
	@ary = (0) x 256;
    }
    return pack("n256", @ary);
}
# XXX Check this works
sub B::Asmdata::PUT_IV64 {
    my $arg = shift;
    return pack("NN", $arg >> 32, $arg & 0xffffffff);
}

my %unesc = (n => "\n", r => "\r", t => "\t", a => "\a",
	     b => "\b", f => "\f", v => "\013");

sub uncstring {
    my $s = shift;
    $s =~ s/^"// and $s =~ s/"$// or return undef;
    $s =~ s/\\(\d\d\d|.)/length($1) == 3 ? chr(oct($1)) : ($unesc{$1}||$1)/eg;
    return $s;
}

sub strip_comments {
    my $stmt = shift;
    # Comments only allowed in instructions which don't take string arguments
    $stmt =~ s{
	(?sx)	# Snazzy extended regexp coming up. Also, treat
		# string as a single line so .* eats \n characters.
	^\s*	# Ignore leading whitespace
	(
	  [^"]*	# A double quote '"' indicates a string argument. If we
		# find a double quote, the match fails and we strip nothing.
	)
	\s*\#	# Any amount of whitespace plus the comment marker...
	.*$	# ...which carries on to end-of-string.
    }{$1};	# Keep only the instruction and optional argument.
    return $stmt;
}

sub parse_statement {
    my $stmt = shift;
    my ($insn, $arg) = $stmt =~ m{
	(?sx)
	^\s*	# allow (but ignore) leading whitespace
	(.*?)	# Instruction continues up until...
	(?:	# ...an optional whitespace+argument group
	    \s+		# first whitespace.
	    (.*)	# The argument is all the rest (newlines included).
	)?$	# anchor at end-of-line
    };	
    if (defined($arg)) {
	if ($arg =~ s/^0x(?=[0-9a-fA-F]+$)//) {
	    $arg = hex($arg);
	} elsif ($arg =~ s/^0(?=[0-7]+$)//) {
	    $arg = oct($arg);
	} elsif ($arg =~ /^pp_/) {
	    $arg =~ s/\s*$//; # strip trailing whitespace
	    my $opnum = $opnumber{$arg};
	    if (defined($opnum)) {
		$arg = $opnum;
	    } else {
		error qq(No such op type "$arg");
		$arg = 0;
	    }
	}
    }
    return ($insn, $arg);
}

sub assemble_insn {
    my ($insn, $arg) = @_;
    my $data = $insn_data{$insn};
    if (defined($data)) {
	my ($bytecode, $putsub) = @{$data}[0, 1];
	my $argcode = &$putsub($arg);
	return chr($bytecode).$argcode;
    } else {
	error qq(no such instruction "$insn");
	return "";
    }
}

sub assemble_fh {
    my ($fh, $out) = @_;
    my ($line, $insn, $arg);
    $linenum = 0;
    $errors = 0;
    while ($line = <$fh>) {
	$linenum++;
	chomp $line;
	if ($debug) {
	    my $quotedline = $line;
	    $quotedline =~ s/\\/\\\\/g;
	    $quotedline =~ s/"/\\"/g;
	    &$out(assemble_insn("comment", qq("$quotedline")));
	}
	$line = strip_comments($line) or next;
	($insn, $arg) = parse_statement($line);
	&$out(assemble_insn($insn, $arg));
	if ($debug) {
	    &$out(assemble_insn("nop", undef));
	}
    }
    if ($errors) {
	die "Assembly failed with $errors error(s)\n";
    }
}

1;

__END__

=head1 NAME

B::Assembler - Assemble Perl bytecode

=head1 SYNOPSIS

	use Assembler;

=head1 DESCRIPTION

See F<ext/B/B/Assembler.pm>.

=head1 AUTHOR

Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>

=cut

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲动漫制服丝袜| 欧洲国产伦久久久久久久| 国产精品久久三| 欧美日韩国产高清一区二区 | 爽好久久久欧美精品| 久久一区二区三区四区| 欧美亚一区二区| 成人午夜精品一区二区三区| 天堂va蜜桃一区二区三区漫画版| 国产精品久久久久久久久晋中 | 91黄色在线观看| 狠狠色丁香婷婷综合久久片| 香蕉久久一区二区不卡无毒影院| 日本一区二区三区高清不卡 | 国产精品国产a级| 精品国产一区二区三区av性色 | 日韩三级高清在线| 在线观看亚洲专区| 成人av网址在线观看| 国产综合成人久久大片91| 天堂影院一区二区| 亚洲一区中文在线| 中文字幕制服丝袜成人av| 久久久亚洲精华液精华液精华液| 这里只有精品99re| 欧美日韩亚洲综合在线 | 欧美精品一区二区久久婷婷| 91精品中文字幕一区二区三区| 欧洲精品一区二区三区在线观看| 91天堂素人约啪| 不卡的电影网站| 波多野结衣视频一区| 成人激情综合网站| 国产精品一区二区在线观看不卡 | 国产乱码精品一区二区三区五月婷| 日韩成人av影视| 蜜桃av噜噜一区| 久久精品国产99国产| 美国毛片一区二区| 奇米影视7777精品一区二区| 免费在线欧美视频| 日本三级韩国三级欧美三级| 日韩av电影天堂| 久久激情五月婷婷| 国产剧情一区在线| 国产成人一级电影| 99久久99久久精品免费观看| aaa欧美日韩| 色丁香久综合在线久综合在线观看| 成人av在线网| 91久久线看在观草草青青| 91亚洲精品久久久蜜桃| 在线免费观看视频一区| 欧美亚洲尤物久久| 欧美一区二区在线视频| 精品国产乱码久久久久久免费| 国产午夜亚洲精品理论片色戒| 亚洲国产精品高清| 一区二区三区四区不卡在线| 午夜精品一区二区三区电影天堂| 免费高清在线一区| 国产成人免费网站| 色婷婷亚洲一区二区三区| 欧美四级电影在线观看| 日韩欧美一级二级| 国产精品三级电影| 亚洲午夜久久久久久久久电影院 | 国产91精品一区二区麻豆网站| 白白色 亚洲乱淫| 欧美日韩一区二区三区在线看 | 日韩一区二区三区视频在线| 精品久久久久99| 日韩一区欧美小说| 三级不卡在线观看| 国产成人福利片| 91精品1区2区| 欧美成人一区二区| 亚洲人亚洲人成电影网站色| 五月天国产精品| 成人99免费视频| 91精品国产91综合久久蜜臀| 国产精品女主播av| 天天综合日日夜夜精品| 成人污污视频在线观看| 在线播放国产精品二区一二区四区| 久久女同精品一区二区| 亚洲午夜视频在线观看| 国产电影一区二区三区| 欧美写真视频网站| 国产亚洲制服色| 午夜日韩在线电影| av不卡在线观看| 精品国产成人在线影院| 一区二区三区四区在线免费观看| 蜜桃视频在线一区| 色综合天天狠狠| 久久久91精品国产一区二区精品| 亚洲一区二区免费视频| 国产99久久久国产精品潘金网站| 欧美日韩另类国产亚洲欧美一级| 日本一区二区视频在线观看| 免费看日韩精品| 欧美午夜精品久久久久久超碰 | 成人免费视频免费观看| 777a∨成人精品桃花网| 亚洲色图另类专区| 国产精品一区二区免费不卡| 欧美高清视频一二三区 | 激情综合亚洲精品| 欧美老肥妇做.爰bbww视频| 中文字幕一区二区在线播放| 国产一区二区视频在线| 91精品免费在线| 亚洲综合久久久久| 91在线播放网址| 国产精品视频一区二区三区不卡| 老汉av免费一区二区三区 | 日韩欧美国产小视频| 亚洲在线观看免费视频| av电影在线观看一区| 精品国产成人系列| 久久av资源网| 日韩欧美成人午夜| 蜜桃一区二区三区在线观看| 欧美日韩一区二区在线观看视频 | 一本色道a无线码一区v| 日本一二三四高清不卡| 国产酒店精品激情| 久久综合成人精品亚洲另类欧美| 秋霞影院一区二区| 欧美日韩久久久久久| 亚洲在线中文字幕| 欧美午夜一区二区| 一区二区三区在线免费播放| 99精品一区二区三区| 中文字幕在线不卡| 北岛玲一区二区三区四区| 中文字幕欧美一区| 91麻豆精品视频| 亚洲乱码国产乱码精品精98午夜| 国产精品一区二区久久不卡| 日本一区二区三区dvd视频在线| 国产一区二区剧情av在线| 精品精品国产高清a毛片牛牛 | 高清免费成人av| 国产精品毛片久久久久久| 国产91露脸合集magnet | 国产精品天干天干在线综合| 成人激情小说乱人伦| 国产人成一区二区三区影院| 成人天堂资源www在线| 综合久久一区二区三区| 在线观看亚洲精品| 日韩国产欧美视频| wwww国产精品欧美| www.欧美亚洲| 一区二区三区av电影| 欧美日韩不卡视频| 久久99深爱久久99精品| 中文在线免费一区三区高中清不卡| 成人午夜视频网站| 亚洲国产视频一区| 精品欧美久久久| 白白色 亚洲乱淫| 午夜国产精品一区| 26uuu亚洲综合色| 91同城在线观看| 免费成人你懂的| 国产精品久久毛片a| 欧美三级一区二区| 精品亚洲porn| 亚洲美女在线国产| 日韩一区二区影院| 99久久婷婷国产综合精品 | www.亚洲精品| 亚洲成在人线免费| 久久久久久日产精品| 一本色道亚洲精品aⅴ| 日韩avvvv在线播放| 日本一区二区免费在线| 欧美午夜精品久久久| 国产综合色在线视频区| 一区二区三区四区五区视频在线观看| 欧美一卡二卡在线| 9i看片成人免费高清| 日本成人中文字幕在线视频| 国产精品丝袜91| 欧美一区二区视频网站| 91在线视频网址| 久久国产精品72免费观看| 日韩理论电影院| 精品剧情在线观看| 在线精品亚洲一区二区不卡| 国产高清精品久久久久| 五月婷婷激情综合网| 国产精品福利一区二区三区| 日韩欧美中文一区| 色妞www精品视频| 国产91精品欧美| 久久精品国产精品亚洲红杏|