Support for .asciz directive in perlasm modules.

This commit is contained in:
Andy Polyakov 2006-10-17 06:43:11 +00:00
parent 591e85e928
commit d68ff71004
3 changed files with 18 additions and 0 deletions

View File

@ -64,6 +64,14 @@ my $machine = sub {
}
".machine $arch";
};
my $asciz = sub {
shift;
my $line = join(",",@_);
if ($line =~ /^"(.*)"$/)
{ ".byte " . join(",",unpack("C*",$1),0); }
else
{ ""; }
};
################################################################
# simplified mnemonics not handled by at least one assembler

View File

@ -323,6 +323,8 @@ my $current_function;
$line =~ s/\@function.*/\@function/;
if ($line =~ /\.picmeup\s+(%r[\w]+)/i) {
$self->{value} = sprintf "\t.long\t0x%x,0x90000000",$opcode{$1};
} elsif ($line =~ /\.asciz\s+"(.*)"$/) {
$self->{value} = ".byte\t".join(",",unpack("C*",$1),0);
} else {
$self->{value} = $line;
}
@ -378,6 +380,12 @@ my $current_function;
/\.picmeup/ && do { $self->{value} = sprintf"\tDD\t 0%Xh,090000000h",$opcode{$line};
last;
};
/\.asciz/ && do { if ($line =~ /^"(.*)"$/) {
$self->{value} = "DB\t"
.join(",",unpack("C*",$1),0);
}
last;
};
}
$line = "";
}

View File

@ -94,6 +94,8 @@ sub ::function_end_A
$stack+=16; # readjust esp as if we didn't pop anything
}
sub ::asciz { foreach (@_) { &data_byte(unpack("C*",$_[0]),0); } }
sub ::asm_finish
{ &file_end();
print @out;