diff --git a/ass3/zbirnik/parsing/pregledovalnik.go b/ass3/zbirnik/parsing/pregledovalnik.go index ce0d78c..3c1ee59 100644 --- a/ass3/zbirnik/parsing/pregledovalnik.go +++ b/ass3/zbirnik/parsing/pregledovalnik.go @@ -713,9 +713,11 @@ func drugi_prehod(AST *[]ukaz) { case *format_F3_m: if st, err := strconv.Atoi(val.naslov); err == nil { if val.n && !val.i { if st >= -2048 && st <= 2047 { + val.p = true val.odmik = st - (val.lc + val.velikost) //naslov - PC } else if bazno_dovoljeno && st >= 0 && st <= 4095 { val.odmik = st - bazno_naslov + val.b = true } else { val.odmik = st } @@ -723,8 +725,10 @@ func drugi_prehod(AST *[]ukaz) { val.odmik = st } else if val.n && val.i { if st >= -2048 && st <= 2047 { + val.p = true val.odmik = st - (val.lc + val.velikost) //naslov - PC } else if bazno_dovoljeno && st >= 0 && st <= 4095 { + val.b = true val.odmik = st - bazno_naslov } else { val.odmik = st @@ -734,8 +738,10 @@ func drugi_prehod(AST *[]ukaz) { naslov := simbolna_tabela[val.naslov] if val.n && !val.i { if naslov >= -2048 && naslov <= 2047 { + val.p = true val.odmik = naslov - (val.lc + val.velikost) //naslov - PC } else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 { + val.b = true val.odmik = naslov - bazno_naslov } else { val.odmik = naslov @@ -744,9 +750,11 @@ func drugi_prehod(AST *[]ukaz) { val.odmik = naslov } else if val.n && val.i { if naslov >= -2048 && naslov <= 2047 { + val.p = true val.odmik = naslov - (val.lc + val.velikost) //naslov - PC //fmt.Printf("pc %x\n", val.odmik) } else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 { + val.b = true val.odmik = naslov - bazno_naslov //fmt.Printf("bazno %x\n", val.odmik) } else { @@ -797,11 +805,11 @@ func generacija(AST *[]ukaz) { for _, el := range *AST { temp := "" switch val := el.(type) { - case *format_F1: temp= fmt.Sprintf("%s%4x", temp, val.opcode) - case *format_F2_n: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, val.n, 0) - case *format_F2_r: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, register_map[val.r1], 0) - case *format_F2_rn: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, val.r1, val.n) - case *format_F2_rr: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, register_map[val.r1], register_map[val.r2]) + case *format_F1: temp= fmt.Sprintf("%s%02x", temp, val.opcode) + case *format_F2_n: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, val.n, 0) + case *format_F2_r: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, register_map[val.r1], 0) + case *format_F2_rn: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, val.r1, val.n) + case *format_F2_rr: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, register_map[val.r1], register_map[val.r2]) case *format_F3_m: n := 0 i := 0 x := 0 @@ -826,8 +834,8 @@ func generacija(AST *[]ukaz) { if val.e { e = 1 } - temp = fmt.Sprintf("%s%2x%2x%2x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) + - (val.odmik & (0xF << 8)), val.odmik & 0xFF) + temp = fmt.Sprintf("%s%02x%02x%02x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) + + ((val.odmik >> 8) & 0xF), val.odmik & 0xFF) case *format_F4_m: n := 0 i := 0 x := 0 @@ -852,15 +860,15 @@ func generacija(AST *[]ukaz) { if val.e { e = 1 } - temp = fmt.Sprintf("%s%2x%2x%2x%2x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) + - (val.odmik & (0xF << 16)), val.odmik & (0xFF << 8), val.odmik & 0xFF) + temp = fmt.Sprintf("%s%02x%02x%02x%02x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) + + ((val.odmik >> 16) & 0xF), (val.odmik >> 8) & 0xFF, val.odmik & 0xFF) case *format_D: continue case *format_D_n: if val.ime == "START" || val.ime == "END" { continue } case *format_M_r: continue case *format_M_i: vr, _ := strconv.Atoi(val.operand) - temp = fmt.Sprintf("%s%3x", temp, vr) + temp = fmt.Sprintf("%s%06x", temp, vr) } if line_len + el.Velikost() <= 30 { line_len += el.Velikost() @@ -872,6 +880,7 @@ func generacija(AST *[]ukaz) { line_addr = el.GetAddr() } } + fmt.Printf("T: %x, %x, %s\n", line_addr, line_len, line) } func izpis(AST *[]ukaz) { diff --git a/ass3/zbirnik/parsing/test.go b/ass3/zbirnik/parsing/test.go index 821aa3c..04eab57 100644 --- a/ass3/zbirnik/parsing/test.go +++ b/ass3/zbirnik/parsing/test.go @@ -5,6 +5,8 @@ import ( ) func main() { - test := 65 + ((true ? 1 : 0) << 1) + ((true ? 1 : 0) << 0) - fmt.Println(test) + line := "" + line = fmt.Sprintf("%s%02x", line, 15) + line = fmt.Sprintf("%s%02x", line, 14) + fmt.Println(line) }