summaryrefslogtreecommitdiff
path: root/tests/fixtures/argc-argv.s
diff options
context:
space:
mode:
authorkx <kx@radix-linux.su>2026-10-09 18:00:15 +0300
committerkx <kx@radix-linux.su>2026-10-09 18:00:15 +0300
commit065da3509019b15dd0e678072e6be629e5330bef (patch)
tree69c934c9e786ac048b4fbe8f4c4c5571661521f4 /tests/fixtures/argc-argv.s
parentd130fe27fa753be02ed76fd9b277aa3c3d928eb9 (diff)
downloadlibmcpu-0.4.0.tar.xz
Version 0.4.00.4.0
Diffstat (limited to 'tests/fixtures/argc-argv.s')
-rw-r--r--tests/fixtures/argc-argv.s44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/fixtures/argc-argv.s b/tests/fixtures/argc-argv.s
new file mode 100644
index 0000000..4c1d2ac
--- /dev/null
+++ b/tests/fixtures/argc-argv.s
@@ -0,0 +1,44 @@
+; Minimal argc/argv and explicit "--" separator example.
+;
+; Assemble/link:
+; ../utils/mcpu-as -o argc-argv.o argc-argv.s
+; ../utils/mcpu-ld -o argc-argv --stack-size=4K argc-argv.o
+;
+; Run:
+; ../utils/mcpu-run \
+; --on-step=print-int-regs:r64@0x00000,r8@0x00020,r8@0x00021 \
+; -- \
+; argc-argv --help -x
+;
+; Guest argv is:
+; argv[0] = "argc-argv"
+; argv[1] = "--help"
+; argv[2] = "-x"
+;
+; The example prints argc, argv[1][2] ('h') and argv[2][1] ('x') as integers.
+; Expected output:
+; 3 104 120
+
+.text
+_start_life:
+loop:
+ ; Persistent McpuStartup at SP:
+ ; SP+8 = argc
+ ; SP+16 = argv (PTR64 to argv[0])
+ LDSP r64@0x00000, 8
+ LDSP r64@0x00008, 16
+
+ ; argv[1]
+ PADDI r64@0x00010, r64@0x00008, 8
+ LOADP r64@0x00018, r64@0x00010
+ PADDI r64@0x00018, r64@0x00018, 2
+ LOADP r8@0x00020, r64@0x00018
+
+ ; argv[2]
+ PADDI r64@0x00010, r64@0x00008, 16
+ LOADP r64@0x00018, r64@0x00010
+ PADDI r64@0x00018, r64@0x00018, 1
+ LOADP r8@0x00021, r64@0x00018
+
+ END
+ JMP loop