下面给出一些常见出错信息,以便查对: 1、Register already defined 汇编内部出现逻辑错误 2、Unknown symbol type 在符号语句的类型中,有些不能识别的东西 3、Symbol is multi-defined 重复定义一个符号 4、Symbol not defined 符号没有定义 5、Syntax error 语句的语法与任何可识别的语法不匹配 6、Symbol is reserved word 企图非法使用一个汇编程序的保留字(例:定义add为一变量) 7、Not proper align/combine type SEGMENT参数不正确 8、One operand must be const 这是加法指令的非法使用 9、Operands must be same or 1 abs 这是减法指令的非法使用 10、Already have base register 试图重复基地址 11、Illegal size for item 引用的项的长度是非法的,(如:双字移位) 12、Illegal register value 指定的寄存器值不能放入“reg” 字段 13、Must be AX or AL 某些指令只能用AX或AL 14、Improper use of segment reg 段寄存器使用不合法(如:mov ds,0) 15、Division by 0 or overflow 给出一个用0作除数的表达式 16、value is out of range 数值大于需要使用的 17、CS register illeal usage 试图非法使用CS寄存器 18、DUP is too large for linker DUP嵌套太长,以至于从连接程序不能得到所要的记录 PROCEDURE d:连接为可执行文件(即:连接为.exe 或.com文件) 在这个过程中一般没有意外,如果有也就是文件名打错了。 形式:在DOS提示符下: LINK filename 回车 PROCEDURE e:运行编译好的可执行文件 当PROCEDURE d通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。在试运行期间,要尽量试一些临界状态,看 程序是否运行稳定、结果是否正确。如一切正常,便可进入PROCEDURE g了。 可最怕的是不OK,程序产生一些莫名其妙的结果(你可不要以为是你的计算机不听你的指挥,其实它是在一丝不苟地按照你编的程序执行。我以前总以为我的计算机出了毛病),如果是在考场上这时千万不要慌,稳住自己的情绪,先不要看计算机,静几分钟(反正时间多得是)。这时就要用到最关键、最常用的一步了,进行PROCEDURE f 。 PROCEDURE f:用调试工具调试,重新修改(逻辑错误) 在这我将介绍用DOS中自带的调试程序DEBUG.EXE来进行程序调试、检查错误. 首先我们要了解DEBUG的基本用法: 1、用于调试程序时的输入格式: DEBUG FILENAME.??? 回车 其中FILENAME是主文件名,???是扩展文件名,例如我们在此前已编译好了一个文件,它的名子为:djx.exe 要对它进行调试时就在DOS提示符下 打:DEBUG djx.exe 回车,便可见到 '-' 提示符,如无任何提示说明正确,可进行调试。 2、DEBUG调试过程中用到的DEBUG命令介绍: (注:在指令中用 [] 括起来的内容可缺省) 1)D(Dump)显示指定内存单元内容(一般用来看数据数的内容,即DS段): 格式:d[地址] 从[地址]指定的内存单元显示128个字节的内容 [地址]缺省时,显示上一个DUMP命令后面的内容 d 地址范围 显示指定范围内的内存内容。 示例:-d100 显示从DS段100H开始的内容(以十六进制显示) 2)E(Enter)修改存储单元内容(一般在DS段) 格式:e 地址 [数据] 用给定的[数据]代替指定范围的存储单元内容 e 地址 修改一个指定内存单元的内容 示例:-e ds:200 'djx'FF00AA 就可将DS段从200开始至205的内容替 换为64 6A 78 FF 00 AA 3)G(GO)运行命令 格式:-g [=地址][断点地址1 [断点地址2 ...[断点地址10]]] 从指定[地址]开始执行程序(如地址缺省从当前CS:IP开始),运行至[断点地址1]停止,显示所有寄存器及标志位内容与下一条指令,如后面还有断点,可键入g,继续执行。 示例:-g001a 则执行从当前cs:ip至001a的指令 注意:地址设置必须从指令的第一字节设起。 4)T(Trace)执行一条语句 格式: -t [=地址] 从指定[地址]起执行一条语句后停下来,显示所有寄存器内容及标志位的值与下一条指令。如[地址]缺省则从当前CS:IP开始执行 -t [=地址][value] 从指定地址起执行value条指令后停止。 5)P(proceed)执行一个循环;一个软中断或call子过程 格式:-p [=地址][n] 示例: mov ah,02h mov dl,41h int 21h 此时用: -p 回车后系统将显示一个字符A,如果在这不用P,而改用T,那么系统将进入INT 21H的中断调用中,出不来,这时你会误以为你的程序编错了,一定注意!! 6)R(register)显示并可修改寄存器内容 格式:-r 显示所有寄存器内容 -r 寄存器名 修改指定寄存器内容(可改:AX,BX,CX,DX,SP, BP,SI,DI,CS,DS,ES,SS,PC,IP,F) 7)U(Unassemble)反汇编 格式:-u [地址] 从指定[地址]反汇编32个字节,若[地址]缺省则从当前地址汇编32个字节。 -u 地址范围 对指定范围内的存储单元进行反汇编 以上是在调试程序中可能用到的DEBUG命令解释,DEBUG中还有其它命令,在检查程序中不会用到,就不再介绍了。 PROCEDURE g:程序编好,那就一切OK!!!交卷过关了!大吃、大睡。  
2/2 首页 上一页 1 2 |