第三步连接并执行:LINK.EXED:\masm>linksample.objMicrosoft<R>OuerlayLinkerUersion3.60<c)Micr0osoft Corp1983-1987.A1l rightsreserued.CopyrightRun File[SAMPLEEXEJ:可以直接用回车回应List FileNUL.MAPJ:Libraries[.LIBJ:D:\masm>dirWORKVolumeindriueDisVolumeSerial NumberisB887-E15DDirectoryofD:vmasm2006-01-21<DIR>21:2021=202006-01-21<DIR>2005-08-1710:1820.634debug.exe2005-08-1710:1869.886edit.com2005-08-1710:1864.982LINK.EXE2005-08-1710:18103.175MASM.EXE16:572006-02-09607sample.asm17:071582006-02-09SAMPLE.OBJ7792006-02-0917:33SAMPLE.EXE7 File<s)260.221bytes2Dir<s)4.087.414.784freebytesD:\masm>sample执行I3C6D
第三步连接并执行:LINK.EXE 可以直接用回车回应 执行
用DEBUG调试程序:1)用U命令查看程序和自标码及指令地址D:<masm>debugsample.exe-mMOU0C3F:0000B83E0CAX-0C3E8ED8MOUDSAX0C3F:0003LEAS100000C3F:000581360GGMOU0C3F:00098B1CBX[SI]MOUB504CH_04GC3F:GGGBMOUB104CL_04GC3F:GGGDROLBXCLD3C30C3F:000FMOU8AC3ALBL0C3F:0011ANDAL.OF0C3F:0013240F0430ADDAL.30GC3F:GG15CMP3C3A0C3F:0017AL.3A0C3F:00197C02JLG01DADD0407AL-07GC3F:GG1BMOUDL-ALC3F:GG1D8ADGMOUAH_02B4020C3F:001FCD21INT210C3F:0021CHFECDDEC0C3F:002375E6JNZGGOD0C3F:0025MOU0C3F:0027B44CAH_4CCD21INT0C3F=002921偏移段值指令码反汇编的源码
用DEBUG调试程序: 段值 偏移 指令码 反汇编的源码 1)用U命令查看程序和目标码及指令地址
2)用T命令单步跟踪,逐条执行看中间结果,DEBUG将显示每个寄存器以及各标志位的当前值AX=OC3ECX=010BDX=00G0SP=00C8BX=000GBP=OGOSI=OG00DI=GGGDS=0C21ES=0C21SS=0C31CS=0C3FIP=0003NUUPEI PLNZNAPONCMOUDS,AX0C3F:00038ED8标志位tAX=0C3EBX=0000CX=010BDX=0000SP=00C8BP=0000SI=0000DI=0000DS=0C3EES=0C21SS=0C31CS=0C3FIP=0005NUUPEIPLNZNAPONCLEA0C3F:00058D36000ESI.[0000]DS:0000=3C6DtAX=0C3ECX=010BDX=0000SP=00C8BX=000GBP=GGSI=000DI=000EDS=0C3EES=0C21SS=0C31CS=0C3FIP=0009NUUPEI PLNZNAPONOMOU0C3F:0009 8B1CBX,[S]DS:0000=3C6DAX=0C3EBX=3C6DCX=010BDX=0000SP=00C8BP=0000SI=0000DI=0000DS=0C3EES=0C21SS=0C31CS=0C3FIP=000BNUUPEIPLNZNAPO NCMOUCH,040C3F:000BB504这是还未执行的下一条指令这是MOVBX,SI的执行结果
2)用T命令单步跟踪,逐条执行看中间结果,DEBUG 将显示每个寄存器以及各标志位的当前值 这是还未执行的下 这是MOV BX,[SI]的执行结果 一条指令 标志位
3)对于系统功能调用,可以用G命令设置断点执行也可以用P命令跳过过程与系统功能服务程序。-tAX=0C33BX=C6D3CX=0404DX=0000SP=00C8BP=0000SI=0000DI=EGEIP=001DDS=0C3EES=0C21SS=0C31CS=0C3FNUUPEINGNZACPE CYMOU0C3F:001D8AD0DL,AL-tAX=0C33BX=C6D3CX=0404DX=0033SP=00C8BP=0000SI=0000DI=0000DS=0C3EES=0C21SS=0C31CS=0C3FIP=001FNUUPEINGNZACPE CYMOU0C3F:001FB402AH02-tAX=0233BX=C6D3CX=0404DX=0033SP=00C8BP=GGGSI=GOGDI=OGGEDS=0C3EES=0C21SS=0C31CS=0C3FIP=0021NUUPEINGNZACPECY21INT0C3F:0021CD2190023AX=0233RX=C6D3CX=0404DX=0033SP=00C8BP=00G0SI=0000DI=00GGCS=0C3FIP=0023DS-0C3EES-0C21SS=0C31NUUPEINGNZACPE CYDECCH0C3F:0023 FECD设断点执行,因断点设在INT21H的后一句INT21H输出的一个字符
3)对于系统功能调用,可以用G命令设置断点执行, 也可以用P命令跳过过程与系统功能服务程序。 设断点执行,断点设在INT 21H的后一句 INT 21H输出的一个字符
注意:DEBUG只支持16位汇编调试如果要编写32位汇编程序,需要用MASM6.11汇编和连接,用CodeView软件查看执行代码。但MASM6.11中带的CodeView4.01可以查看32位程序的执行代码,不能进行单步调试。要调试可以考虑使用SoftICE软件。另外,VC嵌入汇编可以支持80486的所有指令,也支持32位汇编
注意:DEBUG只支持16位汇编调试, 如果要编写32位汇编程序,需要用 MASM 6.11汇编和连接,用CodeView 软件查看执行代码。但MASM 6.11中 带的CodeView 4.01可以查看32位程序 的执行代码,不能进行单步调试。要调 试可以考虑使用SoftICE软件。 另外,VC嵌入汇编可以支持80486的所 有指令,也支持32位汇编