
MASM的汇编链接和调试的脚本.doc
3页下面我们以1个简单的例了来说明源程序的汇编、链接与调试编程计算Y=a*b+c-3其中a=l;b=・l;c=4;常数为3,显然Y为0步骤1:编写源文件我们打开己编好的源文件simple.txt (用记事本打开simple.txt)定义常数为3,(光标指向常数定义)笫一段是256字的堆栈段,(光标指向堆栈段)第二段是数据段,(光标指向数据段)在数据段定义变量如下:DAT1对应a(光标指向DAT1); DAT2对应b(光标指向DAT2),其中FFH为-1的补码;DAT3 对应c(光标指向DAT3);DATY单元存放结果Y(光标指向DATY)第三段是代码段,(光标指向代码段)步骤2:汇编源程序首先,用cmd命令进入DOS环境;(开始->cmd)然后,路径要切换到MASM所在的盘符D; (D:)接着,进入MASM50文件夹;(cdmasm50)显示文件夹下的内容;(dir/w)汇编程序是MASM.EXE;(光标指向MASM.EXE)链接程序是L1NK.EXE;(光标指向LINK.EXE)源程序是simple.asm;(光标指向simple.asm)下面对源程序simple.asm进行汇编⑴输入masm simple.asm,(输入masm simple.asm)注意一是源文件名不能以数字开头且字 符长度不要超过8个;二是源文件如果不在当前路径下时,要指明其存放路径; 输入好后,回车(回车)(2) 指定目标文件名,直接回车默认是simple.obj,(光标指向simple.obj)这里我们直接回车(回车)(3) 指定源程序列表文件名,直接回千默认是不产生,输入simple,回车(输入simple,回车),过会儿我们可以用记事本查看simple.lst(4) 指定交义索引文件名,交叉索引文件列岀了程序中所定义的所有标识符和标号及具引用 情况输入simple,回车(输入simple,回车)提示31行有错误,未定义标识符CO(光标指向错误处)下而我们要修改源程序,使源程序无语法错课用记事本打开simplc.lst(相应操作)源程序列表列出行号,代码偏移地址,二进制指令码,源代码,(光标指向相应位置) 下面是段名,标识符信息及其属性(光标指向相应位置)在第34行,第35行Z间是错误提示信息,(用拖曳蓝色反标提示信息),发现前面定义了 Con,而这里漏掉了 n,(拖曳蓝色反标Co),我们找到了语法错误(关闭 Simple.lst 窗口)输入 edit simple.asm (输入 edit simple.asm),打开源文件 simple.asm找到错谋行(滚动条下拉),在Co后添加n (添加n)保存文件,(File->Save)退出 edit (exit)重新汇编源程序,(重新汇编源程序,用up键调出以前指令)口J见,无警告无错误,汇编成功(光标指向0 waring Errors和0 severe Errors)□步骤3:链接程序输入 link simple.objC 输入 link simple.obj)指定可执行文件名,岂接回车默认为simple.exe,(总接回车)内存分配文件,直接回车默认不产生,(直接回车)库文件,这里不需要,(直接回车)输入dir/w(输入dir/w)可见产生了 simple.exe,(光标指向simple.exe)步骤4:程序调试前面的汇编和链接程序只能检测语法错误和链接错误,不能检测程序执行的匸确与否,借助 DEBUG工具可以解决这个问题。
输入 debug simple.exe,(输入 debug simple.exe),进入调试 simple.exe 环境,同时打开 simple.lst 文件输入反汇编指令-u,显示主程序起始开始的32个字节,输入-u OOld,从地址ldH开始反汇编,到0026, INT 21H,程序结束(光标指向相应的地 址)设置断点,输入-g 0024,即程序执行到0024H,完成最终结果存入DATY的操作,查看AX内容为0100H,即256,与我们预想的程序结果不符,程序功能有问题我们先退出debug坏境,再进入(输入-q,debug simple.exe)要逐步缩小出错范围,设置断点分段调试将断点设置在OdH (-g 0d)单步执行(-t), DAT1的内容给AL, AL的内容变为01H (光标指向01),单步执行(-t), DAT2的内容给BL, BL的内容变为FFH (光标指向FFH)单步执行(-t) ,(AL)*(BL)结果放入AX中,AX的内容变为00FFH (光标指向00FFH),结 果不正确,应该为FFFFH, EIJ-1,分析原因为应该使用有符号数乘法,但错课使用了无符号 数乘法。
至此,找到了程序功能的错误所在修改 MUL BL 为 IMUL BL(-a 16 IMUL BL)退出debug坏境(・q) 再次调试源程序(debug simple.exe)输入・a 14在地址14H重新输入汇编指令,IMULBL (输入1MULBL),回车后结朿A命令(回车) 输入・g 16, Ax的内容为FFFFH,即・1,因此分析正确打开源文件,修改MUL为IMUL,再次汇编链接源文件 进入调试环境,程序执行到0026H,输入・d 03 0404:03的结果为0000H,这说明程序功能己调试正确。












