续上一篇编译出的可执行文件,分析其执行过程。

用Debug装载程序

汇编 - 3.3 - 用Debug跟踪程序的执行
汇编 - 3.3 - 用Debug跟踪程序的执行

汇编 - 3.3 - 用Debug跟踪程序的执行

  • 程序被装入内存的什么地方?
    汇编 - 3.3 - 用Debug跟踪程序的执行
    根据这些信息,能画出一下的图
    汇编 - 3.3 - 用Debug跟踪程序的执行
    其中,一共256(100H)字节的程序段前缀(PSP),作为数据区

    这里的“数据区”属于操作系统的细节,这里不展开(焦点放在对汇编指令的了解上)。

    通过u观察代码段代码
    汇编 - 3.3 - 用Debug跟踪程序的执行
    汇编 - 3.3 - 用Debug跟踪程序的执行

汇编 - 3.3 - 用Debug跟踪程序的执行

  • 小结
    1. 程序加载后,DS中存放着程序所在的内存区的段地址,这个内存区的偏移地址位0,则程序所在的内存区的地址位:DS:0
    2. 这个内存区的前256个字节存PSP,DOS用来和程序进行通信。
    3. 从256字节处向后的空间存放的是程序,CS的值为DS+10H。
    4. 程序加载后,CX中存放代码代码的长度(字节)。
      汇编 - 3.3 - 用Debug跟踪程序的执行

用Debug单步执行程序

汇编 - 3.3 - 用Debug跟踪程序的执行
汇编 - 3.3 - 用Debug跟踪程序的执行

ip移动到另外一个位置,代表程序已经执行完毕

其他方式执行 (P命令/G命令)

  • 继续命令P(Proceed):
    类似T命令,逐条执行指令、显示结果。
    但遇子程序、中断等时,直接执行,然后显示结果。
  • 运行命令G(Go):
    从指令地址处开始运行程序,直到遇到断点或者程序正常结束。

程序执行的不同方式

汇编 - 3.3 - 用Debug跟踪程序的执行

相关文章: