generation

This commit is contained in:
aljazbrodar. 2026-01-17 15:00:01 +01:00
parent dc71999c7d
commit d30c4a2e24
5 changed files with 63 additions and 56 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,5 +1,6 @@
Harith 00000000004E Harith 00000000004F
T0000001E0320361B20360F203603202D1F202D0F20300320242320240F202A03201B T0000001E0310003A1B20360F203603202D1F202D0F20300320242320240F202A0320
T00001E1E27201B0F202403201523201E0F201E0320091F20180F20153F2FFD00000B T00001E1E1B27201B0F202403201523201E0F201E0320091F20180F20153F2FFD0000
T00003C03000005 T00003C040B000005
M00000105
E000000 E000000

View file

@ -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)
} }