From 3ce21e747e93101f64b4693ce0b14ecb5fbf36e8 Mon Sep 17 00:00:00 2001 From: dhwanish-3 <108540722+dhwanish-3@users.noreply.github.com> Date: Tue, 10 Oct 2023 00:30:18 +0530 Subject: [PATCH 1/3] Stage 22 - not tested --- Stage22/fork.spl | 135 ++++++++++ Stage22/fork.xsm | 528 +++++++++++++++++++++++++++++++++++++++ Stage22/int13.spl | 64 +++++ Stage22/int13.xsm | 303 ++++++++++++++++++++++ Stage22/int14.spl | 75 ++++++ Stage22/int14.xsm | 333 ++++++++++++++++++++++++ Stage22/mod0.spl | 96 +++++++ Stage22/mod0.xsm | 232 +++++++++++++++++ Stage22/mod1.spl | 136 ++++++++++ Stage22/mod1.xsm | 355 ++++++++++++++++++++++++++ Stage22/mod7.spl | 179 +++++++++++++ Stage22/mod7.xsm | 332 ++++++++++++++++++++++++ expl/assemblycode.asm | 13 + xfs-interface/stage22.sh | 22 ++ 14 files changed, 2803 insertions(+) create mode 100644 Stage22/fork.spl create mode 100644 Stage22/fork.xsm create mode 100644 Stage22/int13.spl create mode 100644 Stage22/int13.xsm create mode 100644 Stage22/int14.spl create mode 100644 Stage22/int14.xsm create mode 100644 Stage22/mod0.spl create mode 100644 Stage22/mod0.xsm create mode 100644 Stage22/mod1.spl create mode 100644 Stage22/mod1.xsm create mode 100644 Stage22/mod7.spl create mode 100644 Stage22/mod7.xsm create mode 100644 expl/assemblycode.asm create mode 100644 xfs-interface/stage22.sh diff --git a/Stage22/fork.spl b/Stage22/fork.spl new file mode 100644 index 0000000..17c475e --- /dev/null +++ b/Stage22/fork.spl @@ -0,0 +1,135 @@ +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 8; + +alias userSP R0; +userSP = SP; + +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13] = SP; +SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 - 1; + +multipush(R0); + +R1 = 1; +call PROCESS_MANAGER; +alias newPID R2; +newPID = R0; + +multipop(R0); + +if (newPID == -1) then + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; + [[PTBR + 2 * ((userSP - 1)/512)] * 512 + (userSP - 1) % 512] = -1; + SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; +else + // if heap pages for parent are not allocated + if ([PTBR + 4] == -1) then + multipush(R0, R1, R2); + + R1 = 1; + call MEMORY_MANAGER; + [PTBR + 4] = R0; + [PTBR + 5] = "0110"; + R1 = 1; + call MEMORY_MANAGER; + [PTBR + 6] = R0; + [PTBR + 7] = "0110"; + + multipop(R0, R1, R2); + endif; + + alias newPTBR R3; + newPTBR = PAGE_TABLE_BASE + 20 * newPID; + + multipush(R0, R1, R2, R3); + + R1 = 1; + call MEMORY_MANAGER; + [newPTBR + 16] = R0; + [newPTBR + 17] = "0110"; + R1 = 1; + call MEMORY_MANAGER; + [newPTBR + 18] = R0; + [newPTBR + 19] = "0110"; + + multipop(R0, R1, R2, R3); + [PROCESS_TABLE + newPID * 16 + 3] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 3]; + [PROCESS_TABLE + newPID * 16 + 6] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 6]; + [PROCESS_TABLE + newPID * 16 + 10] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 10]; + [PROCESS_TABLE + newPID * 16 + 7] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 7]; + [PROCESS_TABLE + newPID * 16 + 13] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; + + [PROCESS_TABLE + newPID * 16 + 9] = 0; + [PROCESS_TABLE + newPID * 16 + 12] = 0; + [PROCESS_TABLE + newPID * 16 + 0] = 0; + [PROCESS_TABLE + newPID * 16 + 2] = [SYSTEM_STATUS_TABLE + 1]; + [PROCESS_TABLE + newPID * 16 + 4] = CREATED; + + multipush(R0, R1, R2, R3); + + R1 = 1; + call MEMORY_MANAGER; + R5 = R0; + + multipop(R0, R1, R2, R3); + + [PROCESS_MANAGER + newPID * 16 + 11] = R5; + + // initialization per process resourse table child + alias i R4; + i = 512 - 16; + while (i < 512) do + [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i] = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i]; + [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i + 1] = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1]; + if ([[PROCESS_TABLE + newPID * 16 + 11] * 512 + i] == 1) then + [SEMAPHORE_TABLE + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1] * 4 + 1] = [SEMAPHORE_TABLE + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1] * 4 + 1] + 1; + endif; + i = i + 2; + endwhile; + + // disk map table for child + i = 0; + while (i < 10) do + [DISK_MAP_TABLE + 10 * newPID + i] = [DISK_MAP_TABLE + [SYSTEM_STATUS_TABLE + 1] * 10 + i]; + i = i + 1; + endwhile; + + // page table entries + i = 0; + while (i < 16) do + [newPTBR + i] = [PTBR + i]; + [newPTBR + i + 1] = [PTBR + i + 1]; + if ([newPTBR + i] != -1) then + [MEMORY_FREE_LIST + [newPTBR + i]] = [MEMORY_FREE_LIST + [newPTBR + i]] + 1; + endif; + i = i + 2; + endwhile; + + // copy user stack contents + alias oldStack R5; + alias newStack R6; + + oldStack = [PTBR + 16]; + newStack = [newPTBR + 16]; + i = 0; + while (i < 512) do + [newStack * 512 + i] = [oldStack * 512 + i]; + i = i + 1; + endwhile; + + oldStack = [PTBR + 18]; + newStack = [newPTBR + 18]; + i = 0; + while (i < 512) do + [newStack * 512 + i] = [oldStack * 512 + i]; + i = i + 1; + endwhile; + + [[PROCESS_TABLE + newPID * 16 + 11] * 512] = BP; + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; + + // return value + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + (userSP - 1) % 512] = newPID; + [[newPTBR + 2 * ((userSP - 1) / 512)] * 512 + (userSP - 1) % 512] = 0; + + SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; +endif; +ireturn; \ No newline at end of file diff --git a/Stage22/fork.xsm b/Stage22/fork.xsm new file mode 100644 index 0000000..e14c88e --- /dev/null +++ b/Stage22/fork.xsm @@ -0,0 +1,528 @@ +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 8 +MOV R0, SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV [R16], SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +SUB R16, 1 +MOV SP, R16 +PUSH R0 +MOV R1, 1 +CALL 21504 +MOV R2, R0 +POP R0 +MOV R16, -1 +EQ R16, R2 +JZ R16, _L1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +JMP _L2 +_L1: +MOV R16, PTBR +ADD R16, 4 +MOV R16, [R16] +MOV R17, -1 +EQ R16, R17 +JZ R16, _L3 +PUSH R0 +PUSH R1 +PUSH R2 +MOV R1, 1 +CALL 22528 +MOV R16, PTBR +ADD R16, 4 +MOV [R16], R0 +MOV R16, PTBR +ADD R16, 5 +MOV [R16], "0110" +MOV R1, 1 +CALL 22528 +MOV R16, PTBR +ADD R16, 6 +MOV [R16], R0 +MOV R16, PTBR +ADD R16, 7 +MOV [R16], "0110" +POP R2 +POP R1 +POP R0 +JMP _L4 +_L3: +_L4: +MOV R16, 29696 +MOV R17, 20 +MUL R17, R2 +ADD R16, R17 +MOV R3, R16 +PUSH R0 +PUSH R1 +PUSH R2 +PUSH R3 +MOV R1, 1 +CALL 22528 +MOV R16, R3 +ADD R16, 16 +MOV [R16], R0 +MOV R16, R3 +ADD R16, 17 +MOV [R16], "0110" +MOV R1, 1 +CALL 22528 +MOV R16, R3 +ADD R16, 18 +MOV [R16], R0 +MOV R16, R3 +ADD R16, 19 +MOV [R16], "0110" +POP R3 +POP R2 +POP R1 +POP R0 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 3 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 3 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 6 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 6 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 10 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 10 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 7 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 7 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 13 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 12 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 0 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 2 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 3 +PUSH R0 +PUSH R1 +PUSH R2 +PUSH R3 +MOV R1, 1 +CALL 22528 +MOV R5, R0 +POP R3 +POP R2 +POP R1 +POP R0 +MOV R16, 21504 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV [R16], R5 +MOV R16, 512 +SUB R16, 16 +MOV R4, R16 +_L5: +MOV R16, 512 +GT R16, R4 +JZ R16, _L6 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, R4 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 11 +MOV R17, [R17] +MUL R17, 512 +ADD R17, R4 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, R4 +ADD R16, 1 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 11 +MOV R17, [R17] +MUL R17, 512 +ADD R17, R4 +ADD R17, 1 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, R4 +MOV R16, [R16] +MOV R17, 1 +EQ R16, R17 +JZ R16, _L7 +MOV R16, 29056 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 11 +MOV R17, [R17] +MUL R17, 512 +ADD R17, R4 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 4 +ADD R16, R17 +ADD R16, 1 +MOV R17, 29056 +MOV R18, 28672 +MOV R19, 29560 +ADD R19, 1 +MOV R19, [R19] +MUL R19, 16 +ADD R18, R19 +ADD R18, 11 +MOV R18, [R18] +MUL R18, 512 +ADD R18, R4 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 4 +ADD R17, R18 +ADD R17, 1 +MOV R17, [R17] +ADD R17, 1 +MOV [R16], R17 +JMP _L8 +_L7: +_L8: +MOV R16, R4 +ADD R16, 2 +MOV R4, R16 +JMP _L5 +_L6: +MOV R4, 0 +_L9: +MOV R16, 10 +GT R16, R4 +JZ R16, _L10 +MOV R16, 30032 +MOV R17, 10 +MUL R17, R2 +ADD R16, R17 +ADD R16, R4 +MOV R17, 30032 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 10 +ADD R17, R18 +ADD R17, R4 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, R4 +ADD R16, 1 +MOV R4, R16 +JMP _L9 +_L10: +MOV R4, 0 +_L11: +MOV R16, 16 +GT R16, R4 +JZ R16, _L12 +MOV R16, R3 +ADD R16, R4 +MOV R17, PTBR +ADD R17, R4 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, R3 +ADD R16, R4 +ADD R16, 1 +MOV R17, PTBR +ADD R17, R4 +ADD R17, 1 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, R3 +ADD R16, R4 +MOV R16, [R16] +MOV R17, -1 +NE R16, R17 +JZ R16, _L13 +MOV R16, 29184 +MOV R17, R3 +ADD R17, R4 +MOV R17, [R17] +ADD R16, R17 +MOV R17, 29184 +MOV R18, R3 +ADD R18, R4 +MOV R18, [R18] +ADD R17, R18 +MOV R17, [R17] +ADD R17, 1 +MOV [R16], R17 +JMP _L14 +_L13: +_L14: +MOV R16, R4 +ADD R16, 2 +MOV R4, R16 +JMP _L11 +_L12: +MOV R16, PTBR +ADD R16, 16 +MOV R16, [R16] +MOV R5, R16 +MOV R16, R3 +ADD R16, 16 +MOV R16, [R16] +MOV R6, R16 +MOV R4, 0 +_L15: +MOV R16, 512 +GT R16, R4 +JZ R16, _L16 +MOV R16, R6 +MUL R16, 512 +ADD R16, R4 +MOV R17, R5 +MUL R17, 512 +ADD R17, R4 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, R4 +ADD R16, 1 +MOV R4, R16 +JMP _L15 +_L16: +MOV R16, PTBR +ADD R16, 18 +MOV R16, [R16] +MOV R5, R16 +MOV R16, R3 +ADD R16, 18 +MOV R16, [R16] +MOV R6, R16 +MOV R4, 0 +_L17: +MOV R16, 512 +GT R16, R4 +JZ R16, _L18 +MOV R16, R6 +MUL R16, 512 +ADD R16, R4 +MOV R17, R5 +MUL R17, 512 +ADD R17, R4 +MOV R17, [R17] +MOV [R16], R17 +MOV R16, R4 +ADD R16, 1 +MOV R4, R16 +JMP _L17 +_L18: +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +MOV [R16], BP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], R2 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, R3 +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +_L2: +IRET +HALT \ No newline at end of file diff --git a/Stage22/int13.spl b/Stage22/int13.spl new file mode 100644 index 0000000..1724827 --- /dev/null +++ b/Stage22/int13.spl @@ -0,0 +1,64 @@ +alias userSP R0; +userSP = SP; + +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13] = SP; +SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 - 1; + +alias sysCallNumber R1; +sysCallNumber = [[PTBR + 2 * ((userSP - 5) / 512)] * 512 + ((userSP - 5) % 512)]; + +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = sysCallNumber; + +if (sysCallNumber == 17) then // semget + alias i R2; + i = 0; + while ([[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + i * 2] != -1 && i < 8) do + i = i + 2; + endwhile; + + if (i == 8) then // no space + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = -1; + else + multipush(R0, R1, R2); + + R1 = 6; + R2 = [SYSTEM_STATUS_TABLE + 1]; + call RESOURCE_MANAGER; + R5 = R0; + multipop(R0, R1, R2); + + if (R5 == -1) then // no semaphores left + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = -2; + else + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + i * 2] = 1; + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + i * 2 + 1] = R5; + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = i; + endif; + endif; +endif; + +if (sysCallNumber == 18) then // semrelease + alias semId R2; + semId = [[PTBR + 2 * ((userSP - 4) / 512)] * 512 + ((userSP - 4) % 512)]; + + if (semId < 0 || semId > 7 || [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId] != 1) then + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = -1; + else + multipush(R0, R1, R2); + + R1 = 7; + R2 = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId + 1]; + R3 = [SYSTEM_STATUS_TABLE + 1]; + + call RESOURCE_MANAGER; + + multipop(R0, R1, R2); + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId] = -1; + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId + 1] = -1; + endif; +endif; + +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; +SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; + +ireturn; \ No newline at end of file diff --git a/Stage22/int13.xsm b/Stage22/int13.xsm new file mode 100644 index 0000000..85a4da2 --- /dev/null +++ b/Stage22/int13.xsm @@ -0,0 +1,303 @@ +MOV R0, SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV [R16], SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +SUB R16, 1 +MOV SP, R16 +MOV R16, 2 +MOV R17, R0 +SUB R17, 5 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 5 +MOD R17, 512 +ADD R16, R17 +MOV R16, [R16] +MOV R1, R16 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], R1 +MOV R16, 17 +EQ R16, R1 +JZ R16, _L1 +MOV R2, 0 +_L3: +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R17, R2 +MUL R17, 2 +ADD R16, R17 +MOV R16, [R16] +MOV R17, -1 +NE R16, R17 +MOV R17, 8 +GT R17, R2 +MUL R16, R17 +JZ R16, _L4 +MOV R16, R2 +ADD R16, 2 +MOV R2, R16 +JMP _L3 +_L4: +MOV R16, 8 +EQ R16, R2 +JZ R16, _L5 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], -1 +JMP _L6 +_L5: +PUSH R0 +PUSH R1 +PUSH R2 +MOV R1, 6 +MOV R16, 29560 +ADD R16, 1 +MOV R16, [R16] +MOV R2, R16 +CALL 20480 +MOV R5, R0 +POP R2 +POP R1 +POP R0 +MOV R16, -1 +EQ R16, R5 +JZ R16, _L7 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], -2 +JMP _L8 +_L7: +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R17, R2 +MUL R17, 2 +ADD R16, R17 +MOV [R16], 1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R17, R2 +MUL R17, 2 +ADD R16, R17 +ADD R16, 1 +MOV [R16], R5 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], R2 +_L8: +_L6: +JMP _L2 +_L1: +_L2: +MOV R16, 18 +EQ R16, R1 +JZ R16, _L9 +MOV R16, 2 +MOV R17, R0 +SUB R17, 4 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 4 +MOD R17, 512 +ADD R16, R17 +MOV R16, [R16] +MOV R2, R16 +MOV R16, 0 +GT R16, R2 +MOV R17, 7 +LT R17, R2 +ADD R16, R17 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 11 +MOV R17, [R17] +MUL R17, 512 +ADD R17, 496 +MOV R18, 2 +MUL R18, R2 +ADD R17, R18 +MOV R17, [R17] +MOV R18, 1 +NE R17, R18 +ADD R16, R17 +JZ R16, _L11 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], -1 +JMP _L12 +_L11: +PUSH R0 +PUSH R1 +PUSH R2 +MOV R1, 7 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R17, 2 +MUL R17, R2 +ADD R16, R17 +ADD R16, 1 +MOV R16, [R16] +MOV R2, R16 +MOV R16, 29560 +ADD R16, 1 +MOV R16, [R16] +MOV R3, R16 +CALL 20480 +POP R2 +POP R1 +POP R0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R17, 2 +MUL R17, R2 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R17, 2 +MUL R17, R2 +ADD R16, R17 +ADD R16, 1 +MOV [R16], -1 +_L12: +JMP _L10 +_L9: +_L10: +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +IRET +HALT \ No newline at end of file diff --git a/Stage22/int14.spl b/Stage22/int14.spl new file mode 100644 index 0000000..29516bd --- /dev/null +++ b/Stage22/int14.spl @@ -0,0 +1,75 @@ +alias userSP R0; +userSP = SP; + +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13] = SP; +SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 - 1; + +alias sysCallNumber R1; +sysCallNumber = [[PTBR + 2 * ((userSP - 5) / 512)] * 512 + ((userSP - 5) % 512)]; + +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = sysCallNumber; + +alias resource_base R2; +resource_base = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET; + +alias semfd R3; +semfd = [[PTBR + 2 * ((userSP - 4) / 512)] * 512 + ((userSP - 4) % 512)]; + +if (semfd < 0 || semfd > 7 || [resource_base + 2 * semfd] != SEMAPHORE) then + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = -1; + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; + SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; + print "lockerror"; + ireturn; +endif; + +alias semID R4; +semID = [resource_base + semfd * 2 + 1]; + +if (sysCallNumber == 19) then // semLock + // while the semaphore is locked by other processes + while ([SEMAPHORE_TABLE + semID * 4] != -1 && [SEMAPHORE_TABLE + semID * 4] != [SYSTEM_STATUS_TABLE + 1]) do + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 4] = WAIT_SEMAPHORE; + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 5] = semID; + multipush(R0, R1, R2, R3, R4); + + call SCHEDULER; + + multipop(R0, R1, R2, R3, R4); + endwhile; + + [SEMAPHORE_TABLE + 4 * semID] = [SYSTEM_STATUS_TABLE + 1]; +endif; + +if (sysCallNumber == 20) then // semUnLock + // if semaphore is locked + if ([SEMAPHORE_TABLE + semID * 4] != -1) then + // if semaphore is not locked by current process + if ([SEMAPHORE_TABLE + semID * 4] != [SYSTEM_STATUS_TABLE + 1]) then + [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = -2; + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; + SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; + ireturn; + endif; + + // unlock the semaphore + [SEMAPHORE_TABLE + 4 * semID] = -1; + + // wake all waiting for this semaphore + alias i R5; + i = 0; + while (i < 16) do + if ([PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 4] == WAIT_SEMAPHORE && [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 5] == semID) then + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 4] = READY; + [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 5] = -1; + endif; + i = i + 1; + endwhile; + endif; +endif; + +[[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = 0; +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; +SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13]; + +ireturn; \ No newline at end of file diff --git a/Stage22/int14.xsm b/Stage22/int14.xsm new file mode 100644 index 0000000..568be1d --- /dev/null +++ b/Stage22/int14.xsm @@ -0,0 +1,333 @@ +MOV R0, SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV [R16], SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +SUB R16, 1 +MOV SP, R16 +MOV R16, 2 +MOV R17, R0 +SUB R17, 5 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 5 +MOD R17, 512 +ADD R16, R17 +MOV R16, [R16] +MOV R1, R16 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], R1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, 496 +MOV R2, R16 +MOV R16, 2 +MOV R17, R0 +SUB R17, 4 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 4 +MOD R17, 512 +ADD R16, R17 +MOV R16, [R16] +MOV R3, R16 +MOV R16, 0 +GT R16, R3 +MOV R17, 7 +LT R17, R3 +ADD R16, R17 +MOV R17, 2 +MUL R17, R3 +ADD R17, R2 +MOV R17, [R17] +MOV R18, 1 +NE R17, R18 +ADD R16, R17 +JZ R16, _L1 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +MOV R16, "lockerror" +PORT P1, R16 +OUT +IRET +JMP _L2 +_L1: +_L2: +MOV R16, R3 +MUL R16, 2 +ADD R16, R2 +ADD R16, 1 +MOV R16, [R16] +MOV R4, R16 +MOV R16, 19 +EQ R16, R1 +JZ R16, _L3 +_L5: +MOV R16, 29056 +MOV R17, R4 +MUL R17, 4 +ADD R16, R17 +MOV R16, [R16] +MOV R17, -1 +NE R16, R17 +MOV R17, 29056 +MOV R18, R4 +MUL R18, 4 +ADD R17, R18 +MOV R17, [R17] +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +NE R17, R18 +MUL R16, R17 +JZ R16, _L6 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 10 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 5 +MOV [R16], R4 +PUSH R0 +PUSH R1 +PUSH R2 +PUSH R3 +PUSH R4 +CALL 25600 +POP R4 +POP R3 +POP R2 +POP R1 +POP R0 +JMP _L5 +_L6: +MOV R16, 29056 +MOV R17, 4 +MUL R17, R4 +ADD R16, R17 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MOV [R16], R17 +JMP _L4 +_L3: +_L4: +MOV R16, 20 +EQ R16, R1 +JZ R16, _L7 +MOV R16, 29056 +MOV R17, R4 +MUL R17, 4 +ADD R16, R17 +MOV R16, [R16] +MOV R17, -1 +NE R16, R17 +JZ R16, _L9 +MOV R16, 29056 +MOV R17, R4 +MUL R17, 4 +ADD R16, R17 +MOV R16, [R16] +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +NE R16, R17 +JZ R16, _L11 +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], -2 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +IRET +JMP _L12 +_L11: +_L12: +MOV R16, 29056 +MOV R17, 4 +MUL R17, R4 +ADD R16, R17 +MOV [R16], -1 +MOV R5, 0 +_L13: +MOV R16, 16 +GT R16, R5 +JZ R16, _L14 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 10 +EQ R16, R17 +MOV R17, 28672 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R18, 16 +ADD R17, R18 +ADD R17, 5 +MOV R17, [R17] +EQ R17, R4 +MUL R16, R17 +JZ R16, _L15 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 1 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 5 +MOV [R16], -1 +JMP _L16 +_L15: +_L16: +MOV R16, R5 +ADD R16, 1 +MOV R5, R16 +JMP _L13 +_L14: +JMP _L10 +_L9: +_L10: +JMP _L8 +_L7: +_L8: +MOV R16, 2 +MOV R17, R0 +SUB R17, 1 +DIV R17, 512 +MUL R16, R17 +ADD R16, PTBR +MOV R16, [R16] +MUL R16, 512 +MOV R17, R0 +SUB R17, 1 +MOD R17, 512 +ADD R16, R17 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +IRET +HALT \ No newline at end of file diff --git a/Stage22/mod0.spl b/Stage22/mod0.spl new file mode 100644 index 0000000..1954534 --- /dev/null +++ b/Stage22/mod0.spl @@ -0,0 +1,96 @@ +alias functionNum R1; +alias currentPID R2; + +// Acquire Disk +if (functionNum == 3) then + while ([DISK_STATUS_TABLE] == 1) do + [PROCESS_TABLE + currentPID * 16 + 4] = WAIT_DISK; + multipush(R1, R2); + call MOD_5; + multipop(R1, R2); + endwhile; + [DISK_STATUS_TABLE] = 1; + [DISK_STATUS_TABLE + 4] = currentPID; + return; +endif; + +if (functionNum == 6) then // acquire semaphore + alias i R3; + i = 0; + while(i < MAX_SEM_COUNT && [SEMAPHORE_TABLE + 4 * i + 1] != 0) do + i = i + 1; + endwhile; + + if (i == MAX_SEM_COUNT) then + R0 = -1; + else + [SEMAPHORE_TABLE + 4 * i] = -1; + [SEMAPHORE_TABLE + 4 * i + 1] = 1; + R0 = i; + endif; + return; +endif; + +if (functionNum == 7) then // Release semaphore + alias semId R2; + alias currentPID R3; + + if (currentPID == [SEMAPHORE_TABLE + semId * 4]) then + [SEMAPHORE_TABLE + semId * 4] = -1; + alias i R4; + + i = 0; + while (i < 16) do + if ([PROCESS_TABLE + i * 16 + 4] == WAIT_SEMAPHORE && [PROCESS_TABLE + i * 16 + 5] == semId) then + [PROCESS_TABLE + i * 16 + 4] = READY; + [PROCESS_TABLE + i * 16 + 5] = -1; + endif; + i = i + 1; + endwhile; + + [SEMAPHORE_TABLE + 4 * semId + 1] = [SEMAPHORE_TABLE + 4 * semId + 1] - 1; + endif; + return; +endif; + +// Acquire Terminal +if (functionNum == 8) then + while ([TERMINAL_STATUS_TABLE] != 0) do + [PROCESS_TABLE + currentPID * 16 + 4] = WAIT_TERMINAL; + multipush(R1, R2); + + call MOD_5; + + multipop(R1, R2); + endwhile; + + [TERMINAL_STATUS_TABLE] = 1; + [TERMINAL_STATUS_TABLE + 1] = currentPID; + return; +endif; + +// Release Terminal +if (functionNum == 9) then + if (currentPID != [TERMINAL_STATUS_TABLE + 1]) then + alias returnValue R0; + returnValue = -1; + return; + else + [TERMINAL_STATUS_TABLE] = 0; + alias i R3; + i = 0; + while (i < 16) do + if ([PROCESS_TABLE + i * 16 + 4] == WAIT_TERMINAL) then + [PROCESS_TABLE + 16 * i + 4] = READY; + endif; + i = i + 1; + endwhile; + alias returnValue R0; + returnValue = 0; + return; + endif; +else + alias returnValue R0; + returnValue = -1; + return; +endif; \ No newline at end of file diff --git a/Stage22/mod0.xsm b/Stage22/mod0.xsm new file mode 100644 index 0000000..4521b63 --- /dev/null +++ b/Stage22/mod0.xsm @@ -0,0 +1,232 @@ +MOV R16, 3 +EQ R16, R1 +JZ R16, _L1 +_L3: +MOV R16, 29552 +MOV R16, [R16] +MOV R17, 1 +EQ R16, R17 +JZ R16, _L4 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 5 +PUSH R1 +PUSH R2 +CALL 25600 +POP R2 +POP R1 +JMP _L3 +_L4: +MOV [29552], 1 +MOV R16, 29552 +ADD R16, 4 +MOV [R16], R2 +RET +JMP _L2 +_L1: +_L2: +MOV R16, 6 +EQ R16, R1 +JZ R16, _L5 +MOV R3, 0 +_L7: +MOV R16, 32 +GT R16, R3 +MOV R17, 29056 +MOV R18, 4 +MUL R18, R3 +ADD R17, R18 +ADD R17, 1 +MOV R17, [R17] +MOV R18, 0 +NE R17, R18 +MUL R16, R17 +JZ R16, _L8 +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L7 +_L8: +MOV R16, 32 +EQ R16, R3 +JZ R16, _L9 +MOV R0, -1 +JMP _L10 +_L9: +MOV R16, 29056 +MOV R17, 4 +MUL R17, R3 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 29056 +MOV R17, 4 +MUL R17, R3 +ADD R16, R17 +ADD R16, 1 +MOV [R16], 1 +MOV R0, R3 +_L10: +RET +JMP _L6 +_L5: +_L6: +MOV R16, 7 +EQ R16, R1 +JZ R16, _L11 +MOV R16, 29056 +MOV R17, R2 +MUL R17, 4 +ADD R16, R17 +MOV R16, [R16] +EQ R16, R3 +JZ R16, _L13 +MOV R16, 29056 +MOV R17, R2 +MUL R17, 4 +ADD R16, R17 +MOV [R16], -1 +MOV R4, 0 +_L15: +MOV R16, 16 +GT R16, R4 +JZ R16, _L16 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 10 +EQ R16, R17 +MOV R17, 28672 +MOV R18, R4 +MUL R18, 16 +ADD R17, R18 +ADD R17, 5 +MOV R17, [R17] +EQ R17, R2 +MUL R16, R17 +JZ R16, _L17 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 1 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +ADD R16, 5 +MOV [R16], -1 +JMP _L18 +_L17: +_L18: +MOV R16, R4 +ADD R16, 1 +MOV R4, R16 +JMP _L15 +_L16: +MOV R16, 29056 +MOV R17, 4 +MUL R17, R2 +ADD R16, R17 +ADD R16, 1 +MOV R17, 29056 +MOV R18, 4 +MUL R18, R2 +ADD R17, R18 +ADD R17, 1 +MOV R17, [R17] +SUB R17, 1 +MOV [R16], R17 +JMP _L14 +_L13: +_L14: +RET +JMP _L12 +_L11: +_L12: +MOV R16, 8 +EQ R16, R1 +JZ R16, _L19 +_L21: +MOV R16, 29568 +MOV R16, [R16] +MOV R17, 0 +NE R16, R17 +JZ R16, _L22 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 8 +PUSH R1 +PUSH R2 +CALL 25600 +POP R2 +POP R1 +JMP _L21 +_L22: +MOV [29568], 1 +MOV R16, 29568 +ADD R16, 1 +MOV [R16], R2 +RET +JMP _L20 +_L19: +_L20: +MOV R16, 9 +EQ R16, R1 +JZ R16, _L23 +MOV R16, 29568 +ADD R16, 1 +MOV R16, [R16] +NE R16, R2 +JZ R16, _L25 +MOV R0, -1 +RET +JMP _L26 +_L25: +MOV [29568], 0 +MOV R3, 0 +_L27: +MOV R16, 16 +GT R16, R3 +JZ R16, _L28 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 8 +EQ R16, R17 +JZ R16, _L29 +MOV R16, 28672 +MOV R17, 16 +MUL R17, R3 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 1 +JMP _L30 +_L29: +_L30: +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L27 +_L28: +MOV R0, 0 +RET +_L26: +JMP _L24 +_L23: +MOV R0, -1 +RET +_L24: +HALT \ No newline at end of file diff --git a/Stage22/mod1.spl b/Stage22/mod1.spl new file mode 100644 index 0000000..e2214c2 --- /dev/null +++ b/Stage22/mod1.spl @@ -0,0 +1,136 @@ +alias functionNumber R1; +alias currentPID R2; + +// get pcb entry +if (functionNumber == 1) then + alias i R3; + i = 1; + while (i < 16) do + if ([PROCESS_TABLE + i * 16 + 4] == TERMINATED) then + break; + endif; + i = i + 1; + endwhile; + if (i == 16) then + R0 = -1; + else + [PROCESS_TABLE + i * 16 + 4] = ALLOCATED; + [PROCESS_TABLE + i * 16 + 1] = i; + [PROCESS_TABLE + i * 16 + 14] = PAGE_TABLE_BASE + (20 * i); + [PROCESS_TABLE + i * 16 + 15] = 10; + R0 = i; + endif; + return; +endif; + +// free user areaPage +if (functionNumber == 2) then + alias userAreaPageNumber R3; + userAreaPageNumber = [PROCESS_TABLE + 16 * currentPID + 11]; + + alias i R4; + i = RESOURCE_TABLE_OFFSET; + while (i < 512) do + if ([[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i] == 1) then + multipush(R0, R1, R2, R3, R4); + R1 = 7; + R2 = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1]; + R3 = [SYSTEM_STATUS_TABLE + 1]; + call RESOURCE_MANAGER; + multipop(R0, R1, R2, R3, R4); + endif; + i = i + 2; + endwhile; + + multipush(R1, R2, R3); + R1 = 2; + R2 = userAreaPageNumber; + call MOD_2; + multipop(R1, R2, R3); + + return; +endif; + +// exit process +if (functionNumber == 3) then + multipush(R1, R2); + + // to free page table + R1 = 4; + R2 = currentPID; + call MOD_1; + + // to free user area page + R1 = 2; + R2 = currentPID; + call MOD_1; + + multipop(R1, R2); + + if ([PROCESS_TABLE + currentPID * 16 + 9] != 9) then // not invoked from exec + alias i R3; + i = 0; + while (i < 16) do + if ([PROCESS_TABLE + i * 16 + 4] == WAIT_PROCESS && [PROCESS_TABLE + i * 16 + 5] == currentPID) then + [PROCESS_TABLE + i * 16 + 4] = READY; + endif; + if ([PROCESS_TABLE + i * 16 + 2] == currentPID) then + [PROCESS_TABLE + i * 16 + 2] = -1; + endif; + i = i + 1; + endwhile; + endif; + + [PROCESS_TABLE + 16 * currentPID + 4] = TERMINATED; + return; +endif; + +// free page table +if (functionNumber == 4) then + [PTBR + 0] = -1; + [PTBR + 1] = "0000"; + [PTBR + 2] = -1; + [PTBR + 3] = "0000"; + + alias i R3; + alias pageNumber R4; + + i = 1; + while (i < (PTLR - 1)) do + pageNumber = [PTBR + 2 + 2 * i]; + if (pageNumber != -1) then + multipush(R1, R2, R3, R4); + + // to release page + R1 = 2; + R2 = pageNumber; + call MOD_2; + + multipop(R1, R2, R3, R4); + + [PTBR + 2 + 2 * i] = -1; + [PTBR + 3 + 2 * i] = "0000"; + endif; + i = i + 1; + endwhile; + + i = 2; + while (i < 10) do + if ([DISK_MAP_TABLE + currentPID * 10 + i] != -1) then + if (i < 4 || i > 7) then + multipush(R1, R2, R3, R4); + + R1 = 4; + R3 = currentPID; + R2 = [DISK_MAP_TABLE + currentPID * 10 + i]; + + call MOD_2; + + multipop(R1, R2, R3, R4); + endif; + [DISK_MAP_TABLE + currentPID * 10 + i] = -1; + endif; + i = i + 1; + endwhile; + return; +endif; \ No newline at end of file diff --git a/Stage22/mod1.xsm b/Stage22/mod1.xsm new file mode 100644 index 0000000..5deadbb --- /dev/null +++ b/Stage22/mod1.xsm @@ -0,0 +1,355 @@ +MOV R16, 1 +EQ R16, R1 +JZ R16, _L1 +MOV R3, 1 +_L3: +MOV R16, 16 +GT R16, R3 +JZ R16, _L4 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 4 +EQ R16, R17 +JZ R16, _L5 +JMP _L4 +JMP _L6 +_L5: +_L6: +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L3 +_L4: +MOV R16, 16 +EQ R16, R3 +JZ R16, _L7 +MOV R0, -1 +JMP _L8 +_L7: +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 12 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 1 +MOV [R16], R3 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 14 +MOV R17, 29696 +MOV R18, 20 +MUL R18, R3 +ADD R17, R18 +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 15 +MOV [R16], 10 +MOV R0, R3 +_L8: +RET +JMP _L2 +_L1: +_L2: +MOV R16, 2 +EQ R16, R1 +JZ R16, _L9 +MOV R16, 28672 +MOV R17, 16 +MUL R17, R2 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MOV R3, R16 +MOV R4, 496 +_L11: +MOV R16, 512 +GT R16, R4 +JZ R16, _L12 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, R4 +MOV R16, [R16] +MOV R17, 1 +EQ R16, R17 +JZ R16, _L13 +PUSH R0 +PUSH R1 +PUSH R2 +PUSH R3 +PUSH R4 +MOV R1, 7 +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +ADD R16, R4 +ADD R16, 1 +MOV R16, [R16] +MOV R2, R16 +MOV R16, 29560 +ADD R16, 1 +MOV R16, [R16] +MOV R3, R16 +CALL 20480 +POP R4 +POP R3 +POP R2 +POP R1 +POP R0 +JMP _L14 +_L13: +_L14: +MOV R16, R4 +ADD R16, 2 +MOV R4, R16 +JMP _L11 +_L12: +PUSH R1 +PUSH R2 +PUSH R3 +MOV R1, 2 +MOV R2, R3 +CALL 22528 +POP R3 +POP R2 +POP R1 +RET +JMP _L10 +_L9: +_L10: +MOV R16, 3 +EQ R16, R1 +JZ R16, _L15 +PUSH R1 +PUSH R2 +MOV R1, 4 +MOV R2, R2 +CALL 21504 +MOV R1, 2 +MOV R2, R2 +CALL 21504 +POP R2 +POP R1 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 9 +MOV R16, [R16] +MOV R17, 9 +NE R16, R17 +JZ R16, _L17 +MOV R3, 0 +_L19: +MOV R16, 16 +GT R16, R3 +JZ R16, _L20 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 9 +EQ R16, R17 +MOV R17, 28672 +MOV R18, R3 +MUL R18, 16 +ADD R17, R18 +ADD R17, 5 +MOV R17, [R17] +EQ R17, R2 +MUL R16, R17 +JZ R16, _L21 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 1 +JMP _L22 +_L21: +_L22: +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 2 +MOV R16, [R16] +EQ R16, R2 +JZ R16, _L23 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 2 +MOV [R16], -1 +JMP _L24 +_L23: +_L24: +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L19 +_L20: +JMP _L18 +_L17: +_L18: +MOV R16, 28672 +MOV R17, 16 +MUL R17, R2 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 4 +RET +JMP _L16 +_L15: +_L16: +MOV R16, 4 +EQ R16, R1 +JZ R16, _L25 +MOV R16, PTBR +ADD R16, 0 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 1 +MOV [R16], "0000" +MOV R16, PTBR +ADD R16, 2 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 3 +MOV [R16], "0000" +MOV R3, 1 +_L27: +MOV R16, PTLR +SUB R16, 1 +GT R16, R3 +JZ R16, _L28 +MOV R16, PTBR +ADD R16, 2 +MOV R17, 2 +MUL R17, R3 +ADD R16, R17 +MOV R16, [R16] +MOV R4, R16 +MOV R16, -1 +NE R16, R4 +JZ R16, _L29 +PUSH R1 +PUSH R2 +PUSH R3 +PUSH R4 +MOV R1, 2 +MOV R2, R4 +CALL 22528 +POP R4 +POP R3 +POP R2 +POP R1 +MOV R16, PTBR +ADD R16, 2 +MOV R17, 2 +MUL R17, R3 +ADD R16, R17 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 3 +MOV R17, 2 +MUL R17, R3 +ADD R16, R17 +MOV [R16], "0000" +JMP _L30 +_L29: +_L30: +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L27 +_L28: +MOV R3, 2 +_L31: +MOV R16, 10 +GT R16, R3 +JZ R16, _L32 +MOV R16, 30032 +MOV R17, R2 +MUL R17, 10 +ADD R16, R17 +ADD R16, R3 +MOV R16, [R16] +MOV R17, -1 +NE R16, R17 +JZ R16, _L33 +MOV R16, 4 +GT R16, R3 +MOV R17, 7 +LT R17, R3 +ADD R16, R17 +JZ R16, _L35 +PUSH R1 +PUSH R2 +PUSH R3 +PUSH R4 +MOV R1, 4 +MOV R3, R2 +MOV R16, 30032 +MOV R17, R2 +MUL R17, 10 +ADD R16, R17 +ADD R16, R3 +MOV R16, [R16] +MOV R2, R16 +CALL 22528 +POP R4 +POP R3 +POP R2 +POP R1 +JMP _L36 +_L35: +_L36: +MOV R16, 30032 +MOV R17, R2 +MUL R17, 10 +ADD R16, R17 +ADD R16, R3 +MOV [R16], -1 +JMP _L34 +_L33: +_L34: +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L31 +_L32: +RET +JMP _L26 +_L25: +_L26: +HALT \ No newline at end of file diff --git a/Stage22/mod7.spl b/Stage22/mod7.spl new file mode 100644 index 0000000..13f8040 --- /dev/null +++ b/Stage22/mod7.spl @@ -0,0 +1,179 @@ +// exhandler +loadi(2, 15); +loadi(3, 16); + +// timer interrupt +loadi(4, 17); +loadi(5, 18); + +// write interrupt +loadi(16, 29); +loadi(17, 30); + +// int 10 +loadi(22, 35); +loadi(23, 36); + +// int 8 (fork) +loadi(18, 31); +loadi(19, 32); + +// Library +loadi(63, 13); +loadi(64, 14); + +// init +loadi(65, 7); +loadi(66, 8); + +// module 5 +loadi(50, 63); +loadi(51, 64); + +// module 0 +loadi(40, 53); +loadi(41, 54); + +// module 4 +loadi(48, 61); +loadi(49, 62); + +// console interrupt +loadi(8, 21); +loadi(9, 22); + +// int 6 +loadi(14, 27); +loadi(15, 28); + +// int 9 +loadi(20, 33); +loadi(21, 34); + +// int 11 +loadi(24, 37); +loadi(25, 38); + +// int 13 +loadi(28, 41); +loadi(29, 42); + +// int 14 +loadi(30, 43); +loadi(31, 44); + +// int 15 +loadi(32, 45); +loadi(33, 46); + +// module 1 +loadi(42, 55); +loadi(43, 56); + +// module 2 +loadi(44, 57); +loadi(45, 58); + +// inode user table +loadi(59, 3); +loadi(60, 4); + +// disk interrupt +loadi(6, 19); +loadi(7, 20); + +// disk free list +loadi(61, 2); + +// memory free list initialization +alias i R0; +i = 0; +while (i < 128) do + if (i < 76) then + [MEMORY_FREE_LIST + i] = 1; + else + [MEMORY_FREE_LIST + i] = 0; + endif; + i = i + 1; +endwhile; + +[MEMORY_FREE_LIST + 76] = 1; +[MEMORY_FREE_LIST + 77] = 1; +[MEMORY_FREE_LIST + 78] = 1; +[MEMORY_FREE_LIST + 79] = 1; +[MEMORY_FREE_LIST + 80] = 1; +[MEMORY_FREE_LIST + 81] = 1; +[MEMORY_FREE_LIST + 82] = 1; + +PTBR = PAGE_TABLE_BASE + 20; +PTLR = 10; + +[PTBR + 0] = 63; +[PTBR + 1] = "0100"; +[PTBR + 2] = 64; +[PTBR + 3] = "0100"; +[PTBR + 4] = 78; +[PTBR + 5] = "0110"; +[PTBR + 6] = 79; +[PTBR + 7] = "0110"; +[PTBR + 8] = 65; +[PTBR + 9] = "0100"; +[PTBR + 10] = 66; +[PTBR + 11] = "0100"; +[PTBR + 12] = -1; +[PTBR + 13] = "0000"; +[PTBR + 14] = -1; +[PTBR + 15] = "0000"; +[PTBR + 16] = 76; +[PTBR + 17] = "0110"; +[PTBR + 18] = 77; +[PTBR + 19] = "0110"; + +[PROCESS_TABLE + 16 + 1] = 1; +[PROCESS_TABLE + 16 + 11] = 80; +[PROCESS_TABLE + 16 + 12] = 0; +[PROCESS_TABLE + 16 + 13] = 8 * 512; +[PROCESS_TABLE + 16 + 14] = PTBR; +[PROCESS_TABLE + 16 + 15] = PTLR; +[PROCESS_TABLE + 16 + 4] = CREATED; +[76 * 512] = [65 * 512 + 1]; + +// per-process resource table for init +i = 1; +while (i < 9) do + [([PROCESS_TABLE + 16 + 11] + 1) * 512 - 2 * i] = -1; + i = i + 1; +endwhile; + +// disk map table initialization for init + +[DISK_MAP_TABLE + 10 + 2] = -1; +[DISK_MAP_TABLE + 10 + 3] = -1; +[DISK_MAP_TABLE + 10 + 4] = 7; +[DISK_MAP_TABLE + 10 + 5] = 8; +[DISK_MAP_TABLE + 10 + 6] = -1; +[DISK_MAP_TABLE + 10 + 7] = -1; +[DISK_MAP_TABLE + 10 + 8] = -1; +[DISK_MAP_TABLE + 10 + 9] = -1; + +i = 2; +while (i < 16) do + [PROCESS_TABLE + 16 * i + 4] = TERMINATED; + i = i + 1; +endwhile; + +[TERMINAL_STATUS_TABLE] = 0; +[DISK_STATUS_TABLE] = 0; +[SYSTEM_STATUS_TABLE + 0] = 0; +[SYSTEM_STATUS_TABLE + 2] = 45; +[SYSTEM_STATUS_TABLE + 3] = 0; + +// initialization of semaphore table +i = 0; +while (i < MAX_SEM_COUNT) do + [SEMAPHORE_TABLE + i * 4] = -1; + [SEMAPHORE_TABLE + i * 4 + 1] = 0; + i = i + 1; +endwhile; + +return; \ No newline at end of file diff --git a/Stage22/mod7.xsm b/Stage22/mod7.xsm new file mode 100644 index 0000000..2d9a5b4 --- /dev/null +++ b/Stage22/mod7.xsm @@ -0,0 +1,332 @@ +MOV R16, 2 +LOADI R16, 15 +MOV R16, 3 +LOADI R16, 16 +MOV R16, 4 +LOADI R16, 17 +MOV R16, 5 +LOADI R16, 18 +MOV R16, 16 +LOADI R16, 29 +MOV R16, 17 +LOADI R16, 30 +MOV R16, 22 +LOADI R16, 35 +MOV R16, 23 +LOADI R16, 36 +MOV R16, 18 +LOADI R16, 31 +MOV R16, 19 +LOADI R16, 32 +MOV R16, 63 +LOADI R16, 13 +MOV R16, 64 +LOADI R16, 14 +MOV R16, 65 +LOADI R16, 7 +MOV R16, 66 +LOADI R16, 8 +MOV R16, 50 +LOADI R16, 63 +MOV R16, 51 +LOADI R16, 64 +MOV R16, 40 +LOADI R16, 53 +MOV R16, 41 +LOADI R16, 54 +MOV R16, 48 +LOADI R16, 61 +MOV R16, 49 +LOADI R16, 62 +MOV R16, 8 +LOADI R16, 21 +MOV R16, 9 +LOADI R16, 22 +MOV R16, 14 +LOADI R16, 27 +MOV R16, 15 +LOADI R16, 28 +MOV R16, 20 +LOADI R16, 33 +MOV R16, 21 +LOADI R16, 34 +MOV R16, 24 +LOADI R16, 37 +MOV R16, 25 +LOADI R16, 38 +MOV R16, 28 +LOADI R16, 41 +MOV R16, 29 +LOADI R16, 42 +MOV R16, 30 +LOADI R16, 43 +MOV R16, 31 +LOADI R16, 44 +MOV R16, 32 +LOADI R16, 45 +MOV R16, 33 +LOADI R16, 46 +MOV R16, 42 +LOADI R16, 55 +MOV R16, 43 +LOADI R16, 56 +MOV R16, 44 +LOADI R16, 57 +MOV R16, 45 +LOADI R16, 58 +MOV R16, 59 +LOADI R16, 3 +MOV R16, 60 +LOADI R16, 4 +MOV R16, 6 +LOADI R16, 19 +MOV R16, 7 +LOADI R16, 20 +MOV R16, 61 +LOADI R16, 2 +MOV R0, 0 +_L1: +MOV R16, 128 +GT R16, R0 +JZ R16, _L2 +MOV R16, 76 +GT R16, R0 +JZ R16, _L3 +MOV R16, 29184 +ADD R16, R0 +MOV [R16], 1 +JMP _L4 +_L3: +MOV R16, 29184 +ADD R16, R0 +MOV [R16], 0 +_L4: +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L1 +_L2: +MOV R16, 29184 +ADD R16, 76 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 77 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 78 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 79 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 80 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 81 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 82 +MOV [R16], 1 +MOV R16, 29696 +ADD R16, 20 +MOV PTBR, R16 +MOV PTLR, 10 +MOV R16, PTBR +ADD R16, 0 +MOV [R16], 63 +MOV R16, PTBR +ADD R16, 1 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 2 +MOV [R16], 64 +MOV R16, PTBR +ADD R16, 3 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 4 +MOV [R16], 78 +MOV R16, PTBR +ADD R16, 5 +MOV [R16], "0110" +MOV R16, PTBR +ADD R16, 6 +MOV [R16], 79 +MOV R16, PTBR +ADD R16, 7 +MOV [R16], "0110" +MOV R16, PTBR +ADD R16, 8 +MOV [R16], 65 +MOV R16, PTBR +ADD R16, 9 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 10 +MOV [R16], 66 +MOV R16, PTBR +ADD R16, 11 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 12 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 13 +MOV [R16], "0000" +MOV R16, PTBR +ADD R16, 14 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 15 +MOV [R16], "0000" +MOV R16, PTBR +ADD R16, 16 +MOV [R16], 76 +MOV R16, PTBR +ADD R16, 17 +MOV [R16], "0110" +MOV R16, PTBR +ADD R16, 18 +MOV [R16], 77 +MOV R16, PTBR +ADD R16, 19 +MOV [R16], "0110" +MOV R16, 28672 +ADD R16, 16 +ADD R16, 1 +MOV [R16], 1 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 11 +MOV [R16], 80 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 12 +MOV [R16], 0 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 13 +MOV R17, 8 +MUL R17, 512 +MOV [R16], R17 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 14 +MOV [R16], PTBR +MOV R16, 28672 +ADD R16, 16 +ADD R16, 15 +MOV [R16], PTLR +MOV R16, 28672 +ADD R16, 16 +ADD R16, 4 +MOV [R16], 3 +MOV R16, 76 +MUL R16, 512 +MOV R17, 65 +MUL R17, 512 +ADD R17, 1 +MOV R17, [R17] +MOV [R16], R17 +MOV R0, 1 +_L5: +MOV R16, 9 +GT R16, R0 +JZ R16, _L6 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 11 +MOV R16, [R16] +ADD R16, 1 +MUL R16, 512 +MOV R17, 2 +MUL R17, R0 +SUB R16, R17 +MOV [R16], -1 +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L5 +_L6: +MOV R16, 30032 +ADD R16, 10 +ADD R16, 2 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 3 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 4 +MOV [R16], 7 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 5 +MOV [R16], 8 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 6 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 7 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 8 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 9 +MOV [R16], -1 +MOV R0, 2 +_L7: +MOV R16, 16 +GT R16, R0 +JZ R16, _L8 +MOV R16, 28672 +MOV R17, 16 +MUL R17, R0 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 4 +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L7 +_L8: +MOV [29568], 0 +MOV [29552], 0 +MOV R16, 29560 +ADD R16, 0 +MOV [R16], 0 +MOV R16, 29560 +ADD R16, 2 +MOV [R16], 45 +MOV R16, 29560 +ADD R16, 3 +MOV [R16], 0 +MOV R0, 0 +_L9: +MOV R16, 32 +GT R16, R0 +JZ R16, _L10 +MOV R16, 29056 +MOV R17, R0 +MUL R17, 4 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 29056 +MOV R17, R0 +MUL R17, 4 +ADD R16, R17 +ADD R16, 1 +MOV [R16], 0 +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L9 +_L10: +RET +HALT \ No newline at end of file diff --git a/expl/assemblycode.asm b/expl/assemblycode.asm new file mode 100644 index 0000000..96f9483 --- /dev/null +++ b/expl/assemblycode.asm @@ -0,0 +1,13 @@ +0 +2056 +0 +0 +0 +0 +0 +0 +MOV SP,4095 +MOV BP,4096 +PUSH R0 +CALL MAIN +INT 10 diff --git a/xfs-interface/stage22.sh b/xfs-interface/stage22.sh new file mode 100644 index 0000000..b1e4480 --- /dev/null +++ b/xfs-interface/stage22.sh @@ -0,0 +1,22 @@ +load --os $HOME/myexpos/Stage13/os_startup.xsm +load --init $HOME/myexpos/Stage21/Assgn1/shell2.xsm +load --idle $HOME/myexpos/Stage14/idle.xsm +load --int=10 $HOME/myexpos/Stage20/exit.xsm +load --int=11 $HOME/myexpos/Stage21/int11.xsm +load --int=13 $HOME/myexpos/Stage22/int13.xsm +load --int=14 $HOME/myexpos/Stage22/int14.xsm +load --int=15 $HOME/myexpos/Stage21/int15.xsm +load --int=9 $HOME/myexpos/Stage19/int9.xsm +load --int=8 $HOME/myexpos/Stage22/fork.xsm +load --exhandler $HOME/myexpos/Stage21/exhandler.xsm +load --int=7 $HOME/myexpos/Stage15/int7.xsm +load --int=6 $HOME/myexpos/Stage16/int6.xsm +load --int=disk $HOME/myexpos/Stage18/int2.xsm +load --int=console $HOME/myexpos/Stage16/console_int.xsm +load --module 5 $HOME/myexpos/Stage20/scheduler.xsm +load --module 7 $HOME/myexpos/Stage22/mod7.xsm +load --module 0 $HOME/myexpos/Stage22/mod0.xsm +load --module 1 $HOME/myexpos/Stage22/mod1.xsm +load --module 2 $HOME/myexpos/Stage19/module_2.xsm +load --module 4 $HOME/myexpos/Stage18/module_4.xsm +load --int=timer $HOME/myexpos/Stage14/timer.xsm \ No newline at end of file From 1510ef9e655bd2e0dc0f0084e6fbc93e456338a8 Mon Sep 17 00:00:00 2001 From: dhwanish-3 <108540722+dhwanish-3@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:25:12 +0530 Subject: [PATCH 2/3] Assgn1 done + fork corrected --- Stage20/fork.spl | 2 +- Stage20/fork.xsm | 108 ++++----- Stage22/Assgn1/test4.expl | 83 +++++++ Stage22/Assgn1/test4.xsm | 495 ++++++++++++++++++++++++++++++++++++++ Stage22/fork.spl | 8 +- Stage22/fork.xsm | 20 +- Stage22/int13.spl | 2 + Stage22/int13.xsm | 6 + Stage22/int14.spl | 6 +- Stage22/int14.xsm | 16 +- expl/assemblycode.asm | 13 - expl/assemblycode.xsm | 415 +++++++++++++++++++++++++++++++- expl/compile | 0 xfs-interface/stage22.sh | 3 +- 14 files changed, 1073 insertions(+), 104 deletions(-) create mode 100644 Stage22/Assgn1/test4.expl create mode 100644 Stage22/Assgn1/test4.xsm delete mode 100644 expl/assemblycode.asm mode change 100644 => 100755 expl/compile diff --git a/Stage20/fork.spl b/Stage20/fork.spl index e54bd57..a8a42bb 100644 --- a/Stage20/fork.spl +++ b/Stage20/fork.spl @@ -71,7 +71,7 @@ else multipop(R0, R1, R2, R3); - [PROCESS_MANAGER + newPID * 16 + 11] = R5; + [PROCESS_TABLE + newPID * 16 + 11] = R5; // initialization per process resourse table child alias i R4; diff --git a/Stage20/fork.xsm b/Stage20/fork.xsm index bd6bf67..5c09da2 100644 --- a/Stage20/fork.xsm +++ b/Stage20/fork.xsm @@ -98,32 +98,30 @@ JMP _L4 _L3: _L4: MOV R16, 29696 -MOV R17, R2 -MUL R17, 20 +MOV R17, 20 +MUL R17, R2 ADD R16, R17 -MOV R4, R16 +MOV R3, R16 PUSH R0 PUSH R1 PUSH R2 PUSH R3 -PUSH R4 MOV R1, 1 CALL 22528 -MOV R16, R4 +MOV R16, R3 ADD R16, 16 MOV [R16], R0 -MOV R16, R4 +MOV R16, R3 ADD R16, 17 MOV [R16], "0110" MOV R1, 1 CALL 22528 -MOV R16, R4 +MOV R16, R3 ADD R16, 18 MOV [R16], R0 -MOV R16, R4 +MOV R16, R3 ADD R16, 19 MOV [R16], "0110" -POP R4 POP R3 POP R2 POP R1 @@ -235,11 +233,9 @@ PUSH R0 PUSH R1 PUSH R2 PUSH R3 -PUSH R4 MOV R1, 1 CALL 22528 MOV R5, R0 -POP R4 POP R3 POP R2 POP R1 @@ -252,10 +248,10 @@ ADD R16, 11 MOV [R16], R5 MOV R16, 512 SUB R16, 16 -MOV R3, R16 +MOV R4, R16 _L5: MOV R16, 512 -GT R16, R3 +GT R16, R4 JZ R16, _L6 MOV R16, 28672 MOV R17, R2 @@ -264,7 +260,7 @@ ADD R16, R17 ADD R16, 11 MOV R16, [R16] MUL R16, 512 -ADD R16, R3 +ADD R16, R4 MOV R17, 28672 MOV R18, 29560 ADD R18, 1 @@ -274,71 +270,71 @@ ADD R17, R18 ADD R17, 11 MOV R17, [R17] MUL R17, 512 -ADD R17, R3 +ADD R17, R4 MOV R17, [R17] MOV [R16], R17 -MOV R16, R3 +MOV R16, R4 ADD R16, 1 -MOV R3, R16 +MOV R4, R16 JMP _L5 _L6: -MOV R3, 0 +MOV R4, 0 _L7: MOV R16, 10 -GT R16, R3 +GT R16, R4 JZ R16, _L8 MOV R16, 30032 -MOV R17, R2 -MUL R17, 10 +MOV R17, 10 +MUL R17, R2 ADD R16, R17 -ADD R16, R3 +ADD R16, R4 MOV R17, 30032 MOV R18, 29560 ADD R18, 1 MOV R18, [R18] MUL R18, 10 ADD R17, R18 -ADD R17, R3 +ADD R17, R4 MOV R17, [R17] MOV [R16], R17 -MOV R16, R3 +MOV R16, R4 ADD R16, 1 -MOV R3, R16 +MOV R4, R16 JMP _L7 _L8: -MOV R3, 0 +MOV R4, 0 _L9: MOV R16, 16 -GT R16, R3 +GT R16, R4 JZ R16, _L10 -MOV R16, R4 -ADD R16, R3 +MOV R16, R3 +ADD R16, R4 MOV R17, PTBR -ADD R17, R3 +ADD R17, R4 MOV R17, [R17] MOV [R16], R17 -MOV R16, R4 -ADD R16, R3 +MOV R16, R3 +ADD R16, R4 ADD R16, 1 MOV R17, PTBR -ADD R17, R3 +ADD R17, R4 ADD R17, 1 MOV R17, [R17] MOV [R16], R17 -MOV R16, R4 -ADD R16, R3 +MOV R16, R3 +ADD R16, R4 MOV R16, [R16] MOV R17, -1 NE R16, R17 JZ R16, _L11 MOV R16, 29184 -MOV R17, R4 -ADD R17, R3 +MOV R17, R3 +ADD R17, R4 MOV R17, [R17] ADD R16, R17 MOV R17, 29184 -MOV R18, R4 -ADD R18, R3 +MOV R18, R3 +ADD R18, R4 MOV R18, [R18] ADD R17, R18 MOV R17, [R17] @@ -347,61 +343,61 @@ MOV [R16], R17 JMP _L12 _L11: _L12: -MOV R16, R3 +MOV R16, R4 ADD R16, 2 -MOV R3, R16 +MOV R4, R16 JMP _L9 _L10: MOV R16, PTBR ADD R16, 16 MOV R16, [R16] MOV R5, R16 -MOV R16, R4 +MOV R16, R3 ADD R16, 16 MOV R16, [R16] MOV R6, R16 -MOV R3, 0 +MOV R4, 0 _L13: MOV R16, 512 -GT R16, R3 +GT R16, R4 JZ R16, _L14 MOV R16, R6 MUL R16, 512 -ADD R16, R3 +ADD R16, R4 MOV R17, R5 MUL R17, 512 -ADD R17, R3 +ADD R17, R4 MOV R17, [R17] MOV [R16], R17 -MOV R16, R3 +MOV R16, R4 ADD R16, 1 -MOV R3, R16 +MOV R4, R16 JMP _L13 _L14: MOV R16, PTBR ADD R16, 18 MOV R16, [R16] MOV R5, R16 -MOV R16, R4 +MOV R16, R3 ADD R16, 18 MOV R16, [R16] MOV R6, R16 -MOV R3, 0 +MOV R4, 0 _L15: MOV R16, 512 -GT R16, R3 +GT R16, R4 JZ R16, _L16 MOV R16, R6 MUL R16, 512 -ADD R16, R3 +ADD R16, R4 MOV R17, R5 MUL R17, 512 -ADD R17, R3 +ADD R17, R4 MOV R17, [R17] MOV [R16], R17 -MOV R16, R3 +MOV R16, R4 ADD R16, 1 -MOV R3, R16 +MOV R4, R16 JMP _L15 _L16: MOV R16, 28672 @@ -438,7 +434,7 @@ MOV R17, R0 SUB R17, 1 DIV R17, 512 MUL R16, R17 -ADD R16, R4 +ADD R16, R3 MOV R16, [R16] MUL R16, 512 MOV R17, R0 diff --git a/Stage22/Assgn1/test4.expl b/Stage22/Assgn1/test4.expl new file mode 100644 index 0000000..80d2f96 --- /dev/null +++ b/Stage22/Assgn1/test4.expl @@ -0,0 +1,83 @@ +type +Share +{ + int isempty; + int data; +} +endtype + +decl + Share head; +enddecl + +int main() +{ +decl + int temp, x, pidone, pidtwo, semid, iter, counter; +enddecl + +begin + x = exposcall("Heapset"); + semid = exposcall("Semget"); + head = exposcall("Alloc", 2); + head.isempty = 1; + pidone = exposcall("Fork"); + + if (pidone == 0) then + iter = 1; + while(iter <= 100) do + temp = exposcall("SemLock", semid); + temp = head.isempty; + + if(temp == 1) then + head.data = iter; + head.isempty = 0; + iter = iter + 2; + endif; + + temp = exposcall("SemUnLock", semid); + + counter = 0; + while(counter < 50) do + counter = counter + 1; + endwhile; + endwhile; + else + pidtwo = exposcall("Fork"); + + if(pidtwo == 0) then + iter = 2; + while(iter <= 100) do + temp = exposcall("SemLock", semid); + temp = head.isempty; + + if(temp == 1) then + head.data = iter; + head.isempty = 0; + iter = iter + 2; + endif; + + temp = exposcall("SemUnLock", semid); + endwhile; + else + iter = 1; + while(iter <= 100) do + temp = exposcall("SemLock", semid); + temp = head.isempty; + + if(temp == 0) then + x = head.data; + head.isempty = 1; + temp = exposcall("Write", -2, x); + iter = iter + 1; + endif; + + temp = exposcall("SemUnLock", semid); + endwhile; + endif; + endif; + + temp = exposcall("Semrelease", semid); + return 0; +end +} \ No newline at end of file diff --git a/Stage22/Assgn1/test4.xsm b/Stage22/Assgn1/test4.xsm new file mode 100644 index 0000000..31a6b22 --- /dev/null +++ b/Stage22/Assgn1/test4.xsm @@ -0,0 +1,495 @@ +0 +2056 +0 +0 +0 +0 +0 +0 +MOV SP,4096 +MOV BP,4097 +PUSH R0 +CALL 2066 +INT 10 +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R0,"Heapset" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Semget" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,5 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Alloc" +PUSH R0 +MOV R0,2 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R0,1 +MOV R1,[4096] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,"Fork" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +EQ R0,R1 +JZ R0,2478 +MOV R0,1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +LE R0,R1 +JZ R0,2476 +MOV R0,"SemLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,[4096] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +EQ R0,R1 +JZ R0,2386 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,[4096] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R1,0 +MOV R2,[4096] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R1,R2 +MOV R3,BP +MOV R2,6 +ADD R3,R2 +MOV [R3],R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,0 +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,7 +ADD R1,R0 +MOV R0,[R1] +MOV R1,50 +LT R0,R1 +JZ R0,2474 +MOV R1,BP +MOV R0,7 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R0,R1 +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV [R2],R0 +JMP 2438 +JMP 2246 +JMP 2958 +MOV R0,"Fork" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +EQ R0,R1 +JZ R0,2720 +MOV R0,2 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +LE R0,R1 +JZ R0,2718 +MOV R0,"SemLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,[4096] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +EQ R0,R1 +JZ R0,2674 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,[4096] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R1,0 +MOV R2,[4096] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R1,R2 +MOV R3,BP +MOV R2,6 +ADD R3,R2 +MOV [R3],R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +JMP 2534 +JMP 2958 +MOV R0,1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +LE R0,R1 +JZ R0,2958 +MOV R0,"SemLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,[4096] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +EQ R0,R1 +JZ R0,2914 +MOV R1,[4096] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV [R3],R1 +MOV R1,1 +MOV R2,[4096] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +PUSH R0 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +POP R0 +MOV R1,6 +MOV R2,SP +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R1,R2 +MOV R3,BP +MOV R2,6 +ADD R3,R2 +MOV [R3],R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +JMP 2730 +MOV R0,"Semrelease" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET diff --git a/Stage22/fork.spl b/Stage22/fork.spl index 17c475e..62962c0 100644 --- a/Stage22/fork.spl +++ b/Stage22/fork.spl @@ -71,19 +71,21 @@ else multipop(R0, R1, R2, R3); - [PROCESS_MANAGER + newPID * 16 + 11] = R5; + [PROCESS_TABLE + newPID * 16 + 11] = R5; // initialization per process resourse table child alias i R4; - i = 512 - 16; + i = RESOURCE_TABLE_OFFSET; + print "start"; while (i < 512) do [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i] = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i]; [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i + 1] = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1]; if ([[PROCESS_TABLE + newPID * 16 + 11] * 512 + i] == 1) then - [SEMAPHORE_TABLE + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1] * 4 + 1] = [SEMAPHORE_TABLE + [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1] * 4 + 1] + 1; + [SEMAPHORE_TABLE + [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i + 1] * 4 + 1] = [SEMAPHORE_TABLE + [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i + 1] * 4 + 1] + 1; endif; i = i + 2; endwhile; + print "end"; // disk map table for child i = 0; diff --git a/Stage22/fork.xsm b/Stage22/fork.xsm index e14c88e..14de336 100644 --- a/Stage22/fork.xsm +++ b/Stage22/fork.xsm @@ -240,15 +240,16 @@ POP R3 POP R2 POP R1 POP R0 -MOV R16, 21504 +MOV R16, 28672 MOV R17, R2 MUL R17, 16 ADD R16, R17 ADD R16, 11 MOV [R16], R5 -MOV R16, 512 -SUB R16, 16 -MOV R4, R16 +MOV R4, 496 +MOV R16, "start" +PORT P1, R16 +OUT _L5: MOV R16, 512 GT R16, R4 @@ -309,9 +310,7 @@ EQ R16, R17 JZ R16, _L7 MOV R16, 29056 MOV R17, 28672 -MOV R18, 29560 -ADD R18, 1 -MOV R18, [R18] +MOV R18, R2 MUL R18, 16 ADD R17, R18 ADD R17, 11 @@ -325,9 +324,7 @@ ADD R16, R17 ADD R16, 1 MOV R17, 29056 MOV R18, 28672 -MOV R19, 29560 -ADD R19, 1 -MOV R19, [R19] +MOV R19, R2 MUL R19, 16 ADD R18, R19 ADD R18, 11 @@ -350,6 +347,9 @@ ADD R16, 2 MOV R4, R16 JMP _L5 _L6: +MOV R16, "end" +PORT P1, R16 +OUT MOV R4, 0 _L9: MOV R16, 10 diff --git a/Stage22/int13.spl b/Stage22/int13.spl index 1724827..cc9f160 100644 --- a/Stage22/int13.spl +++ b/Stage22/int13.spl @@ -34,6 +34,7 @@ if (sysCallNumber == 17) then // semget [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + i * 2 + 1] = R5; [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = i; endif; + print "semget"; endif; endif; @@ -56,6 +57,7 @@ if (sysCallNumber == 18) then // semrelease [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId] = -1; [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId + 1] = -1; endif; + print "semrelease"; endif; [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; diff --git a/Stage22/int13.xsm b/Stage22/int13.xsm index 85a4da2..9e84659 100644 --- a/Stage22/int13.xsm +++ b/Stage22/int13.xsm @@ -162,6 +162,9 @@ MOD R17, 512 ADD R16, R17 MOV [R16], R2 _L8: +MOV R16, "semget" +PORT P1, R16 +OUT _L6: JMP _L2 _L1: @@ -279,6 +282,9 @@ ADD R16, R17 ADD R16, 1 MOV [R16], -1 _L12: +MOV R16, "semrelease" +PORT P1, R16 +OUT JMP _L10 _L9: _L10: diff --git a/Stage22/int14.spl b/Stage22/int14.spl index 29516bd..261921b 100644 --- a/Stage22/int14.spl +++ b/Stage22/int14.spl @@ -59,9 +59,9 @@ if (sysCallNumber == 20) then // semUnLock alias i R5; i = 0; while (i < 16) do - if ([PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 4] == WAIT_SEMAPHORE && [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 5] == semID) then - [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 4] = READY; - [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 5] = -1; + if ([PROCESS_TABLE + i * 16 + 4] == WAIT_SEMAPHORE && [PROCESS_TABLE + i * 16 + 5] == semID) then + [PROCESS_TABLE + i * 16 + 4] = READY; + [PROCESS_TABLE + i * 16 + 5] = -1; endif; i = i + 1; endwhile; diff --git a/Stage22/int14.xsm b/Stage22/int14.xsm index 568be1d..0920fe3 100644 --- a/Stage22/int14.xsm +++ b/Stage22/int14.xsm @@ -249,9 +249,7 @@ MOV R16, 16 GT R16, R5 JZ R16, _L14 MOV R16, 28672 -MOV R17, 29560 -ADD R17, 1 -MOV R17, [R17] +MOV R17, R5 MUL R17, 16 ADD R16, R17 ADD R16, 4 @@ -259,9 +257,7 @@ MOV R16, [R16] MOV R17, 10 EQ R16, R17 MOV R17, 28672 -MOV R18, 29560 -ADD R18, 1 -MOV R18, [R18] +MOV R18, R5 MUL R18, 16 ADD R17, R18 ADD R17, 5 @@ -270,17 +266,13 @@ EQ R17, R4 MUL R16, R17 JZ R16, _L15 MOV R16, 28672 -MOV R17, 29560 -ADD R17, 1 -MOV R17, [R17] +MOV R17, R5 MUL R17, 16 ADD R16, R17 ADD R16, 4 MOV [R16], 1 MOV R16, 28672 -MOV R17, 29560 -ADD R17, 1 -MOV R17, [R17] +MOV R17, R5 MUL R17, 16 ADD R16, R17 ADD R16, 5 diff --git a/expl/assemblycode.asm b/expl/assemblycode.asm deleted file mode 100644 index 96f9483..0000000 --- a/expl/assemblycode.asm +++ /dev/null @@ -1,13 +0,0 @@ -0 -2056 -0 -0 -0 -0 -0 -0 -MOV SP,4095 -MOV BP,4096 -PUSH R0 -CALL MAIN -INT 10 diff --git a/expl/assemblycode.xsm b/expl/assemblycode.xsm index b77d1b3..31a6b22 100644 --- a/expl/assemblycode.xsm +++ b/expl/assemblycode.xsm @@ -6,14 +6,73 @@ 0 0 0 -MOV SP,4095 -MOV BP,4096 +MOV SP,4096 +MOV BP,4097 PUSH R0 CALL 2066 INT 10 PUSH BP MOV BP,SP PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R0,"Heapset" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Semget" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,5 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Alloc" +PUSH R0 +MOV R0,2 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R0,1 +MOV R1,[4096] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 MOV R0,"Fork" PUSH R0 PUSH R0 @@ -27,11 +86,98 @@ MOV R1,SP ADD R1,R0 MOV R0,[R1] MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +EQ R0,R1 +JZ R0,2478 +MOV R0,1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +LE R0,R1 +JZ R0,2476 +MOV R0,"SemLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP MOV R1,1 ADD R2,R1 MOV [R2],R0 -MOV R0,"Fork" +MOV R0,[4096] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +EQ R0,R1 +JZ R0,2386 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,[4096] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R1,0 +MOV R2,[4096] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R1,R2 +MOV R3,BP +MOV R2,6 +ADD R3,R2 +MOV [R3],R1 +MOV R0,"SemUnLock" PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 PUSH R0 PUSH R0 PUSH R0 @@ -46,6 +192,31 @@ MOV R2,BP MOV R1,1 ADD R2,R1 MOV [R2],R0 +MOV R0,0 +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,7 +ADD R1,R0 +MOV R0,[R1] +MOV R1,50 +LT R0,R1 +JZ R0,2474 +MOV R1,BP +MOV R0,7 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R0,R1 +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV [R2],R0 +JMP 2438 +JMP 2246 +JMP 2958 MOV R0,"Fork" PUSH R0 PUSH R0 @@ -59,12 +230,240 @@ MOV R1,SP ADD R1,R0 MOV R0,[R1] MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +EQ R0,R1 +JZ R0,2720 +MOV R0,2 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +LE R0,R1 +JZ R0,2718 +MOV R0,"SemLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,[4096] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +EQ R0,R1 +JZ R0,2674 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,[4096] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R1,0 +MOV R2,[4096] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R1,R2 +MOV R3,BP +MOV R2,6 +ADD R3,R2 +MOV [R3],R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP MOV R1,1 ADD R2,R1 MOV [R2],R0 -MOV R0,"Exec" +JMP 2534 +JMP 2958 +MOV R0,1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +LE R0,R1 +JZ R0,2958 +MOV R0,"SemLock" PUSH R0 -MOV R0,"pid.xsm" +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,[4096] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +EQ R0,R1 +JZ R0,2914 +MOV R1,[4096] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV [R3],R1 +MOV R1,1 +MOV R2,[4096] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +PUSH R0 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +POP R0 +MOV R1,6 +MOV R2,SP +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R1,R2 +MOV R3,BP +MOV R2,6 +ADD R3,R2 +MOV [R3],R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +JMP 2730 +MOV R0,"Semrelease" +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 PUSH R0 PUSH R0 PUSH R0 @@ -85,6 +484,12 @@ MOV R2,2 SUB R1,R2 MOV [R1],R0 POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 MOV BP,[SP] POP R0 RET diff --git a/expl/compile b/expl/compile old mode 100644 new mode 100755 diff --git a/xfs-interface/stage22.sh b/xfs-interface/stage22.sh index b1e4480..ab726f9 100644 --- a/xfs-interface/stage22.sh +++ b/xfs-interface/stage22.sh @@ -19,4 +19,5 @@ load --module 0 $HOME/myexpos/Stage22/mod0.xsm load --module 1 $HOME/myexpos/Stage22/mod1.xsm load --module 2 $HOME/myexpos/Stage19/module_2.xsm load --module 4 $HOME/myexpos/Stage18/module_4.xsm -load --int=timer $HOME/myexpos/Stage14/timer.xsm \ No newline at end of file +load --int=timer $HOME/myexpos/Stage14/timer.xsm +load --exec $HOME/myexpos/Stage22/Assgn1/test4.xsm \ No newline at end of file From ab9af398a199df137677b9add3cd49d35401e15b Mon Sep 17 00:00:00 2001 From: dhwanish-3 <108540722+dhwanish-3@users.noreply.github.com> Date: Fri, 20 Oct 2023 23:24:04 +0530 Subject: [PATCH 3/3] Stage 22 + 3 Assgn1 doen --- Stage22/Assgn2/child.expl | 49 ++ Stage22/Assgn2/child.xsm | 164 +++++++ Stage22/Assgn2/parent.expl | 21 + Stage22/Assgn2/parent.xsm | 140 ++++++ Stage22/Assgn3/con.expl | 169 +++++++ Stage22/Assgn3/con.xsm | 965 +++++++++++++++++++++++++++++++++++++ Stage22/Assgn3/seq.expl | 121 +++++ Stage22/Assgn3/seq.xsm | 575 ++++++++++++++++++++++ Stage22/fork.spl | 40 +- Stage22/fork.xsm | 64 +-- Stage22/int13.spl | 2 - Stage22/int13.xsm | 6 - expl/assemblycode.xsm | 702 +++++++++++++++------------ xfs-interface/stage22.sh | 11 +- 14 files changed, 2650 insertions(+), 379 deletions(-) create mode 100644 Stage22/Assgn2/child.expl create mode 100644 Stage22/Assgn2/child.xsm create mode 100644 Stage22/Assgn2/parent.expl create mode 100644 Stage22/Assgn2/parent.xsm create mode 100644 Stage22/Assgn3/con.expl create mode 100644 Stage22/Assgn3/con.xsm create mode 100644 Stage22/Assgn3/seq.expl create mode 100644 Stage22/Assgn3/seq.xsm diff --git a/Stage22/Assgn2/child.expl b/Stage22/Assgn2/child.expl new file mode 100644 index 0000000..06aa90f --- /dev/null +++ b/Stage22/Assgn2/child.expl @@ -0,0 +1,49 @@ +type + List + { + int data; + List next; + } +endtype + +decl + List head, p, q; +enddecl + +int main() +{ +decl + int x, temp, pid, counter; +enddecl + +begin + x = initialize(); + pid = exposcall("Getpid"); + + head=null; + counter=0; + while(counter<10) do + p=alloc(); + p.data=pid*100 + counter; + p.next=null; + + if(head==null) then + head=p; + q=p; + else + q.next=p; + q=q.next; + endif; + + counter=counter+1; + endwhile; + + p=head; + while(p!=null) do + write(p.data); + p=p.next; + endwhile; + + return 0; +end +} \ No newline at end of file diff --git a/Stage22/Assgn2/child.xsm b/Stage22/Assgn2/child.xsm new file mode 100644 index 0000000..720f202 --- /dev/null +++ b/Stage22/Assgn2/child.xsm @@ -0,0 +1,164 @@ +0 +2056 +0 +0 +0 +0 +0 +0 +MOV SP,4098 +MOV BP,4099 +PUSH R0 +CALL 2066 +INT 10 +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R0,"Heapset" +PUSH R0 +ADD SP,3 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV [R1],R0 +MOV R0,"Getpid" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R0,-1 +MOV [4096],R0 +MOV R0,0 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +MOV R1,10 +LT R0,R1 +JZ R0,2296 +MOV R0,"Alloc" +PUSH R0 +MOV R0,8 +PUSH R0 +ADD SP,2 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4097],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,100 +MUL R0,R1 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +ADD R0,R1 +MOV R1,[4097] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,-1 +MOV R1,[4097] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,[4096] +MOV R1,-1 +EQ R0,R1 +JZ R0,2250 +MOV R0,[4097] +MOV [4096],R0 +MOV R0,[4097] +MOV [4098],R0 +JMP 2274 +MOV R0,[4097] +MOV R1,[4098] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,[4098] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV [4098],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R0,R1 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +JMP 2144 +MOV R0,[4096] +MOV [4097],R0 +MOV R0,[4097] +MOV R1,-1 +NE R0,R1 +JZ R0,2344 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R0,[4097] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +ADD SP,2 +CALL 0 +SUB SP,5 +MOV R0,[4097] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV [4097],R0 +JMP 2300 +MOV R0,0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET diff --git a/Stage22/Assgn2/parent.expl b/Stage22/Assgn2/parent.expl new file mode 100644 index 0000000..7544a8d --- /dev/null +++ b/Stage22/Assgn2/parent.expl @@ -0,0 +1,21 @@ +int main() +{ + decl + int temp,pid; + enddecl + + begin + pid = exposcall("Fork"); + pid = exposcall("Fork"); + pid = exposcall("Fork"); + + if(pid==-1) then + temp=exposcall("Write", -2, "Fork Error"); + else + temp=exposcall("Write", -2, pid); + endif; + + temp = exposcall("Exec", "child.xsm"); + return 0; + end +} \ No newline at end of file diff --git a/Stage22/Assgn2/parent.xsm b/Stage22/Assgn2/parent.xsm new file mode 100644 index 0000000..fc811ce --- /dev/null +++ b/Stage22/Assgn2/parent.xsm @@ -0,0 +1,140 @@ +0 +2056 +0 +0 +0 +0 +0 +0 +MOV SP,4095 +MOV BP,4096 +PUSH R0 +CALL 2066 +INT 10 +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +MOV R0,"Fork" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Fork" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Fork" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,-1 +EQ R0,R1 +JZ R0,2222 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R0,"Fork Error" +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +JMP 2266 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"Exec" +PUSH R0 +MOV R0,"child.xsm" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET diff --git a/Stage22/Assgn3/con.expl b/Stage22/Assgn3/con.expl new file mode 100644 index 0000000..17ad7c2 --- /dev/null +++ b/Stage22/Assgn3/con.expl @@ -0,0 +1,169 @@ +type + List + { + int data; + List next; + } + Share + { + List link; + } +endtype + +decl + int x, semid; + List head; + List mergeSort(List top); + List merge(List a, List b); +enddecl + +List mergeSort(List top) +{ + decl + int len, pid; + List slow, fast, a, b; + Share s; + enddecl + + begin + len=1; + if((top!=null) AND (top.next!=null)) then + x=exposcall("SemLock", semid); + slow=top; + fast=top.next; + + //Divide the list into two parts + while(fast!=null) do + fast=fast.next; + len=len+1; + if(fast!=null) then + slow=slow.next; + fast=fast.next; + len=len+1; + endif; + endwhile; + + a=top; + b=slow.next; + slow.next=null; + x=exposcall("SemUnLock", semid); + + //If size less than 4, don't Fork + if(len<=4) then + a=mergeSort(a); + b=mergeSort(b); + else + x=exposcall("SemLock", semid); + s=alloc(); + x=exposcall("SemUnLock", semid); + + pid=exposcall("Fork"); + + //If Fork is not possible, do sequential + if(pid==-1) then + a=mergeSort(a); + b=mergeSort(b); + else + s.link=null; + + //Sort from two different process + if(pid!=0) then + a=mergeSort(a); + else + b=mergeSort(b); + s.link=b; //Store head in shared location + x=exposcall("Exit"); + endif; + x=exposcall("Wait", pid); + b=s.link; + endif; + + x=exposcall("SemLock", semid); + free(s); + x=exposcall("SemUnLock", semid); + endif; + + //Merge the two lists + x=exposcall("SemLock", semid); + top=merge(a, b); + x=exposcall("SemUnLock", semid); + endif; + + return top; + end +} + +List merge(List a, List b) +{ + decl + List result; + enddecl + + begin + result=null; + + if(a==null) then + result=b; + endif; + if(b==null) then + result=a; + endif; + + if(a!=null AND b!=null) then + if(a.data<=b.data) then + result=a; + result.next=merge(a.next, b); + else + result=b; + result.next=merge(a, b.next); + endif; + endif; + + return result; + end +} + +int main() +{ + decl + int x, counter; + List p, q; + enddecl + + begin + x = initialize(); + semid = exposcall("Semget"); + + //Storing values in descending order + head=null; + counter=0; + while(counter<64) do + p=alloc(); + p.data=64-counter; + p.next=null; + + if(head==null) then + head=p; + q=p; + else + q.next=p; + q=q.next; + endif; + + counter=counter+1; + endwhile; + + //Calling Merge Sort + head=mergeSort(head); + + //Printing Values + p=head; + while(p!=null) do + write(p.data); + p=p.next; + endwhile; + + x = exposcall("Semrelease"); + return 1; + end +} \ No newline at end of file diff --git a/Stage22/Assgn3/con.xsm b/Stage22/Assgn3/con.xsm new file mode 100644 index 0000000..d4a28b1 --- /dev/null +++ b/Stage22/Assgn3/con.xsm @@ -0,0 +1,965 @@ +0 +2056 +0 +0 +0 +0 +0 +0 +MOV SP,4098 +MOV BP,4099 +PUSH R0 +CALL 3548 +INT 10 +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R0,1 +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +MOV R1,1 +JZ R0,2138 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R3,-1 +NE R2,R3 +MOV R1,R2 +MUL R0,R1 +JZ R0,3132 +PUSH R0 +MOV R0,"SemLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +POP R0 +MOV R1,6 +MOV R2,SP +ADD R2,R1 +MOV R1,[R2] +MOV [4096],R1 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,3 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,4 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +JZ R1,2358 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,4 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R1,R2 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +JZ R1,2356 +MOV R3,BP +MOV R2,3 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R3,3 +ADD R4,R3 +MOV [R4],R2 +MOV R3,BP +MOV R2,4 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R3,4 +ADD R4,R3 +MOV [R4],R2 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV R2,[R3] +MOV R3,1 +ADD R2,R3 +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV [R4],R2 +JMP 2222 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R2,BP +MOV R1,5 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R0,-1 +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,"SemUnLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,4 +LE R0,R1 +JZ R0,2518 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,5 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +JMP 3006 +MOV R0,"SemLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R0,"Alloc" +PUSH R0 +MOV R0,8 +PUSH R0 +ADD SP,2 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"SemUnLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R0,"Fork" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,-1 +EQ R0,R1 +JZ R0,2710 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,5 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +JMP 2908 +MOV R0,-1 +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,0 +NE R0,R1 +JZ R0,2772 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,5 +ADD R2,R1 +MOV [R2],R0 +JMP 2850 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,"Exit" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R0,"Wait" +PUSH R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R1,BP +MOV R0,7 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,6 +ADD R2,R1 +MOV [R2],R0 +MOV R0,"SemLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R2,BP +MOV R1,7 +ADD R2,R1 +MOV R1,[R2] +PUSH R0 +PUSH R1 +MOV R0,"Free" +PUSH R0 +PUSH R1 +ADD SP,2 +PUSH R0 +CALL 0 +SUB SP,5 +POP R1 +POP R0 +PUSH R0 +PUSH R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +POP R1 +POP R0 +MOV R2,7 +MOV R3,SP +ADD R3,R2 +MOV R2,[R3] +MOV [4096],R2 +PUSH R0 +PUSH R1 +MOV R0,"SemLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +POP R1 +POP R0 +MOV R2,7 +MOV R3,SP +ADD R3,R2 +MOV R2,[R3] +MOV [4096],R2 +PUSH R0 +PUSH R1 +MOV R1,BP +MOV R0,6 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R0,5 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 3172 +POP R2 +POP R0 +POP R0 +POP R1 +POP R0 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV [R3],R2 +PUSH R0 +PUSH R1 +MOV R0,"SemUnLock" +PUSH R0 +MOV R0,[4097] +MOV R0,R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +POP R1 +POP R0 +MOV R2,7 +MOV R3,SP +ADD R3,R2 +MOV R2,[R3] +MOV [4096],R2 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV [R2],R1 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET +PUSH BP +MOV BP,SP +PUSH R0 +MOV R1,-1 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,-1 +EQ R1,R2 +JZ R1,3226 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,2 +SUB R3,R4 +MOV R2,[R3] +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV [R4],R2 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,2 +SUB R2,R3 +MOV R1,[R2] +MOV R2,-1 +EQ R1,R2 +JZ R1,3264 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV R2,[R3] +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV [R4],R2 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +MOV R2,1 +JZ R1,3302 +MOV R4,BP +MOV R5,2 +SUB R4,R5 +MOV R5,2 +SUB R4,R5 +MOV R3,[R4] +MOV R4,-1 +NE R3,R4 +MOV R2,R3 +MUL R1,R2 +JZ R1,3524 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV R2,[R3] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R5,2 +SUB R4,R5 +MOV R5,2 +SUB R4,R5 +MOV R3,[R4] +MOV R4,1 +ADD R4,R3 +MOV R3,[R4] +LE R2,R3 +JZ R2,3438 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV R2,[R3] +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV [R4],R2 +PUSH R0 +PUSH R1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 3172 +POP R2 +POP R0 +POP R0 +POP R1 +POP R0 +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV R3,[R4] +MOV R4,2 +ADD R4,R3 +MOV R3,[R4] +MOV R3,R4 +MOV [R3],R2 +JMP 3524 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,2 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 3172 +POP R1 +POP R0 +POP R0 +POP R0 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +MOV BP,[SP] +POP R0 +RET +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R0,"Heapset" +PUSH R0 +ADD SP,3 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV [R1],R0 +MOV R0,"Semget" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV [4097],R0 +MOV R0,-1 +MOV [4098],R0 +MOV R0,0 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,64 +LT R0,R1 +JZ R0,3822 +MOV R0,"Alloc" +PUSH R0 +MOV R0,8 +PUSH R0 +ADD SP,2 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R0,64 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +SUB R0,R1 +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,-1 +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,[4098] +MOV R1,-1 +EQ R0,R1 +JZ R0,3752 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV [4098],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +JMP 3800 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R0,R1 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +JMP 3620 +MOV R0,[4098] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV [4098],R0 +MOV R0,[4098] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +JZ R0,3914 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +ADD SP,2 +CALL 0 +SUB SP,5 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +JMP 3846 +MOV R0,"Semrelease" +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R0,1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET diff --git a/Stage22/Assgn3/seq.expl b/Stage22/Assgn3/seq.expl new file mode 100644 index 0000000..9bcf184 --- /dev/null +++ b/Stage22/Assgn3/seq.expl @@ -0,0 +1,121 @@ +type + List + { + int data; + List next; + } +endtype + +decl + List head; + List mergeSort(List top); + List merge(List a, List b); +enddecl + +List mergeSort(List top) +{ + decl + List slow, fast, a, b; + enddecl + + begin + if((top!=null) AND (top.next!=null)) then + slow=top; + fast=top.next; + + //Divide the list into two parts + while(fast!=null) do + fast=fast.next; + if(fast!=null) then + slow=slow.next; + fast=fast.next; + endif; + endwhile; + + a=top; + b=slow.next; + slow.next=null; + + //Recursively call merge sort + a=mergeSort(a); + b=mergeSort(b); + + //Merge the two lists + top=merge(a, b); + endif; + + return top; + end +} + +List merge(List a, List b) +{ + decl + List result; + enddecl + + begin + result=null; + + if(a==null) then + result=b; + endif; + if(b==null) then + result=a; + endif; + + if(a!=null AND b!=null) then + if(a.data<=b.data) then + result=a; + result.next=merge(a.next, b); + else + result=b; + result.next=merge(a, b.next); + endif; + endif; + + return result; + end +} + +int main() +{ + decl + int x, counter; + List p, q; + enddecl + + begin + x = initialize(); + + //Storing values in descending order + head=null; + counter=0; + while(counter<64) do + p=alloc(); + p.data=64-counter; + p.next=null; + + if(head==null) then + head=p; + q=p; + else + q.next=p; + q=q.next; + endif; + + counter=counter+1; + endwhile; + + //Calling Merge Sort + head=mergeSort(head); + + //Printing Values + p=head; + while(p!=null) do + write(p.data); + p=p.next; + endwhile; + return 1; + end +} \ No newline at end of file diff --git a/Stage22/Assgn3/seq.xsm b/Stage22/Assgn3/seq.xsm new file mode 100644 index 0000000..913e235 --- /dev/null +++ b/Stage22/Assgn3/seq.xsm @@ -0,0 +1,575 @@ +0 +2056 +0 +0 +0 +0 +0 +0 +MOV SP,4096 +MOV BP,4097 +PUSH R0 +CALL 2826 +INT 10 +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +MOV R1,1 +JZ R0,2122 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R3,-1 +NE R2,R3 +MOV R1,R2 +MUL R0,R1 +JZ R0,2424 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +JZ R1,2268 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +JZ R1,2266 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV [R4],R2 +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R3,2 +ADD R4,R3 +MOV [R4],R2 +JMP 2172 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R0,-1 +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2458 +POP R0 +POP R1 +POP R1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET +PUSH BP +MOV BP,SP +PUSH R0 +MOV R0,-1 +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,-1 +EQ R0,R1 +JZ R0,2512 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,2 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +MOV R1,-1 +EQ R0,R1 +JZ R0,2550 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +MOV R1,1 +JZ R0,2588 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,2 +SUB R3,R4 +MOV R2,[R3] +MOV R3,-1 +NE R2,R3 +MOV R1,R2 +MUL R0,R1 +JZ R0,2802 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,2 +SUB R3,R4 +MOV R2,[R3] +MOV R3,1 +ADD R3,R2 +MOV R2,[R3] +LE R1,R2 +JZ R1,2720 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2458 +POP R1 +POP R0 +POP R0 +POP R0 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +JMP 2802 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2458 +POP R0 +POP R1 +POP R1 +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV R0,[R1] +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +MOV BP,[SP] +POP R0 +RET +PUSH BP +MOV BP,SP +PUSH R0 +PUSH R0 +PUSH R0 +PUSH R0 +MOV R0,"Heapset" +PUSH R0 +ADD SP,3 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R1,BP +MOV R0,1 +ADD R1,R0 +MOV [R1],R0 +MOV R0,-1 +MOV [4096],R0 +MOV R0,0 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,64 +LT R0,R1 +JZ R0,3074 +MOV R0,"Alloc" +PUSH R0 +MOV R0,8 +PUSH R0 +ADD SP,2 +PUSH R0 +CALL 0 +SUB SP,5 +MOV R0,5 +MOV R1,SP +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R0,64 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +SUB R0,R1 +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV R1,[R2] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,-1 +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,[4096] +MOV R1,-1 +EQ R0,R1 +JZ R0,3004 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV [4096],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +JMP 3052 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R0,4 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,2 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R0,R1 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV [R2],R0 +JMP 2872 +MOV R0,[4096] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 +MOV [4096],R0 +MOV R0,[4096] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +JZ R0,3166 +MOV R0,"Write" +PUSH R0 +MOV R0,-2 +PUSH R0 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,1 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +ADD SP,2 +CALL 0 +SUB SP,5 +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,3 +ADD R2,R1 +MOV [R2],R0 +JMP 3098 +MOV R0,1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET diff --git a/Stage22/fork.spl b/Stage22/fork.spl index 62962c0..218d19c 100644 --- a/Stage22/fork.spl +++ b/Stage22/fork.spl @@ -40,17 +40,21 @@ else newPTBR = PAGE_TABLE_BASE + 20 * newPID; multipush(R0, R1, R2, R3); - R1 = 1; call MEMORY_MANAGER; - [newPTBR + 16] = R0; + R5 = R0; + multipop(R0, R1, R2, R3); + [newPTBR + 16] = R5; [newPTBR + 17] = "0110"; + + multipush(R0, R1, R2, R3); R1 = 1; call MEMORY_MANAGER; - [newPTBR + 18] = R0; + R5 = R0; + multipop(R0, R1, R2, R3); + [newPTBR + 18] = R5; [newPTBR + 19] = "0110"; - multipop(R0, R1, R2, R3); [PROCESS_TABLE + newPID * 16 + 3] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 3]; [PROCESS_TABLE + newPID * 16 + 6] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 6]; [PROCESS_TABLE + newPID * 16 + 10] = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 10]; @@ -76,7 +80,6 @@ else // initialization per process resourse table child alias i R4; i = RESOURCE_TABLE_OFFSET; - print "start"; while (i < 512) do [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i] = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i]; [[PROCESS_TABLE + newPID * 16 + 11] * 512 + i + 1] = [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + i + 1]; @@ -85,7 +88,6 @@ else endif; i = i + 2; endwhile; - print "end"; // disk map table for child i = 0; @@ -108,21 +110,17 @@ else // copy user stack contents alias oldStack R5; alias newStack R6; - - oldStack = [PTBR + 16]; - newStack = [newPTBR + 16]; - i = 0; - while (i < 512) do - [newStack * 512 + i] = [oldStack * 512 + i]; - i = i + 1; - endwhile; - - oldStack = [PTBR + 18]; - newStack = [newPTBR + 18]; - i = 0; - while (i < 512) do - [newStack * 512 + i] = [oldStack * 512 + i]; - i = i + 1; + alias temp R7; + temp = 16; + while (temp < 20) do + oldStack = [PTBR + temp]; + newStack = [newPTBR + temp]; + i = 0; + while (i < 512) do + [newStack * 512 + i] = [oldStack * 512 + i]; + i = i + 1; + endwhile; + temp = temp + 2; endwhile; [[PROCESS_TABLE + newPID * 16 + 11] * 512] = BP; diff --git a/Stage22/fork.xsm b/Stage22/fork.xsm index 14de336..14c7550 100644 --- a/Stage22/fork.xsm +++ b/Stage22/fork.xsm @@ -108,24 +108,34 @@ PUSH R2 PUSH R3 MOV R1, 1 CALL 22528 +MOV R5, R0 +POP R3 +POP R2 +POP R1 +POP R0 MOV R16, R3 ADD R16, 16 -MOV [R16], R0 +MOV [R16], R5 MOV R16, R3 ADD R16, 17 MOV [R16], "0110" +PUSH R0 +PUSH R1 +PUSH R2 +PUSH R3 MOV R1, 1 CALL 22528 +MOV R5, R0 +POP R3 +POP R2 +POP R1 +POP R0 MOV R16, R3 ADD R16, 18 -MOV [R16], R0 +MOV [R16], R5 MOV R16, R3 ADD R16, 19 MOV [R16], "0110" -POP R3 -POP R2 -POP R1 -POP R0 MOV R16, 28672 MOV R17, R2 MUL R17, 16 @@ -247,9 +257,6 @@ ADD R16, R17 ADD R16, 11 MOV [R16], R5 MOV R4, 496 -MOV R16, "start" -PORT P1, R16 -OUT _L5: MOV R16, 512 GT R16, R4 @@ -347,9 +354,6 @@ ADD R16, 2 MOV R4, R16 JMP _L5 _L6: -MOV R16, "end" -PORT P1, R16 -OUT MOV R4, 0 _L9: MOV R16, 10 @@ -420,38 +424,17 @@ ADD R16, 2 MOV R4, R16 JMP _L11 _L12: -MOV R16, PTBR -ADD R16, 16 -MOV R16, [R16] -MOV R5, R16 -MOV R16, R3 -ADD R16, 16 -MOV R16, [R16] -MOV R6, R16 -MOV R4, 0 +MOV R7, 16 _L15: -MOV R16, 512 -GT R16, R4 +MOV R16, 20 +GT R16, R7 JZ R16, _L16 -MOV R16, R6 -MUL R16, 512 -ADD R16, R4 -MOV R17, R5 -MUL R17, 512 -ADD R17, R4 -MOV R17, [R17] -MOV [R16], R17 -MOV R16, R4 -ADD R16, 1 -MOV R4, R16 -JMP _L15 -_L16: MOV R16, PTBR -ADD R16, 18 +ADD R16, R7 MOV R16, [R16] MOV R5, R16 MOV R16, R3 -ADD R16, 18 +ADD R16, R7 MOV R16, [R16] MOV R6, R16 MOV R4, 0 @@ -472,6 +455,11 @@ ADD R16, 1 MOV R4, R16 JMP _L17 _L18: +MOV R16, R7 +ADD R16, 2 +MOV R7, R16 +JMP _L15 +_L16: MOV R16, 28672 MOV R17, R2 MUL R17, 16 diff --git a/Stage22/int13.spl b/Stage22/int13.spl index cc9f160..1724827 100644 --- a/Stage22/int13.spl +++ b/Stage22/int13.spl @@ -34,7 +34,6 @@ if (sysCallNumber == 17) then // semget [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + i * 2 + 1] = R5; [[PTBR + 2 * ((userSP - 1) / 512)] * 512 + ((userSP - 1) % 512)] = i; endif; - print "semget"; endif; endif; @@ -57,7 +56,6 @@ if (sysCallNumber == 18) then // semrelease [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId] = -1; [[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 + RESOURCE_TABLE_OFFSET + 2 * semId + 1] = -1; endif; - print "semrelease"; endif; [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 9] = 0; diff --git a/Stage22/int13.xsm b/Stage22/int13.xsm index 9e84659..85a4da2 100644 --- a/Stage22/int13.xsm +++ b/Stage22/int13.xsm @@ -162,9 +162,6 @@ MOD R17, 512 ADD R16, R17 MOV [R16], R2 _L8: -MOV R16, "semget" -PORT P1, R16 -OUT _L6: JMP _L2 _L1: @@ -282,9 +279,6 @@ ADD R16, R17 ADD R16, 1 MOV [R16], -1 _L12: -MOV R16, "semrelease" -PORT P1, R16 -OUT JMP _L10 _L9: _L10: diff --git a/expl/assemblycode.xsm b/expl/assemblycode.xsm index 31a6b22..913e235 100644 --- a/expl/assemblycode.xsm +++ b/expl/assemblycode.xsm @@ -9,7 +9,7 @@ MOV SP,4096 MOV BP,4097 PUSH R0 -CALL 2066 +CALL 2826 INT 10 PUSH BP MOV BP,SP @@ -17,251 +17,415 @@ PUSH R0 PUSH R0 PUSH R0 PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -MOV R0,"Heapset" -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP -ADD R1,R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +MOV R1,1 +JZ R0,2122 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,1 +SUB R3,R4 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R3,-1 +NE R2,R3 +MOV R1,R2 +MUL R0,R1 +JZ R0,2424 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV [R3],R1 MOV R2,BP MOV R1,2 ADD R2,R1 -MOV [R2],R0 -MOV R0,"Semget" -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP -ADD R1,R0 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +JZ R1,2268 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV [R3],R1 +MOV R2,BP +MOV R1,2 +ADD R2,R1 +MOV R1,[R2] +MOV R2,-1 +NE R1,R2 +JZ R1,2266 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R3,1 +ADD R4,R3 +MOV [R4],R2 +MOV R3,BP +MOV R2,2 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R4,BP +MOV R3,2 +ADD R4,R3 +MOV [R4],R2 +JMP 2172 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 MOV R0,[R1] MOV R2,BP -MOV R1,5 +MOV R1,3 ADD R2,R1 MOV [R2],R0 -MOV R0,"Alloc" -PUSH R0 -MOV R0,2 -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP +MOV R1,BP +MOV R0,1 ADD R1,R0 MOV R0,[R1] -MOV [4096],R0 -MOV R0,1 -MOV R1,[4096] -MOV R2,1 +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV [R2],R0 +MOV R0,-1 +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 ADD R2,R1 MOV R1,[R2] MOV R1,R2 MOV [R1],R0 -MOV R0,"Fork" -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP +MOV R1,BP +MOV R0,3 ADD R1,R0 MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 MOV R2,BP MOV R1,3 ADD R2,R1 MOV [R2],R0 MOV R1,BP -MOV R0,3 +MOV R0,4 ADD R1,R0 MOV R0,[R1] -MOV R1,0 -EQ R0,R1 -JZ R0,2478 -MOV R0,1 +PUSH R0 +PUSH R0 +CALL 2066 +POP R0 +POP R1 MOV R2,BP -MOV R1,6 +MOV R1,4 ADD R2,R1 MOV [R2],R0 MOV R1,BP -MOV R0,6 +MOV R0,4 ADD R1,R0 MOV R0,[R1] -MOV R1,100 -LE R0,R1 -JZ R0,2476 -MOV R0,"SemLock" PUSH R0 MOV R1,BP -MOV R0,5 +MOV R0,3 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 -PUSH R0 PUSH R0 PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP -ADD R1,R0 +CALL 2458 +POP R0 +POP R1 +POP R1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV [R1],R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 MOV R0,[R1] +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +POP R0 +POP R0 +POP R0 +MOV BP,[SP] +POP R0 +RET +PUSH BP +MOV BP,SP +PUSH R0 +MOV R0,-1 MOV R2,BP MOV R1,1 ADD R2,R1 MOV [R2],R0 -MOV R0,[4096] -MOV R1,1 -ADD R1,R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 MOV R0,[R1] +MOV R1,-1 +EQ R0,R1 +JZ R0,2512 MOV R2,BP -MOV R1,1 -ADD R2,R1 -MOV [R2],R0 +MOV R3,2 +SUB R2,R3 +MOV R3,2 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV [R3],R1 MOV R1,BP -MOV R0,1 -ADD R1,R0 +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 MOV R0,[R1] -MOV R1,1 +MOV R1,-1 EQ R0,R1 -JZ R0,2386 +JZ R0,2550 MOV R2,BP -MOV R1,6 -ADD R2,R1 -MOV R1,[R2] -MOV R2,[4096] MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R3,BP +MOV R2,1 ADD R3,R2 +MOV [R3],R1 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,-1 +NE R0,R1 +MOV R1,1 +JZ R0,2588 +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,2 +SUB R3,R4 +MOV R2,[R3] +MOV R3,-1 +NE R2,R3 +MOV R1,R2 +MUL R0,R1 +JZ R0,2802 +MOV R2,BP +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 +MOV R1,[R2] +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R3,BP +MOV R4,2 +SUB R3,R4 +MOV R4,2 +SUB R3,R4 MOV R2,[R3] -MOV R2,R3 -MOV [R2],R1 -MOV R1,0 -MOV R2,[4096] MOV R3,1 ADD R3,R2 MOV R2,[R3] -MOV R2,R3 -MOV [R2],R1 +LE R1,R2 +JZ R1,2720 MOV R2,BP -MOV R1,6 -ADD R2,R1 +MOV R3,2 +SUB R2,R3 +MOV R3,1 +SUB R2,R3 MOV R1,[R2] -MOV R2,2 -ADD R1,R2 MOV R3,BP -MOV R2,6 +MOV R2,1 ADD R3,R2 MOV [R3],R1 -MOV R0,"SemUnLock" PUSH R0 MOV R1,BP -MOV R0,5 +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] +MOV R1,2 +ADD R1,R0 +MOV R0,[R1] +PUSH R0 +PUSH R0 +CALL 2458 +POP R1 +POP R0 +POP R0 +POP R0 +MOV R3,BP +MOV R2,1 +ADD R3,R2 +MOV R2,[R3] +MOV R3,2 +ADD R3,R2 +MOV R2,[R3] +MOV R2,R3 +MOV [R2],R1 +JMP 2802 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +MOV R2,BP +MOV R1,1 +ADD R2,R1 +MOV [R2],R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,2 +SUB R1,R2 +MOV R0,[R1] +MOV R1,2 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 PUSH R0 +MOV R1,BP +MOV R2,2 +SUB R1,R2 +MOV R2,1 +SUB R1,R2 +MOV R0,[R1] PUSH R0 PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP -ADD R1,R0 -MOV R0,[R1] +CALL 2458 +POP R0 +POP R1 +POP R1 MOV R2,BP MOV R1,1 ADD R2,R1 -MOV [R2],R0 -MOV R0,0 -MOV R2,BP -MOV R1,7 +MOV R1,[R2] +MOV R2,2 ADD R2,R1 -MOV [R2],R0 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 MOV R1,BP -MOV R0,7 +MOV R0,1 ADD R1,R0 MOV R0,[R1] -MOV R1,50 -LT R0,R1 -JZ R0,2474 MOV R1,BP -MOV R0,7 -ADD R1,R0 -MOV R0,[R1] -MOV R1,1 -ADD R0,R1 -MOV R2,BP -MOV R1,7 -ADD R2,R1 -MOV [R2],R0 -JMP 2438 -JMP 2246 -JMP 2958 -MOV R0,"Fork" +MOV R2,2 +SUB R1,R2 +MOV [R1],R0 +POP R0 +MOV BP,[SP] +POP R0 +RET +PUSH BP +MOV BP,SP +PUSH R0 PUSH R0 PUSH R0 PUSH R0 +MOV R0,"Heapset" PUSH R0 +ADD SP,3 PUSH R0 CALL 0 SUB SP,5 -MOV R0,5 -MOV R1,SP -ADD R1,R0 -MOV R0,[R1] -MOV R2,BP -MOV R1,4 -ADD R2,R1 -MOV [R2],R0 MOV R1,BP -MOV R0,4 +MOV R0,1 ADD R1,R0 -MOV R0,[R1] -MOV R1,0 -EQ R0,R1 -JZ R0,2720 -MOV R0,2 +MOV [R1],R0 +MOV R0,-1 +MOV [4096],R0 +MOV R0,0 MOV R2,BP -MOV R1,6 +MOV R1,2 ADD R2,R1 MOV [R2],R0 MOV R1,BP -MOV R0,6 -ADD R1,R0 -MOV R0,[R1] -MOV R1,100 -LE R0,R1 -JZ R0,2718 -MOV R0,"SemLock" -PUSH R0 -MOV R1,BP -MOV R0,5 +MOV R0,2 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 +MOV R1,64 +LT R0,R1 +JZ R0,3074 +MOV R0,"Alloc" PUSH R0 +MOV R0,8 PUSH R0 +ADD SP,2 PUSH R0 CALL 0 SUB SP,5 @@ -270,215 +434,134 @@ MOV R1,SP ADD R1,R0 MOV R0,[R1] MOV R2,BP -MOV R1,1 +MOV R1,3 ADD R2,R1 MOV [R2],R0 -MOV R0,[4096] -MOV R1,1 -ADD R1,R0 -MOV R0,[R1] +MOV R0,64 MOV R2,BP -MOV R1,1 +MOV R1,2 ADD R2,R1 -MOV [R2],R0 -MOV R1,BP -MOV R0,1 -ADD R1,R0 -MOV R0,[R1] -MOV R1,1 -EQ R0,R1 -JZ R0,2674 +MOV R1,[R2] +SUB R0,R1 MOV R2,BP -MOV R1,6 +MOV R1,3 ADD R2,R1 MOV R1,[R2] -MOV R2,[4096] -MOV R3,2 -ADD R3,R2 -MOV R2,[R3] -MOV R2,R3 -MOV [R2],R1 -MOV R1,0 -MOV R2,[4096] -MOV R3,1 -ADD R3,R2 -MOV R2,[R3] -MOV R2,R3 -MOV [R2],R1 +MOV R2,1 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,-1 MOV R2,BP -MOV R1,6 +MOV R1,3 ADD R2,R1 MOV R1,[R2] MOV R2,2 -ADD R1,R2 -MOV R3,BP -MOV R2,6 -ADD R3,R2 -MOV [R3],R1 -MOV R0,"SemUnLock" -PUSH R0 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 +MOV R0,[4096] +MOV R1,-1 +EQ R0,R1 +JZ R0,3004 MOV R1,BP -MOV R0,5 +MOV R0,3 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP +MOV [4096],R0 +MOV R1,BP +MOV R0,3 ADD R1,R0 MOV R0,[R1] MOV R2,BP -MOV R1,1 -ADD R2,R1 -MOV [R2],R0 -JMP 2534 -JMP 2958 -MOV R0,1 -MOV R2,BP -MOV R1,6 +MOV R1,4 ADD R2,R1 MOV [R2],R0 +JMP 3052 MOV R1,BP -MOV R0,6 +MOV R0,3 ADD R1,R0 MOV R0,[R1] -MOV R1,100 -LE R0,R1 -JZ R0,2958 -MOV R0,"SemLock" -PUSH R0 +MOV R2,BP +MOV R1,4 +ADD R2,R1 +MOV R1,[R2] +MOV R2,2 +ADD R2,R1 +MOV R1,[R2] +MOV R1,R2 +MOV [R1],R0 MOV R1,BP -MOV R0,5 +MOV R0,4 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 -PUSH R0 -PUSH R0 -PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP +MOV R1,2 ADD R1,R0 MOV R0,[R1] MOV R2,BP -MOV R1,1 +MOV R1,4 ADD R2,R1 MOV [R2],R0 -MOV R0,[4096] -MOV R1,1 +MOV R1,BP +MOV R0,2 ADD R1,R0 MOV R0,[R1] -MOV R2,BP MOV R1,1 +ADD R0,R1 +MOV R2,BP +MOV R1,2 ADD R2,R1 MOV [R2],R0 -MOV R1,BP -MOV R0,1 -ADD R1,R0 -MOV R0,[R1] -MOV R1,0 -EQ R0,R1 -JZ R0,2914 -MOV R1,[4096] -MOV R2,2 -ADD R2,R1 -MOV R1,[R2] -MOV R3,BP -MOV R2,2 -ADD R3,R2 -MOV [R3],R1 -MOV R1,1 -MOV R2,[4096] -MOV R3,1 -ADD R3,R2 -MOV R2,[R3] -MOV R2,R3 -MOV [R2],R1 -PUSH R0 -MOV R0,"Write" -PUSH R0 -MOV R0,-2 -PUSH R0 -MOV R1,BP -MOV R0,2 -ADD R1,R0 -MOV R0,[R1] -MOV R0,R0 -PUSH R0 +JMP 2872 +MOV R0,[4096] PUSH R0 PUSH R0 -CALL 0 -SUB SP,5 +CALL 2066 POP R0 -MOV R1,6 -MOV R2,SP -ADD R2,R1 -MOV R1,[R2] -MOV R3,BP -MOV R2,1 -ADD R3,R2 -MOV [R3],R1 +POP R1 +MOV [4096],R0 +MOV R0,[4096] MOV R2,BP -MOV R1,6 +MOV R1,3 ADD R2,R1 -MOV R1,[R2] -MOV R2,1 -ADD R1,R2 -MOV R3,BP -MOV R2,6 -ADD R3,R2 -MOV [R3],R1 -MOV R0,"SemUnLock" -PUSH R0 +MOV [R2],R0 MOV R1,BP -MOV R0,5 +MOV R0,3 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 -PUSH R0 +MOV R1,-1 +NE R0,R1 +JZ R0,3166 +MOV R0,"Write" PUSH R0 +MOV R0,-2 PUSH R0 -CALL 0 -SUB SP,5 -MOV R0,5 -MOV R1,SP +MOV R1,BP +MOV R0,3 ADD R1,R0 MOV R0,[R1] -MOV R2,BP MOV R1,1 -ADD R2,R1 -MOV [R2],R0 -JMP 2730 -MOV R0,"Semrelease" -PUSH R0 -MOV R1,BP -MOV R0,5 ADD R1,R0 MOV R0,[R1] -MOV R0,R0 -PUSH R0 -PUSH R0 -PUSH R0 PUSH R0 +ADD SP,2 CALL 0 SUB SP,5 -MOV R0,5 -MOV R1,SP +MOV R1,BP +MOV R0,3 +ADD R1,R0 +MOV R0,[R1] +MOV R1,2 ADD R1,R0 MOV R0,[R1] MOV R2,BP -MOV R1,1 +MOV R1,3 ADD R2,R1 MOV [R2],R0 -MOV R0,0 +JMP 3098 +MOV R0,1 MOV R1,BP MOV R2,2 SUB R1,R2 @@ -487,9 +570,6 @@ POP R0 POP R0 POP R0 POP R0 -POP R0 -POP R0 -POP R0 MOV BP,[SP] POP R0 RET diff --git a/xfs-interface/stage22.sh b/xfs-interface/stage22.sh index ab726f9..3106a8b 100644 --- a/xfs-interface/stage22.sh +++ b/xfs-interface/stage22.sh @@ -20,4 +20,13 @@ load --module 1 $HOME/myexpos/Stage22/mod1.xsm load --module 2 $HOME/myexpos/Stage19/module_2.xsm load --module 4 $HOME/myexpos/Stage18/module_4.xsm load --int=timer $HOME/myexpos/Stage14/timer.xsm -load --exec $HOME/myexpos/Stage22/Assgn1/test4.xsm \ No newline at end of file +rm test4.xsm +load --exec $HOME/myexpos/Stage22/Assgn1/test4.xsm +rm parent.xsm +load --exec $HOME/myexpos/Stage22/Assgn2/parent.xsm +rm child.xsm +load --exec $HOME/myexpos/Stage22/Assgn2/child.xsm +rm con.xsm +load --exec $HOME/myexpos/Stage22/Assgn3/con.xsm +rm seq.xsm +load --exec $HOME/myexpos/Stage22/Assgn3/seq.xsm \ No newline at end of file