1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
|