AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编语言上机指导及例示

51自学网 http://www.51zixue.net

下面给出一些常见出错信息,以便查对:

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!!!交卷过关了!大吃、大睡。

 

 
 

上一篇:汇编语言的艺术(组合语言的艺术)--基本认识(1)  下一篇:汇编语言的准备知识-给初次接触汇编者4