第一个程序

一个程序从写出代码到执行

  1. 编写源代码
  2. 对源代码进行编译,产生 OBJ 目标文件,编译后连接目标文件
  3. 产生可执行文件并执行

可执行文件包括两个部分:程序(机器码)、数据、Metadata(程序的相关信息)

源代码说明

assume cs:codesg    ;假设代码段 codesg 与寄存器 CS 关联

codesg segment      ;定义一个段,段标号 codesg,编译过程中指定一个段地址
        mov ax,0123h
        mov bx,0456h
        add ax,bx
        add ax,ax

        mov ax,4c00h   ;中断信号
        int 21h        ;发送 21 号返回中断

codesg ends         ;段定义结束

end                 ;汇编程序结束

实际操作过程 (Step-By-Step)

以下以本书中附带的 MASM 6.11 和 MS-DOS 7.1 为例:

  1. 启动 MS-DOS 7.1
  2. 使用 cd 切换到对应 MASMLINK 所在目录。
  3. 使用 edit 1.asm 创建并编辑一个汇编语言源代码文件, Alt 键选择菜单, 上下方向键控制光标,回车确认。
  4. 使用 masm.exe 1.asm 1.obj 将其编译为 1.obj 文件。
  5. 使用 link.exe1.obj 连接为 1.exe

需要注意的是使用 link 时,只需要显示了 [.OBJ] 时输入 1 就可以了,如果有其他文件,则需输入文件全名。

Tips: 在命令末尾添加对应运行参数后使用 ; 可以进入无交互模式。

可执行文件的装入、执行

以 MS-DOS 7.11 为例:

DOS 中有一个 command.com 被称为命令解释器,也就是 DOS 系统的 Shell,之后根据用户在命令提示符中输入的文件名,将可执行文件中的程序载入到内存,设置 CS:IP 为程序的入口,此后 command.com 暂停运行,CPU 运行载入的程序,程序运行结束后,返回到 command.com 中,继续显示由当前盘符和路径组成的命令提示符。

可执行文件的跟踪调试

使用 DEBUG 即可,请参见实验一。

拓展延伸:在 DOS 中,装载程序主要包括:寻找到一个起始地址为 SA:0000 的容量足够大的空闲内存区,在这段内存去前 256 Bytes 中,创建一个数据区:程序段前缀(PSP), DOS 利用 PSP 与 被加载程序通讯。之后,在 SA+10H:0 将程序装入,将 PSP 的段地址装入 DS 中,设置 CS:IP 指向程序入口。

注意: INT 中断指令需要使用 P 指令在 debug 中执行。

请完成实验二

© 2019 kmahyyg <16604643+kmahyyg@users.noreply.github.com>. All rights reserved.

results matching ""

    No results matching ""