使用masm for windows编译并跟踪调试程序
本文由发表于7年前 | 汇编语言 | 评论数 1 |  被围观 7,311 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 Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 4/14
文章评论
    一条评论
  1. demo 2012年07月04日15:33:10  #-49楼 回复 回复

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

给我留言

有人回复时邮件通知我
汇编语言的相关文章
随机文章 本月热门 热评
1 使用masm for windows编译并跟踪调试程序 2011/4/14
2 Android下载文件到SD卡 2011/7/12
3 AtomicInteger的介绍和使用 2012/7/30
4 C语言语法笔记 – 自定义函数的相关知识 变量的存储类型 2011/8/30
5 使用WP-PostViews插件统计不了浏览量的问题 2012/4/9
6 使用ItzDesktop创建Web桌面简单教程 2012/6/10
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

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

联系我们:admin@itzhai.com

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