code: def disassemble(self, start=None, end=None, arch_mode=None):
          
          if arch_mode is None:
              arch_mode = self.binary.architecture_mode
  
          curr_addr = start if start else self.binary.ea_start
          end_addr = end if end else self.binary.ea_end
  
          while curr_addr < end_addr:
              # Fetch the instruction.
              encoding = self.__fetch_instr(curr_addr)
  
              # Decode it.
              asm_instr = self.disassembler.disassemble(encoding, curr_addr, architecture_mode=arch_mode)
  
              if not asm_instr:
                  return
  
              yield curr_addr, asm_instr, asm_instr.size
  
              # update instruction pointer
              curr_addr += asm_instr.size
docs: Disassemble native instructions.
  
          Args:
              start (int): Start address.
              end (int): End address.
              arch_mode (int): Architecture mode.
  
          Returns:
              (int, Instruction, int): A tuple of the form (address, assembler instruction, instruction size).