diff --git a/src/simudator/core/processor.py b/src/simudator/core/processor.py
index 455086bdf015d477fb46e071b0ffd5f7df8c9e66..0199e8edf0f39f3a74e2c49885ac4677cf1a23ef 100644
--- a/src/simudator/core/processor.py
+++ b/src/simudator/core/processor.py
@@ -79,6 +79,16 @@ class Processor:
         """
         raise NotImplemented
 
+    def run_asm_instruction(self, num_instructions = 1) -> None:
+        """
+        Runs assembler instructions on the processors 'num_instructions' times.
+
+        Default argument is one, but it is possible to specify any number of instructions.
+        This should be implemented per processor and thus we raise NotImplemented.
+        """
+
+        raise NotImplemented
+
     def run_continuously(self):
         """
         Runs the processor until it halts.
diff --git a/src/simudator/gui/gui.py b/src/simudator/gui/gui.py
index be1540b2870e08c0b4d25fb6dd9ea262540fc655..44fd5492220cd4af0528e9b22b310fbe9c077986 100644
--- a/src/simudator/gui/gui.py
+++ b/src/simudator/gui/gui.py
@@ -460,7 +460,7 @@ class GUI(QMainWindow):
 
     def stepToolBarButtonClick(self):
         """
-        Runs the cpu a specified number of times according to the jump value box.
+        Runs the cpu a specified number of clock cycles according to the jump value box.
         """
 
         # Don't do steps if cpu is running
@@ -475,6 +475,23 @@ class GUI(QMainWindow):
         self.threadpool.start(simultaion_thread)
         self.updateCpuListeners()
 
+    def stepAsmToolBarButtonClick(self):
+        """
+        Runs the cpu a specified number of asm instructions according to the jump value box.
+        """
+
+        # Don't do steps if cpu is running
+        if self.cpu_running:
+            return
+
+        steps = self.asm_jump_value_box.value()
+        self.cpu_running = True
+        self.setDisabledWhenRunning(True)
+        self.cpu.unstop()
+        simultaion_thread = RunThread(self.cpu, self.halted_signal, False, steps)
+        self.threadpool.start(simultaion_thread)
+        self.updateCpuListeners()
+
     def runToolBarButtonClick(self) -> None:
         """
         Runs the cpu until it is stopped by user input, breakpoint or similar.
@@ -860,7 +877,7 @@ class GUI(QMainWindow):
         Undos as many processor cycles as the number entered in the box.
         """
         try:
-            steps = self.jump_value_box.value()
+            steps = self.asm_jump_value_box.value()
             self.cpu.load_cycle(max(self.cpu.get_clock() - steps, 0))
             self.updateCpuListeners()
         except (ValueError, IndexError):
diff --git a/src/simudator/gui/run_continuously_thread.py b/src/simudator/gui/run_continuously_thread.py
index c974a3bf542c3f3bb0ca99abeb2456665fc6c3ec..01d45e46e237c662bc1512260e81f4cba72979c1 100644
--- a/src/simudator/gui/run_continuously_thread.py
+++ b/src/simudator/gui/run_continuously_thread.py
@@ -4,6 +4,7 @@ from qtpy.QtCore import QRunnable
 class RunThread(QRunnable):
     """
     This class is used to run the cpu on a seperate thread.
+
     This allows the user to interact with the GUI will th cpu is running.
     When the cpu halts this thread will emit to it's given signal
     the GUI can then handel what should happend after execution on its own.
@@ -25,3 +26,8 @@ class RunThread(QRunnable):
                 self.cpu.do_tick()
 
         self.signal.emit(self.steps)
+    
+    def run_asm(self):
+        self.cpu.run_asm(self.steps)
+
+        self.signal.emit(self.steps)
diff --git a/src/simudator/processor/mia/mia.py b/src/simudator/processor/mia/mia.py
index a3b0b46af240cdc799911d71eec920c82fa9575a..b5c100385f55e5568ea899b0bdf243e367c1e6a4 100644
--- a/src/simudator/processor/mia/mia.py
+++ b/src/simudator/processor/mia/mia.py
@@ -303,9 +303,26 @@ class MIA_CPU(Processor):
         """Returns a string containing the label for the current instruction.
 
         If the label doesnt exist, the string is empty."""
-        op_code = self.get_module("IR").op
+        ir = self.get_module("IR")
+        op_code = ir.op
         return self.get_module("K1").get_label(int(op_code))
 
+    def run_asm_instruction(self, num_instructions = 1) -> None:
+        """
+        Runs assembler instructions on Mia 'num_instructions' times.
+
+        Default argument is one, but it is possible to specify any number of instructions.
+        """
+        while True:
+
+            if num_instructions <= 0:
+                return
+
+            if self.is_new_instruction():
+                num_instructions -= 1
+
+            self.do_tick()
+
     def should_halt(self) -> bool:
         micro_memory_state = self.micro_memory.get_state()
         return micro_memory_state["halt"]