Skip to content

Commit 9cb082a

Browse files
committed
optimization test added
1 parent 15d9a7a commit 9cb082a

File tree

2 files changed

+18
-255
lines changed

2 files changed

+18
-255
lines changed

opt_new.asm

Lines changed: 0 additions & 255 deletions
Original file line numberDiff line numberDiff line change
@@ -1,256 +1 @@
1-
.MODEL SMALL
2-
.STACK 100H
3-
.DATA
4-
IS_NEG DB ?
5-
FOR_PRINT DW ?
6-
CR EQU 0DH
7-
LF EQU 0AH
8-
NEWLINE DB CR, LF , '$'
9-
i dw ?
10-
j dw ?
11-
k dw ?
12-
l dw ?
13-
m dw ?
14-
n dw ?
15-
o dw ?
16-
p dw ?
17-
.CODE
18-
19-
OUTPUT PROC
20-
21-
MOV CX , 0FH
22-
PUSH CX ; marker
23-
24-
MOV IS_NEG, 0H
25-
MOV AX , FOR_PRINT
26-
TEST AX , 8000H
27-
JE OUTPUT_LOOP
28-
29-
MOV IS_NEG, 1H
30-
MOV AX , 0FFFFH
31-
SUB AX , FOR_PRINT
32-
ADD AX , 1H
33-
MOV FOR_PRINT , AX
34-
OUTPUT_LOOP:
35-
36-
;MOV AH, 1
37-
;INT 21H
38-
39-
MOV AX , FOR_PRINT
40-
XOR DX,DX
41-
MOV BX , 10D
42-
DIV BX ; QUOTIENT : AX , REMAINDER : DX
43-
44-
MOV FOR_PRINT , AX
45-
46-
PUSH DX
47-
48-
CMP AX , 0H
49-
JNE OUTPUT_LOOP
50-
51-
;LEA DX, NEWLINE ; DX : USED IN IO and MUL,DIV
52-
;MOV AH, 9 ; AH,9 used for character string output
53-
;INT 21H;
54-
MOV AL , IS_NEG
55-
CMP AL , 1H
56-
JNE OP_STACK_PRINT
57-
58-
MOV AH, 2
59-
MOV DX, '-' ; stored in DL for display
60-
INT 21H
61-
62-
63-
OP_STACK_PRINT:
64-
65-
;MOV AH, 1
66-
;INT 21H
67-
68-
POP BX
69-
70-
CMP BX , 0FH
71-
JE EXIT_OUTPUT
72-
73-
74-
MOV AH, 2
75-
MOV DX, BX ; stored in DL for display
76-
ADD DX , 30H
77-
INT 21H
78-
79-
JMP OP_STACK_PRINT
80-
EXIT_OUTPUT:
81-
82-
;POP CX
83-
LEA DX, NEWLINE
84-
MOV AH, 9
85-
INT 21H
86-
87-
RET
88-
89-
OUTPUT ENDP
90-
91-
main PROC
92-
MOV AX, @DATA
93-
MOV DS, AX
94-
PUSH BP
95-
MOV BP,SP
96-
SUB SP,44
97-
; i=1;
98-
MOV WORD PTR [bp-2],1
99-
MOV CX,[bp-2]
100-
MOV i,CX
101-
; printf(i);
102-
MOV AX,i
103-
MOV FOR_PRINT,AX
104-
CALL OUTPUT
105-
; j=5+8;
106-
MOV WORD PTR [bp-4],5
107-
MOV AX,[bp-4]
108-
MOV WORD PTR [bp-8],AX
109-
MOV WORD PTR [bp-6],8
110-
MOV AX,[bp-8]
111-
ADD AX,[bp-6]
112-
MOV WORD PTR [bp-10],AX
113-
MOV CX,[bp-10]
114-
MOV j,CX
115-
; printf(j);
116-
MOV AX,j
117-
MOV FOR_PRINT,AX
118-
CALL OUTPUT
119-
; k=i+2*j;
120-
MOV AX,i
121-
MOV WORD PTR [bp-18],AX
122-
MOV WORD PTR [bp-12],2
123-
MOV CX,[bp-12]
124-
MOV WORD PTR [bp-14],CX
125-
MOV AX,CX
126-
IMUL j
127-
MOV WORD PTR [bp-16],AX
128-
MOV AX,[bp-18]
129-
ADD AX,[bp-16]
1301
MOV WORD PTR [bp-20],AX
131-
MOV CX,[bp-20]
132-
MOV k,CX
133-
; printf(k);
134-
MOV AX,k
135-
MOV FOR_PRINT,AX
136-
CALL OUTPUT
137-
; l=k/3;
138-
MOV CX,k
139-
CWD
140-
MOV WORD PTR [bp-24],CX
141-
MOV WORD PTR [bp-22],3
142-
MOV CX,[bp-24]
143-
MOV AX,CX
144-
IDIV WORD PTR [bp-22]
145-
MOV WORD PTR [bp-26],AX
146-
MOV CX,[bp-26]
147-
MOV l,CX
148-
; printf(l);
149-
MOV AX,l
150-
MOV FOR_PRINT,AX
151-
CALL OUTPUT
152-
; m=k%9;
153-
MOV CX,k
154-
CWD
155-
MOV WORD PTR [bp-30],CX
156-
MOV WORD PTR [bp-28],9
157-
MOV CX,[bp-30]
158-
MOV AX,CX
159-
IDIV WORD PTR [bp-28]
160-
MOV WORD PTR [bp-32],DX
161-
MOV CX,[bp-32]
162-
MOV m,CX
163-
; printf(m);
164-
MOV AX,m
165-
MOV FOR_PRINT,AX
166-
CALL OUTPUT
167-
; n=m<=l;
168-
MOV AX,m
169-
CMP AX,l
170-
jle L0
171-
MOV WORD PTR [bp-34],0
172-
JMP L1
173-
L0:
174-
MOV WORD PTR [bp-34],1
175-
L1:
176-
MOV CX,[bp-34]
177-
MOV n,CX
178-
; printf(n);
179-
MOV AX,n
180-
MOV FOR_PRINT,AX
181-
CALL OUTPUT
182-
; o=i!=j;
183-
MOV AX,i
184-
CMP AX,j
185-
jne L2
186-
MOV WORD PTR [bp-36],0
187-
JMP L3
188-
L2:
189-
MOV WORD PTR [bp-36],1
190-
L3:
191-
MOV CX,[bp-36]
192-
MOV o,CX
193-
; printf(o);
194-
MOV AX,o
195-
MOV FOR_PRINT,AX
196-
CALL OUTPUT
197-
; p=n||o;
198-
CMP n,0
199-
JNE L4
200-
CMP o,0
201-
JNE L4
202-
MOV WORD PTR [bp-38],0
203-
JMP L5
204-
L4:
205-
MOV WORD PTR [bp-38],1
206-
L5:
207-
MOV CX,[bp-38]
208-
MOV p,CX
209-
; printf(p);
210-
MOV AX,p
211-
MOV FOR_PRINT,AX
212-
CALL OUTPUT
213-
; p=n&&o;
214-
CMP n,0
215-
JE L6
216-
CMP o,0
217-
JE L6
218-
MOV WORD PTR [bp-40],1
219-
JMP L7
220-
L6:
221-
MOV WORD PTR [bp-40],0
222-
L7:
223-
MOV CX,[bp-40]
224-
MOV p,CX
225-
; printf(p);
226-
MOV AX,p
227-
MOV FOR_PRINT,AX
228-
CALL OUTPUT
229-
; p++;
230-
MOV AX,p
231-
MOV WORD PTR [bp-42],AX
232-
INC p
233-
; printf(p);
234-
MOV AX,p
235-
MOV FOR_PRINT,AX
236-
CALL OUTPUT
237-
; k=-p;
238-
NEG WORD PTR [bp-]
239-
MOV CX,-p
240-
MOV k,CX
241-
; printf(k);
242-
MOV AX,k
243-
MOV FOR_PRINT,AX
244-
CALL OUTPUT
245-
; return 0;
246-
MOV WORD PTR [bp-44],0
247-
MOV AX,[bp-44]
248-
JMP L_main
249-
L_main:
250-
ADD SP,44
251-
POP BP
252-
;DOS EXIT
253-
MOV AH,4ch
254-
INT 21h
255-
main ENDP
256-
END MAIN

optimizer/tests.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from django.test import TestCase
2+
from . models import Code
3+
4+
5+
class ModelTesting(TestCase):
6+
7+
def setUp(self):
8+
self.code = Code("","")
9+
line_v = ["MOV WORD PTR [bp-20],AX","MOV AX,[bp-20]"]
10+
self.code.optimizeCode(line_v)
11+
12+
with open('opt_new.asm', 'r') as file:
13+
data = file.read().replace('\n', '\n')
14+
self.code.opt_code = data
15+
16+
def test_post_model(self):
17+
d = self.code
18+
self.assertEqual(self.code.opt_code, "MOV WORD PTR [bp-20],AX\n")

0 commit comments

Comments
 (0)