From 1a122c85b82abd666739193facf4253fc16a7f2c Mon Sep 17 00:00:00 2001 From: jmug Date: Sun, 2 Feb 2025 00:37:50 -0800 Subject: [PATCH] Loader finished. Signed-off-by: jmug --- hw2/bin/simulator.ml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/hw2/bin/simulator.ml b/hw2/bin/simulator.ml index 7d5d06d..41d6926 100644 --- a/hw2/bin/simulator.ml +++ b/hw2/bin/simulator.ml @@ -530,5 +530,21 @@ let assemble (p : prog) : exec = may be of use. *) let load { entry; text_pos; data_pos; text_seg; data_seg } : mach = - failwith "load not implemented" + let mem = Array.make mem_size InsFrag in + let regs = Array.make 17 0L in + let flags = {fs = false; fz = false; fo = false} in + let sentinel_addr = mem_top -. 8L in + let sentinel_pos = mem_size - 8 in + let text_seg_size = List.length text_seg in + let data_seg_size = List.length data_seg in + regs.(rind Rip) <- entry; + regs.(rind Rsp) <- sentinel_addr; + Array.blit (Array.of_list @@ sbytes_of_int64 exit_addr) 0 mem sentinel_pos 8; + Array.blit (Array.of_list text_seg) 0 mem 0 text_seg_size; + Array.blit (Array.of_list data_seg) 0 mem text_seg_size data_seg_size; + { + flags = flags; + regs = regs; + mem = mem; + } ;;