Nasm-X86
view release on metacpan or search on metacpan
lib/Nasm/X86.pm view on Meta::CPAN
@_ == 1 or confess;
for my $r(@registers)
{my $size = RegisterSize $r;
Xor $r, $r if $size == 8;
Vpxorq $r, $r if $size > 8;
}
}
#D1 Structured Programming # Structured programming constructs
sub If(&;&) # If
{my ($then, $else) = @_; # Then - required , else - optional
@_ >= 1 or confess;
if (@_ == 1) # No else
{Comment "if then";
my $end = Label;
Jz $end;
&$then;
SetLabel $end;
}
else # With else
lib/Nasm/X86.pm view on Meta::CPAN
my $startElse = Label;
Jz $startElse;
&$then;
Jmp $endIf;
SetLabel $startElse;
&$else;
SetLabel $endIf;
}
}
sub For(&$$$) # For
{my ($body, $register, $limit, $increment) = @_; # Body, register, limit on loop, increment
@_ == 4 or confess;
Comment "For $register $limit";
my $start = Label;
my $end = Label;
SetLabel $start;
Cmp $register, $limit;
Jge $end;
&$body;
lib/Nasm/X86.pm view on Meta::CPAN
if ($increment == 1)
{Inc $register;
}
else
{Add $register, $increment;
}
Jmp $start;
SetLabel $end;
}
sub S(&%) # Create a sub with optional parameters name=> the name of the subroutine so it can be reused rather than regenerated, comment=> a comment describing the sub
{my ($body, %options) = @_; # Body, options.
@_ >= 1 or confess;
my $name = $options{name}; # Optional name for subroutine reuse
my $comment = $options{comment}; # Optional comment
Comment "Subroutine " .($comment//'');
if ($name and my $n = $subroutines{$name}) {return $n} # Return the label of a pre-existing copy of the code
my $start = Label;
my $end = Label;
( run in 2.253 seconds using v1.01-cache-2.11-cpan-49f99fa48dc )