Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5::X64::Assembler - add the registers
  • Loading branch information
fglock committed Mar 24, 2013
1 parent b6c2983 commit 61a5f3c
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 4 deletions.
57 changes: 54 additions & 3 deletions src5/lib/Perlito5/X64/Assembler.pm
@@ -1,11 +1,57 @@
use strict;
use warnings;

package Perlito5::X64::Register;

sub new {
my $class = shift;
bless {@_}, $class;
}


package Perlito5::X64::Assembler;

my @buffer;
my @hex_char = qw( 0 1 2 3 4 5 6 7 8 9 A B C D E F );

#--- registers

my $r_rax = Perlito5::X64::Register->new( code => 0 );
my $r_rcx = Perlito5::X64::Register->new( code => 1 );
my $r_rdx = Perlito5::X64::Register->new( code => 2 );
my $r_rbx = Perlito5::X64::Register->new( code => 3 );
my $r_rsp = Perlito5::X64::Register->new( code => 4 );
my $r_rbp = Perlito5::X64::Register->new( code => 5 );
my $r_rsi = Perlito5::X64::Register->new( code => 6 );
my $r_rdi = Perlito5::X64::Register->new( code => 7 );
my $r_r8 = Perlito5::X64::Register->new( code => 8 );
my $r_r9 = Perlito5::X64::Register->new( code => 9 );
my $r_r10 = Perlito5::X64::Register->new( code => 10 );
my $r_r11 = Perlito5::X64::Register->new( code => 11 );
my $r_r12 = Perlito5::X64::Register->new( code => 12 );
my $r_r13 = Perlito5::X64::Register->new( code => 13 );
my $r_r14 = Perlito5::X64::Register->new( code => 14 );
my $r_r15 = Perlito5::X64::Register->new( code => 15 );

sub rax { $r_rax }
sub rcx { $r_rcx }
sub rdx { $r_rdx }
sub rbx { $r_rbx }
sub rsp { $r_rsp }
sub rbp { $r_rbp }
sub rsi { $r_rsi }
sub rdi { $r_rdi }
sub r8 { $r_r8 }
sub r9 { $r_r9 }
sub r10 { $r_r10 }
sub r11 { $r_r11 }
sub r12 { $r_r12 }
sub r13 { $r_r13 }
sub r14 { $r_r14 }
sub r15 { $r_r15 }

#--- general

sub new {
my $class = shift;
@buffer = ();
Expand All @@ -21,6 +67,9 @@ sub emit {
push @buffer, $_[0];
}

sub is_register {
ref($_[0]) eq 'Perlito5::X64::Register'
}

sub is_zero {
return $_[0] == 0;
Expand All @@ -43,7 +92,7 @@ sub is_uint16 {
}


#---
#--- instructions

sub nop {
emit(0x90);
Expand Down Expand Up @@ -74,8 +123,10 @@ The Perlito5 x64 backend
=head1 Synopsis
use Perlito5::X64::Assembler;
my $asm = Perlito6::X64::Assembler->new();
say $asm->to_hex();
package Perlito5::X64::Assembler;
ret();
say to_hex(); # C3
=head1 References
Expand Down
9 changes: 8 additions & 1 deletion t5-x64/01_sanity.t
Expand Up @@ -12,12 +12,19 @@ use warnings;
use feature 'say';
use Perlito5::X64::Assembler;

say "1..2";
say "1..4";

{
package Perlito5::X64::Assembler;
my $out;

$out = is_register( rax );
print "not " if !$out;
say "ok # is_register";
$out = is_register( 0x0A );
print "not " if $out;
say "ok # !is_register";

ret();
$out = to_hex();
print "not " if $out ne 'C3';
Expand Down

0 comments on commit 61a5f3c

Please sign in to comment.