我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:一品彩票 > 反汇编程序 >

汇编语言上机环境?

归档日期:07-09       文本归类:反汇编程序      文章编辑:爱尚语录

  对于一个简单的汇编程序怎样编译和调试?我刚刚学,不知道怎么运行和调试,望大侠指点啊!

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  你先编写好程序,然后用masm (程序名字).asm编译,如果程序有错误的话, 会提示哪一行有错误。

  从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于本人水平有限,在下文在如有错误及可以进一步修改的地方请大家指出

  a.建立汇编源程序—通过———→b.编译为目标文件— ↓┬—→d.连接为可执行文件

  三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明

  这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。将源程序代码录入计算机的方法很多,下面将介绍具体方法。

  1.通过MD-DOS自带的EDIT.EXE文本编辑器进行输入,在DOS提示符下键入:EDIT回车,这时如果你系统内可调用时,EDIT的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个文件名,形式:filename.asm ;(其中filename为你起的文件名,由1-8个字符组成),asm 是为汇编程序识别而必须加上去的,不可更改。存盘后在DOS下可用DOS命令DIR来查看,如果看到了所存的文件存在,就可以进行进程b。

  2.如果你的系统中没有EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。

  这个过程计算机将把你编的正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。如果此时你的程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,你可根据提示去逐一修改。现介绍具体过程:

  (注:你系统内的汇编程序为MASM.EXE,如果你系统的汇编程序为ASM.EXE时,便将命令变为ASM filename回车。其中filename为你刚才在PROCEDURE a 中建立的文件名)

  这时汇编程序的输出文件可以有三个(分别:.obj .lst .crf),便会出现三次提问,在这可以一路回车即可。下面显示的信息是源程序中的错误个数,如果为0则表示顺利通过,就可进行进程c。但如果不为0就说明有错误,并指出错误出现的行,可依据这个提示去进行修改。但如果错误太多还未等看清就显示过去了,可用如下命令形将错误信息存于一个你指定的文件,再用文本编辑器去查看。 MASM filename filen (filen为你起的一个没用过的文件名,用以存放出错信息)以后可查看filen来得到出错信息。

  PROCEDURE c:编译不通过,重新修改(错误类型:源程序语句不合法)

  在执行过PROCEDURE b后,如有出错信息时,就要我们自己按PROCEDURE c去做,而不能跳跃到PROCEDURE d去,如果强行执行PROCEDURE d将无任何有效结果。

  现在就开现找错吧!首先要清楚,在PROCEDURE b中检测出的错误均为每一条语句的语法或用法错误,它并不能检测出程序的逻辑设计(语句按排位置)错误,所以就要记好出错的行号。在记录行号后,就应再次执行PROCEDURE a,这时和操作应是打开已编好的源程序(以EDIT为例:在DOS提示符下键入:

  当PROCEDURE d通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。在试运行期间,要尽量试一些临界状态,看 程序是否运行稳定、结果是否正确。如一切正常,便可进入PROCEDURE g了。

  可最怕的是不OK,程序产生一些莫名其妙的结果(你可不要以为是你的计算机不听你的指挥,其实它是在一丝不苟地按照你编的程序执行。我以前总以为我的计算机出了毛病),如果是在考场上这时千万不要慌,稳住自己的情绪,先不要看计算机,静几分钟(反正时间多得是)。这时就要用到最关键、最常用的一步了,进行PROCEDURE f 。

  在这我将介绍用DOS中自带的调试程序DEBUG.EXE来进行程序调试、检查错误.

  其中FILENAME是主文件名,???是扩展文件名,例如我们在此前已编译好了一个文件,它的名子为:djx.exe 要对它进行调试时就在DOS提示符下

  打:DEBUG djx.exe 回车,便可见到 - 提示符,如无任何提示说明正确,可进行调试。

  1)D(Dump)显示指定内存单元内容(一般用来看数据数的内容,即DS段):

  从指定[地址]开始执行程序(如地址缺省从当前CS:IP开始),运行至[断点地址1]停止,显示所有寄存器及标志位内容与下一条指令,如后面还有断点,可键入g,继续执行。

  格式: -t [=地址] 从指定[地址]起执行一条语句后停下来,显示所有寄存器内容及标志位的值与下一条指令。如[地址]缺省则从当前CS:IP开始执行

  此时用: -p 回车后系统将显示一个字符A,如果在这不用P,而改用T,那么系统将进入INT 21H的中断调用中,出不来,这时你会误以为你的程序编错了,一定注意!!

  格式:-u [地址] 从指定[地址]反汇编32个字节,若[地址]缺省则从当前地址汇编32个字节。

  以上是在调试程序中可能用到的DEBUG命令解释,DEBUG中还有其它命令,在检查程序中不会用到,就不再介绍了。

  PROCEDURE g:程序编好,那就一切OK!!!交卷过关了!大吃、大睡。

  注意刚才我们定义AX为变量时在后面的程序中用过变量AX在第19行

  这时error.exe可执行文件已存在,可以执行PROCEDURE e来运行看一看是否正确

  我首先用d命令来查看数据区和内容,发展所定义的两个字符串并不在数据段的段首,而在数据段内的100h位置上,这时才想起masm有一个不成文的规定,那就是在定义完数据段后,所定义的变量均向后100h个单元,需要我们将ds段寄存器置位,在程序的start:后面加上如下指令:(执行PROCEDURE a)

  以上这个程序很简单,只是为了说明实现汇编语言的上机编程及调试过程,汇编语言须多练习才能掌握它的特点,以便顺利通过考试

  说实线位的汇编很麻烦。你要学不如学WINDOWS32位编程,有很多好用的调试器,如OLLDBG功能就很强,你可以在友好窗口下随意更改你的程序。用16位就只有DEBUG这样的程序了,那用法真相当麻烦。

本文链接:http://explodingspec.com/fanhuibianchengxu/635.html