Browse Source

SVI Добавил умножение числа и регистра

SVI 10 months ago
parent
commit
71453917c2
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
+рег.уст    5  р1
+рег.умн    2  р1
+рег.умн    -2 р1
+упр.идти   @старт
+
 рег.уст    6  р0
 рег.уст    5  р1
 рег.выч    р1 7

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

@@ -50,6 +50,8 @@ func NewAsmCmd(cmd string) *AsmCmd {
 		sf.cmd = cons.AsmRegAdd
 	case "рег.выч":
 		sf.cmd = cons.AsmRegSub
+	case "рег.умн":
+		sf.cmd = cons.AsmRegMul
 	case "проц.уст":
 		sf.cmd = cons.AsmProcSet
 	case "проц.обмен":

+ 6 - 1
cpu/asm_reg/asm_reg.go

@@ -12,7 +12,12 @@ func NewAsmReg() *AsmReg {
 	return sf
 }
 
-// Sub -- добавляет число к регистру
+// Mul -- умножает число и регистр
+func (sf *AsmReg) Mul(val int32) {
+	sf.val *= val
+}
+
+// Sub -- вычитает ИЗ РЕГИСТРА число
 func (sf *AsmReg) Sub(val int32) {
 	sf.val -= val
 }

+ 3 - 0
cpu/cpu.go

@@ -84,6 +84,9 @@ func (sf *Cpu) Step() {
 	case cons.AsmRegSub: // Вычитание ИЗ РЕГИСТРА числа
 		reg := sf.reg(cmd.StrP1())
 		reg.Sub(cmd.P2())
+	case cons.AsmRegMul: // Умножение числа и регистра
+		reg := sf.reg(cmd.StrP2())
+		reg.Mul(cmd.P1())
 	case cons.AsmProcSet: // Установить значение регистра другим регистром
 		reg1 := sf.reg(cmd.StrP1())
 		reg2 := sf.reg(cmd.StrP2())

+ 1 - 0
pkg/cons/cons.go

@@ -9,6 +9,7 @@ const ( // AsmCmd -- команды ассемблера
 	AsmRegDec          // Декремент регистра
 	AsmRegAdd          // Добавление числа к регистру
 	AsmRegSub          // Вычитание ИЗ РЕГИСТРА числа
+	AsmRegMul          // Умножение числа и регистра
 
 	AsmProcSet  // Установить значение регистра значением другого регистра
 	AsmProcSwap // Обмен значений двух регистров