diff --git a/ass3/zbirnik/parsing/input.asm b/ass3/zbirnik/parsing/input.asm index 8e16cae..19a8909 100644 --- a/ass3/zbirnik/parsing/input.asm +++ b/ass3/zbirnik/parsing/input.asm @@ -1,5 +1,5 @@ arith START 0 - LDA x + +LDA x ADD y STA sum LDA x diff --git a/ass3/zbirnik/parsing/input.log b/ass3/zbirnik/parsing/input.log index c94c04b..b831125 100644 --- a/ass3/zbirnik/parsing/input.log +++ b/ass3/zbirnik/parsing/input.log @@ -1,20 +1,21 @@ ***** Section ***** -Stats: size=78 blocks=78 symbols=9 literals=0 relocations=0 +Stats: size=79 blocks=79 symbols=9 literals=0 relocations=1 Blocks name start size #ins #dir #sto - 00000 0004E 19 4 5 + 00000 0004F 19 4 5 Symbols 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 - diff 000042 66 local relative data label - mod 00004B 75 local relative data label - prod 000045 69 local relative data label - quot 000048 72 local relative data label - sum 00003F 63 local relative data label - x 000039 57 local relative data label - y 00003C 60 local relative data label + diff 000043 67 local relative data label + mod 00004C 76 local relative data label + prod 000046 70 local relative data label + quot 000049 73 local relative data label + sum 000040 64 local relative data label + x 00003A 58 local relative data label + y 00003D 61 local relative data label Literals label definition Relocations address length flag symbol + 00001 5 diff --git a/ass3/zbirnik/parsing/input.lst b/ass3/zbirnik/parsing/input.lst index 9f9889e..bf96b9f 100644 --- a/ass3/zbirnik/parsing/input.lst +++ b/ass3/zbirnik/parsing/input.lst @@ -1,32 +1,32 @@ 00000 arith START 0 -00000 032036 LDA x -00003 1B2036 ADD y -00006 0F2036 STA sum -00009 03202D LDA x -0000C 1F202D SUB y -0000F 0F2030 STA diff +00000 0310003A +LDA x +00004 1B2036 ADD y +00007 0F2036 STA sum +0000A 03202D LDA x +0000D 1F202D SUB y +00010 0F2030 STA diff -00012 032024 LDA x -00015 232024 MUL y -00018 0F202A STA prod +00013 032024 LDA x +00016 232024 MUL y +00019 0F202A STA prod -0001B 03201B LDA x -0001E 27201B DIV y -00021 0F2024 STA quot +0001C 03201B LDA x +0001F 27201B DIV y +00022 0F2024 STA quot -00024 032015 LDA y -00027 23201E MUL quot -0002A 0F201E STA mod -0002D 032009 LDA x -00030 1F2018 SUB mod -00033 0F2015 STA mod -00036 3F2FFD HALT J HALT -00039 END arith +00025 032015 LDA y +00028 23201E MUL quot +0002B 0F201E STA mod +0002E 032009 LDA x +00031 1F2018 SUB mod +00034 0F2015 STA mod +00037 3F2FFD HALT J HALT +0003A END arith -00039 00000B x WORD 11 -0003C 000005 y WORD 5 -0003F 000000 sum RESW 1 -00042 000000 diff RESW 1 -00045 000000 prod RESW 1 -00048 000000 quot RESW 1 -0004B 000000 mod RESW 1 +0003A 00000B x WORD 11 +0003D 000005 y WORD 5 +00040 000000 sum RESW 1 +00043 000000 diff RESW 1 +00046 000000 prod RESW 1 +00049 000000 quot RESW 1 +0004C 000000 mod RESW 1 diff --git a/ass3/zbirnik/parsing/input.obj b/ass3/zbirnik/parsing/input.obj index 0f49c8f..5db5757 100644 --- a/ass3/zbirnik/parsing/input.obj +++ b/ass3/zbirnik/parsing/input.obj @@ -1,5 +1,6 @@ -Harith 00000000004E -T0000001E0320361B20360F203603202D1F202D0F20300320242320240F202A03201B -T00001E1E27201B0F202403201523201E0F201E0320091F20180F20153F2FFD00000B -T00003C03000005 +Harith 00000000004F +T0000001E0310003A1B20360F203603202D1F202D0F20300320242320240F202A0320 +T00001E1E1B27201B0F202403201523201E0F201E0320091F20180F20153F2FFD0000 +T00003C040B000005 +M00000105 E000000 diff --git a/ass3/zbirnik/parsing/pregledovalnik.go b/ass3/zbirnik/parsing/pregledovalnik.go index b1560a7..b759b94 100644 --- a/ass3/zbirnik/parsing/pregledovalnik.go +++ b/ass3/zbirnik/parsing/pregledovalnik.go @@ -80,6 +80,8 @@ var bazno_dovoljeno bool var bazno_naslov int +var naslov_programa int + var zacetni_naslov int type ukaz interface { @@ -607,6 +609,7 @@ func check_M_i(el string, AST *[]ukaz) bool { func prvi_prehod(AST *[]ukaz) { lc_global, _ = strconv.Atoi((*AST)[0].(*format_D_n).operand) + naslov_programa = lc_global ime_programa = (*AST)[0].(*format_D_n).oznaka for _, el := range *AST { //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 { - if val.n && !val.i { - - } else if !val.n && val.i { - - } else if val.n && val.i { - - } + val.odmik = st } else { - if val.n && !val.i { - - } else if !val.n && val.i { - - } else if val.n && val.i { - - } + val.odmik = simbolna_tabela[val.naslov] } case *format_D: bazno_dovoljeno = false 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) { for _, el := range *AST { switch val := el.(type) { @@ -847,4 +851,5 @@ func main() { }*/ drugi_prehod(&AST) //izpis(&AST) + generacija(&AST) }