generation
This commit is contained in:
parent
dc71999c7d
commit
d30c4a2e24
5 changed files with 63 additions and 56 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
arith START 0
|
arith START 0
|
||||||
LDA x
|
+LDA x
|
||||||
ADD y
|
ADD y
|
||||||
STA sum
|
STA sum
|
||||||
LDA x
|
LDA x
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,21 @@
|
||||||
***** Section <default> *****
|
***** Section <default> *****
|
||||||
Stats: size=78 blocks=78 symbols=9 literals=0 relocations=0
|
Stats: size=79 blocks=79 symbols=9 literals=0 relocations=1
|
||||||
Blocks
|
Blocks
|
||||||
name start size #ins #dir #sto
|
name start size #ins #dir #sto
|
||||||
<default> 00000 0004E 19 4 5
|
<default> 00000 0004F 19 4 5
|
||||||
Symbols
|
Symbols
|
||||||
name hex dec scope kind type description
|
name hex dec scope kind type description
|
||||||
HALT 000036 54 local relative code label
|
HALT 000037 55 local relative code label
|
||||||
arith 000000 0 exported relative code label
|
arith 000000 0 exported relative code label
|
||||||
diff 000042 66 local relative data label
|
diff 000043 67 local relative data label
|
||||||
mod 00004B 75 local relative data label
|
mod 00004C 76 local relative data label
|
||||||
prod 000045 69 local relative data label
|
prod 000046 70 local relative data label
|
||||||
quot 000048 72 local relative data label
|
quot 000049 73 local relative data label
|
||||||
sum 00003F 63 local relative data label
|
sum 000040 64 local relative data label
|
||||||
x 000039 57 local relative data label
|
x 00003A 58 local relative data label
|
||||||
y 00003C 60 local relative data label
|
y 00003D 61 local relative data label
|
||||||
Literals
|
Literals
|
||||||
label definition
|
label definition
|
||||||
Relocations
|
Relocations
|
||||||
address length flag symbol
|
address length flag symbol
|
||||||
|
00001 5
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,32 @@
|
||||||
00000 arith START 0
|
00000 arith START 0
|
||||||
00000 032036 LDA x
|
00000 0310003A +LDA x
|
||||||
00003 1B2036 ADD y
|
00004 1B2036 ADD y
|
||||||
00006 0F2036 STA sum
|
00007 0F2036 STA sum
|
||||||
00009 03202D LDA x
|
0000A 03202D LDA x
|
||||||
0000C 1F202D SUB y
|
0000D 1F202D SUB y
|
||||||
0000F 0F2030 STA diff
|
00010 0F2030 STA diff
|
||||||
|
|
||||||
00012 032024 LDA x
|
00013 032024 LDA x
|
||||||
00015 232024 MUL y
|
00016 232024 MUL y
|
||||||
00018 0F202A STA prod
|
00019 0F202A STA prod
|
||||||
|
|
||||||
0001B 03201B LDA x
|
0001C 03201B LDA x
|
||||||
0001E 27201B DIV y
|
0001F 27201B DIV y
|
||||||
00021 0F2024 STA quot
|
00022 0F2024 STA quot
|
||||||
|
|
||||||
00024 032015 LDA y
|
00025 032015 LDA y
|
||||||
00027 23201E MUL quot
|
00028 23201E MUL quot
|
||||||
0002A 0F201E STA mod
|
0002B 0F201E STA mod
|
||||||
0002D 032009 LDA x
|
0002E 032009 LDA x
|
||||||
00030 1F2018 SUB mod
|
00031 1F2018 SUB mod
|
||||||
00033 0F2015 STA mod
|
00034 0F2015 STA mod
|
||||||
00036 3F2FFD HALT J HALT
|
00037 3F2FFD HALT J HALT
|
||||||
00039 END arith
|
0003A END arith
|
||||||
|
|
||||||
00039 00000B x WORD 11
|
0003A 00000B x WORD 11
|
||||||
0003C 000005 y WORD 5
|
0003D 000005 y WORD 5
|
||||||
0003F 000000 sum RESW 1
|
00040 000000 sum RESW 1
|
||||||
00042 000000 diff RESW 1
|
00043 000000 diff RESW 1
|
||||||
00045 000000 prod RESW 1
|
00046 000000 prod RESW 1
|
||||||
00048 000000 quot RESW 1
|
00049 000000 quot RESW 1
|
||||||
0004B 000000 mod RESW 1
|
0004C 000000 mod RESW 1
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
Harith 00000000004E
|
Harith 00000000004F
|
||||||
T0000001E0320361B20360F203603202D1F202D0F20300320242320240F202A03201B
|
T0000001E0310003A1B20360F203603202D1F202D0F20300320242320240F202A0320
|
||||||
T00001E1E27201B0F202403201523201E0F201E0320091F20180F20153F2FFD00000B
|
T00001E1E1B27201B0F202403201523201E0F201E0320091F20180F20153F2FFD0000
|
||||||
T00003C03000005
|
T00003C040B000005
|
||||||
|
M00000105
|
||||||
E000000
|
E000000
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,8 @@ var bazno_dovoljeno bool
|
||||||
|
|
||||||
var bazno_naslov int
|
var bazno_naslov int
|
||||||
|
|
||||||
|
var naslov_programa int
|
||||||
|
|
||||||
var zacetni_naslov int
|
var zacetni_naslov int
|
||||||
|
|
||||||
type ukaz interface {
|
type ukaz interface {
|
||||||
|
|
@ -607,6 +609,7 @@ func check_M_i(el string, AST *[]ukaz) bool {
|
||||||
|
|
||||||
func prvi_prehod(AST *[]ukaz) {
|
func prvi_prehod(AST *[]ukaz) {
|
||||||
lc_global, _ = strconv.Atoi((*AST)[0].(*format_D_n).operand)
|
lc_global, _ = strconv.Atoi((*AST)[0].(*format_D_n).operand)
|
||||||
|
naslov_programa = lc_global
|
||||||
ime_programa = (*AST)[0].(*format_D_n).oznaka
|
ime_programa = (*AST)[0].(*format_D_n).oznaka
|
||||||
for _, el := range *AST {
|
for _, el := range *AST {
|
||||||
//fmt.Printf("lc_global '%x'\n", lc_global)
|
//fmt.Printf("lc_global '%x'\n", lc_global)
|
||||||
|
|
@ -730,21 +733,9 @@ func drugi_prehod(AST *[]ukaz) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case *format_F4_m: if st, err := strconv.Atoi(val.naslov); err == nil {
|
case *format_F4_m: if st, err := strconv.Atoi(val.naslov); err == nil {
|
||||||
if val.n && !val.i {
|
val.odmik = st
|
||||||
|
|
||||||
} else if !val.n && val.i {
|
|
||||||
|
|
||||||
} else if val.n && val.i {
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if val.n && !val.i {
|
val.odmik = simbolna_tabela[val.naslov]
|
||||||
|
|
||||||
} else if !val.n && val.i {
|
|
||||||
|
|
||||||
} else if val.n && val.i {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case *format_D: bazno_dovoljeno = false
|
case *format_D: bazno_dovoljeno = false
|
||||||
case *format_D_n: switch val.ime {
|
case *format_D_n: switch val.ime {
|
||||||
|
|
@ -769,6 +760,19 @@ func drugi_prehod(AST *[]ukaz) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generacija(AST *[]ukaz) {
|
||||||
|
_, err := os.Create("out.obj")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error creating a file: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
switch
|
||||||
|
fmt.Println("H", ime_programa, naslov_programa, naslov_programa - lc_global + (*AST)[len(*AST) - 1].velikost)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func izpis(AST *[]ukaz) {
|
func izpis(AST *[]ukaz) {
|
||||||
for _, el := range *AST {
|
for _, el := range *AST {
|
||||||
switch val := el.(type) {
|
switch val := el.(type) {
|
||||||
|
|
@ -847,4 +851,5 @@ func main() {
|
||||||
}*/
|
}*/
|
||||||
drugi_prehod(&AST)
|
drugi_prehod(&AST)
|
||||||
//izpis(&AST)
|
//izpis(&AST)
|
||||||
|
generacija(&AST)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue