![]() | 第2章 开始设计程序 | -15- | |||||||||||||||||||
-a[Enter] | ← 输入的命令,大小写均可,[Enter]代表“回车”。 | 0B01:0100 | ← 可用存储器的起始地址,你的程序从这里开始存放 | ||||||||||||||||||
![]() |
"A"命令的作用是告诉DEBUG现在开始编写程序,它可以后加一个地址作为参数,即可以从代码段的任何位置开始输入程序。对于新编一个程序来说,必须从100H开始。因此我们也可打入"A100[Enter]"。对于修改一个已经存在的程序中的部分指令,可在A后面打入将要修改指令的偏移地址即可。例如要重写位于偏移量200H处的指令,可打入"A200[Enter]"。此时屏幕上将显示0B01:0200。 | ||||||||||||||||||||
输入了"A"命令之后,屏幕上应出现一个以"段:偏移"形式表示的逻辑地址。这个地址就是程序的起始地址。它和CPU中CS:IP指向的位置相同。 在不同的机器,不同的DOS版本中,用户程序的起始段地址是不同的。如果看到的段地址不是0B01,那并没有任何关系。关于偏移地址必为0100的原因前面说过,这是DOS的安排。 看到逻辑地址后,我们即可敲入我们的第一个程序。DEBUG会自动把输入的汇编指令译成机器码并保存在相应存储单元中。每条指令译完后DEBUG会自动列出下条指令的逻辑地址,因此我们只要打入程序右侧的那些指令即可,左边的逻辑地址是自动给出的。注意分号(;)后面的文字是对这一行指令的说明,不用输入。 |
|||||||||||||||||||||
-a[Enter] | |||||||||||||||||||||
0B01:0100 0B01:0102 0B01:0104 0B01:0106 0B01:0109 0B01:010B 0B01:010D |
in al,61 xor al,2 out 61,al mov cx,400 loop 109 jmp 100 [Enter] |
;用户输入的内容 ;← 此处直接回车 |
|||||||||||||||||||
在运行这个程序前,我们应先将此程序存盘。因为程序中的一个细小的"BUG"都可导致"死机"的后果。那如何保存此程序呢? 既然要存盘,总要给程序取个名字。程序命名要用到DEBUG的第三条命令--N,操作如下: -NPROG1.COM[Enter] |
|||||||||||||||||||||
![]() |
"N"命令实际来自于英文单词"Name"。有些参考书讨论这个命令时常提醒用户注意不要在"N"后面加空格,其实有无空格并没有关系,至少在6.0以上版的DOS系统没有这个要求。当然,文件扩展名必须是"COM",不能是"EXE"或其它的。 | ||||||||||||||||||||
有了名字后,我们还应告诉DEBUG此程序的字节数。由于程序从100H开始,因此我们只要把最后一条指令的下一个地址减去100H即可得到程序长度。前面那个程序的长度应该是010D-100=0D。 DEBUG规定存盘程序的长度应放在"BX"和"CX"寄存器中,也就是说把BX,CX两个16位寄存器联合起来存放一个32位的长度值,高16位在BX中。因此,若要存盘的内容不足64K,则应将BX置0,而将长度放入CX中。这就要用到前面介绍的"R"命令。操作如下: |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |