📜  调试机器级程序

📅  最后修改于: 2021-06-30 01:17:56             🧑  作者: Mango

调试是从软件或程序中识别和删除错误的过程。它指的是程序逻辑,机器代码和执行中的错误的标识。它逐步提供有关代码执行的信息,以识别程序中的故障。

机器代码的调试:将汇编语言转换为机器代码类似于从原理图构建电路。调试可以帮助确定:

  • 寄存器的值。
  • 程序流程。
  • 函数的入口和出口点。
  • 输入ifelse语句。
  • 代码循环。
  • 计算检查。

常见的错误来源:

  • 选择错误的密码
  • 忘记指令的第二或第三字节
  • 指定错误的跳转位置
  • 在Jump指令中不反转高字节和低字节的顺序
  • 用十进制而不是十六进制写入内存地址
  • 两个数相加时无法清除累加器
  • 无法清除进位寄存器
  • 跳转指令前未设置标志
  • 在跳转指令上指定错误的存储器地址
  • 使用不正确的旋转指令组合

调试过程分为两部分:

  1. 静态调试:类似于电路板的外观检查,它是用纸和铅笔检查流程图和机器代码的。用于理解代码逻辑和程序结构。
  2. 动态调试:涉及在执行每条指令(单步技术)或一组指令(断点技术)后观察寄存器或输出的内容。
    在单板微处理器中,动态调试中常用的技术和工具是:
    1. 单一步骤:这项技术允许一次执行一条指令,并观察每条指令的结果。通常,这是使用硬连线逻辑电路构建的。当我们按下单步运行键时,我们将能够观察寄存器的内容和存储器的位置。这有助于发现:
      • 地址错误
      • 循环中错误的跳转位置
      • 数据不正确或代码丢失

      但是,如果存在较大的循环,则单步调试可能会非常累人且耗时。因此,我们可以减少迭代次数来检查循环的有效性,而不是运行n次循环。单步技术对于短程序非常有用。

    2. 断点:断点功能通常是一个软件例程,允许用户分节执行程序。可以使用RST指令设置断点。当我们按Execute键时,程序将执行到断点。可以检查寄存器的预期结果。使用断点功能,将程序段与错误隔离。然后可以使用单步工具调试该段。通常用于检查:
      • 定时循环
      • I / O部分
      • 中断
    3. 寄存器检查:寄存器检查键使您可以检查微处理器寄存器的内容。该技术与单步或断点工具结合使用。