Jelajahi Sumber

SVI Добавление вычитания из регистра числа

SVI 10 bulan lalu
induk
melakukan
f382bd985b
5 mengubah file dengan 17 tambahan dan 0 penghapusan
  1. 6 0
      assets/prog.risc.asm
  2. 2 0
      cpu/asm_mem/asm_cmd/asm_cmd.go
  3. 5 0
      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
+рег.выч    р1 7
+рег.выч    р1 -2
+упр.идти   @старт
+
 рег.уст    6  р0
 рег.уст    5  р1
 рег.доб    7  р1

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

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

+ 5 - 0
cpu/asm_reg/asm_reg.go

@@ -12,6 +12,11 @@ func NewAsmReg() *AsmReg {
 	return sf
 }
 
+// Sub -- добавляет число к регистру
+func (sf *AsmReg) Sub(val int32) {
+	sf.val -= val
+}
+
 // Add -- добавляет число к регистру
 func (sf *AsmReg) Add(val int32) {
 	sf.val += val

+ 3 - 0
cpu/cpu.go

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

+ 1 - 0
pkg/cons/cons.go

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