iasm: the interactive assembler
Run the iasm examples calling byexample as:
$ byexample -l iasm your-file-here # byexample: +skip
You will have to install iasm first:
$ pip install iasm # byexample: +skip
Or you can download the code from here
Stability:
experimental- non backward compatibility changes are possible or even removal between versions (even patch versions).
New in
byexample 10.1.0.
Versions tested
We tested byexample with the following versions of the language
and the underlying runner or interpreter:
| Language | Runner/Interpreter |
|---|---|
| latest | 0.2.0 |
Set architecture and operation mode
iasm is capable to emulate different architectures.
The settings can be passed to iasm from the command line of
byexample. Once set they cannot be changed at runtime.
$ byexample -l iasm -o '+iasm-arch=x86 +iasm-mode=64 +iasm-code-size=102400 +iasm-pc=0' test/ds/iasm.md # byexample: +timeout=8
<...>
[PASS] Pass: 1 Fail: 0 Skip: 0
See the iasm documentation
for more information about those.
Find interactive examples
For iasm, byexample uses the :> string as the primary prompt
and -> as the secondary prompt.
In iasm the example is compiled and executed as the architecture
configured on start up, ARM by default:
:> mov r0, #4
:> mov r1, #8
Examples that begin with ;! are executed as Python statement that can
operate with the registers and with the memory M:
:> ;! print(r0 + r1)
12
Showing the registers
iasm allows you to show the values of the registers by name or
pattern.
:> ;! show('r[0-9]', 'r1[0-9]')
------ - ------ - ------ - ------ -----
r0 4 r1 8 r2 0 r3 0
r4 0 r5 0 r6 0 r7 0
r8 0 r9/sb 0 r10 0 r11/fp 0
r12/ip 0 r13/sp 0 r14/lr 0 r15/pc 100:8
------ - ------ - ------ - ------ -----
Add stick=True to display those registers every time.
:> ;! show('r[0-3]', stick=True)
-- - -- - -- - -- -
r0 4 r1 8 r2 0 r3 0
-- - -- - -- - -- -
:> mov r2, r1
-- - -- - -- - -- -
r0 4 r1 8 r2 8 r3 0
-- - -- - -- - -- -
Call show(stick=True) to restore the defaults:
:> ;! show(stick=True)
byexample options
The byexample options can be set in the assembly comments (;)
and in the Python comments (#):
:> r1024-nonexist ; byexample: +skip
:> ;! r1024-nonexist # byexample: +skip
Known limitations
Type text
The type
feature (+type) is not supported.
Terminal support
To work with iasm, the ANSI
terminal emulator is
enabled by default (+term=ansi) and cannot be disabled.
Also, the terminal geometry
cannot by changed after launching the interpreter
so the option +geometry cannot be used in an example (but it can be
used from the command line)
The amount of rows of the terminal has a minimum value of 2048 and this limit is really important: if your outputs have more than 2048 lines you will need to increase the geometry or the results may be undefined.
The same for the width of the terminal: minimum of 1024 columns.
iasm specific options
$ byexample -l iasm --show-options # byexample: +norm-ws
<...>
iasm's specific options
-----------------------
<...>:
+iasm-arch <arch> architecture name (arm, x86, sparc, ...); see iasm
documentation.
+iasm-mode <mode> mode (arm, 32, 64, ...); see iasm documentation.
+iasm-code-size <sz> size of the code segment; see iasm documentation.
+iasm-pc <addr> starting address, value of the program counter; see
iasm documentation.