[erlang-questions] Understanding BEAM bytecode [Code section]

Gabriel Rivas <>
Thu Sep 14 23:16:03 CEST 2017


Hello all,

I am trying to understand BEAM files most specifically the Code section.
For that objective I wrote a simple program consisting of just a
subtraction function
taking 2 parameters:

-module(ex3).
-export([sub/2]).

sub(X,Y) ->
    X-Y.

>From that file I created the .S version,  and I can see that the assembly
version for the subtraction is:

{gc_bif,'-',{f,0},2,[{x,0},{x,1}],{x,0}}.
    return.

In the BEAM file I can see that the bytecode part that correlated with this
function is (in hex numbers):

7D 05 20 00 03 13 03 13

After some reading of the BEAM book and some analysis, I could translate
these hex numbers to:

7D 05 20 = {gc_bif2,
                    Lbl = 05,
                    Live X registers = 2,
                    Bif = 00,

03 13 03 13 =  args: X0,X1
                        return: X0
                        13 -> k_return

But I still don't see how the subtraction happens. Can anybody shed some
light
on the internals of calling a BIF in the erlang module?

Regards,
Gabriel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170914/83775a1b/attachment.html>


More information about the erlang-questions mailing list