Browse Source

SVI Добавил НЕ над регистром

SVI 10 months ago
parent
commit
30c397a1af
5 changed files with 18 additions and 1 deletions
  1. 6 0
      assets/prog.risc.asm
  2. 2 0
      cpu/asm_mem/asm_cmd/asm_cmd.go
  3. 6 1
      cpu/asm_reg/asm_reg.go
  4. 3 0
      cpu/cpu.go
  5. 1 0
      pkg/cons/cons.go

+ 6 - 0
assets/prog.risc.asm

@@ -5,6 +5,12 @@
 упр.метка  @старт
 пусто
 
+рег.уст    6  р0
+рег.уст    7  р1
+рег.не     р1
+рег.не     р1
+упр.идти   @старт
+
 рег.уст    6  р0
 рег.уст    7  р1
 рег.и      2  р1

+ 2 - 0
cpu/asm_mem/asm_cmd/asm_cmd.go

@@ -58,6 +58,8 @@ func NewAsmCmd(cmd string) *AsmCmd {
 		sf.cmd = cons.AsmRegOr
 	case "рег.и":
 		sf.cmd = cons.AsmRegAnd
+	case "рег.не":
+		sf.cmd = cons.AsmRegNot
 	case "проц.уст":
 		sf.cmd = cons.AsmProcSet
 	case "проц.обмен":

+ 6 - 1
cpu/asm_reg/asm_reg.go

@@ -12,7 +12,12 @@ func NewAsmReg() *AsmReg {
 	return sf
 }
 
-// Abd -- И числа и регистра
+// Not -- инверсия регистра
+func (sf *AsmReg) Not() {
+	sf.val ^= sf.val
+}
+
+// Add -- И числа и регистра
 func (sf *AsmReg) And(val int32) {
 	sf.val &= val
 }

+ 3 - 0
cpu/cpu.go

@@ -96,6 +96,9 @@ func (sf *Cpu) Step() {
 	case cons.AsmRegAnd: // И числа и регистра
 		reg := sf.reg(cmd.StrP2())
 		reg.And(cmd.P1())
+	case cons.AsmRegNot: // НЕ числа и регистра
+		reg := sf.reg(cmd.StrP1())
+		reg.Not()
 	case cons.AsmProcSet: // Установить значение регистра другим регистром
 		reg1 := sf.reg(cmd.StrP1())
 		reg2 := sf.reg(cmd.StrP2())

+ 1 - 0
pkg/cons/cons.go

@@ -13,6 +13,7 @@ const ( // AsmCmd -- команды ассемблера
 	AsmRegDiv          // Деление РЕГИСТРА на число
 	AsmRegOr           // Или числа и регистра
 	AsmRegAnd          // И числа и регистра
+	AsmRegNot          // НЕ регистра
 
 	AsmProcSet  // Установить значение регистра значением другого регистра
 	AsmProcSwap // Обмен значений двух регистров