使用masm for windows编译并跟踪调试程序
本文由发表于8年前 | 汇编语言 | 评论数 1 |  被围观 5,621 views+

最新版本的Masm for Windows 集成实验环境 2011支持windows7,支持DOS的16/32位汇编程序和Windows下的32汇编程序。下面是一个简单的程序。

打开masm for windows,新建一个文件,这里写一个最简单的例子:

assume cs:codesg

codesg segment
        mov ax,0101h
        mov bx,0202h
        add ax,bx
        add ax,ax

        mov ax,4c00h
        int 21h
codesg ends

end

保存文件,然后选择菜单的运行-->生成可执行文件EXE
打开masm for windows的debug(运行-->DEBUG调试)
使用下面命令对程序分析:

debug调试
-r
AX=0000  BX=0000  CX=000F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BD8  ES=0BD8  SS=0BE8  CS=0BE8  IP=0000   NV UP EI PL NZ NA PO NC
0BE8:0000 B80101        MOV     AX,0101

发现段地址DS为0BD8,CS为0BE8,因为在程序所在内存区中前256个字节存放的是PSP,DOS用来和程序进行通信。
所以程序的物理地址是SA*16+0+256即:SA+10H:0然后使用u命令查看其他指令:

debug调试
-u
0BE8:0000 B80101        MOV     AX,0101
0BE8:0003 BB0202        MOV     BX,0202
0BE8:0006 03C3          ADD     AX,BX
0BE8:0008 03C0          ADD     AX,AX
0BE8:000A B8004C        MOV     AX,4C00
0BE8:000D CD21          INT     21
0BE8:000F F8            CLC
0BE8:0010 C3            RET
0BE8:0011 53            PUSH    BX
0BE8:0012 51            PUSH    CX
0BE8:0013 3C0D          CMP     AL,0D
0BE8:0015 7429          JZ      0040
0BE8:0017 3C00          CMP     AL,00
0BE8:0019 7425          JZ      0040
0BE8:001B 26            ES:
0BE8:001C 807D0202      CMP     BYTE PTR [DI+02],02

从上面的结果可以看到0BE8:0000~0BE8:000E都是程序的机器码
接下来使用T命令单步跟踪指令,知道跟踪到int21返回程序时,使用P命令执行

debug调试
-t

AX=0101  BX=0000  CX=000F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BD8  ES=0BD8  SS=0BE8  CS=0BE8  IP=0003   NV UP EI PL NZ NA PO NC
0BE8:0003 BB0202        MOV     BX,0202
-t

AX=0101  BX=0202  CX=000F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BD8  ES=0BD8  SS=0BE8  CS=0BE8  IP=0006   NV UP EI PL NZ NA PO NC
0BE8:0006 03C3          ADD     AX,BX
-t

AX=0303  BX=0202  CX=000F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BD8  ES=0BD8  SS=0BE8  CS=0BE8  IP=0008   NV UP EI PL NZ NA PE NC
0BE8:0008 03C0          ADD     AX,AX
-t

AX=0606  BX=0202  CX=000F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BD8  ES=0BD8  SS=0BE8  CS=0BE8  IP=000A   NV UP EI PL NZ NA PE NC
0BE8:000A B8004C        MOV     AX,4C00
-t

AX=4C00  BX=0202  CX=000F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BD8  ES=0BD8  SS=0BE8  CS=0BE8  IP=000D   NV UP EI PL NZ NA PE NC
0BE8:000D CD21          INT     21
-p

Program terminated normally
-

提示程序正常结束,最后使用Q命令退出Debug。

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/using-masm-for-windows-debugger-compile-and-track.html
arthinking 指弹吉他 && 技术 more
分享到:
 
2011 4/14
文章评论
    一条评论
  1. demo 2012年07月04日15:33:10  #-49楼 回复 回复

    汇编是个好东西
    蛮早的时候就想学了,可以一直没有时间静下心来学。
    工作的间隙,来看看吧!

给我留言

有人回复时邮件通知我
汇编语言的相关文章
随机文章 本月热门 热评
1 使用Github和Bitbucket托管项目 Git的全局配置和单个项目的配置 2013/1/11
2 jQuery-Uploadify插件提示$(“#id”).uploadify is not a function错误可能原因 2012/1/11
3 C++语法笔记 – C++简单程序设计 2011/9/3
4 C语言语法笔记 – 指针与数组 一维数组 二维数组 字符数组 二维字符串 指针与一维数组 2011/8/30
5 JavaScript设计模式笔记 – 观察者模式 命令模式 2012/12/27
6 Servlet.service() for servlet jsp threw exception,NullPointerException 2011/7/27
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.