-
Notifications
You must be signed in to change notification settings - Fork 0
/
op0arg.py
48 lines (40 loc) · 1.41 KB
/
op0arg.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#from op1arg import PUSH, POP
from stack import saveValueToStack, readFromStack
from multipurpose_registers import writeIntoRegister, readFromRegister
from extration_of_data import stringToInt, bitsToInt
from flag_register import readFlags, setFlagRaw
def EXENOARG(function): pass
# Multipurpose registers
def PUSHA() -> None:
order = ["SP","AX","CX","DX","BX","SP","BP","SI","DI"]
#order = ["AX","BX","CX","DX"]
for i in range(len(order)):
register = order[i]
value = (bitsToInt(readFromRegister(register)))
if i < len(order) - 1:
saveValueToStack(value, 16, updateSP=True)
else:
saveValueToStack(value, 16)
def POPA() -> None:
order = ["DI","SI","BP","SP","BX","DX","CX","AX","SP"]
for i in range(len(order)):
register = order[i]
point = bitsToInt(readFromRegister("SP"))
value = bitsToInt(readFromStack(point, 16))
writeIntoRegister(register, value)
if i < len(order) - 1:
point -= 16
writeIntoRegister("SP",point)
# Flags
def PUSHF() -> None:
value = bitsToInt(readFlags())
point = bitsToInt(readFromRegister("SP"))
point += 16
writeIntoRegister("SP",point)
saveValueToStack(value, 16)
def POPF() -> None:
point = bitsToInt(readFromRegister("SP"))
value = str(readFromStack(point, 16))
setFlagRaw(value)
point -= 16
writeIntoRegister("SP",point)