第一部分 汇编软件MASM简介
(备注:MASM汇编软件不区分大小写字母)
1.1 MASM简介
汇编就是把汇编语言编写的源代码(扩展名为.asm)翻译成计算机能够识别的二进制语言序列,目前常用的汇编程序是MASM,简称宏汇编程序。宏汇编程序目前有两个版本MASM5.0和MASM6.0
汇编步骤:
第一步:将源程序翻译成等价的二进制语言,形成的文件扩展名为.obj
备注:
用MASM5.0编译时,汇编过程还会产生列表文件(扩展名为.LST),主要用于给出源程序和机器代码程序清单,供查询程序使用;
汇编过程还会产生交叉引用文件(扩展名为.CRF),它是为一个源程序所引用的各种符号进行前后对照的文件,主要用于给出不同文件段中互相引用的全部符号表;
这两个文件是可有可无的,可在汇编过程加以控制。
但是用MASM6.0不会产生这两个文件。

第二步:链接
链接就是把一个或者多个目标文件合并成一个可执行的文件(扩展名为.EXE)
备注:
链接过程还会生出一个扩展名为.MAP的文件,它可以每个段的地址分配情况和长度;在链接的过程中还与一个库文件(扩展名为.LIB)相关。一般的汇编程序不需要库文件,只有与某些高级语言(如C语言)接口时才需要库文件,此时只需要输入库名即可。
第三步:运行
在此过程中,常用的调试工具是DEBUG。

1.2 应用举例
比如下面的程序:
;abcd.asm
data segment
s1 db ‘Hello World’,’$’
data ends
stack segment para stack
db 64 dup(?)
stack ends
code segment
main proc far
assume cs:code, ds:data, ss:stack
start: push ds
mov ax, 0
push ax
mov ax,data
mov ds, ax
mov ax,stack
mov ss,ax
mov ah,09h
mov dx,offset s1
int 21h
ret
main endp
code ends
end start

第一步:汇编
示意图如下:
汇编软件MASM和调试工具DEBUG的使用
第二步:链接
示意图如下:
汇编软件MASM和调试工具DEBUG的使用
第三步:运行
示意图如下:
汇编软件MASM和调试工具DEBUG的使用
第二部分: 调试工具DEBUG的使用
(这里介绍一个常用的DEBUG命令)
2.1 A(汇编命令)
功能:从汇编语言程序创建可以执行的机器码
格式:A address
参数:address制定汇编语言程序的位置,address使用十六进制数,并且不用h结尾。
备注:如果不制定位置,它会从上次停止处得地址开始汇编。
执行效果:
汇编软件MASM和调试工具DEBUG的使用
2.2 C(表命令)
功能:比较内存的两个区域存放的内容
命令格式:C range address
参数:
range:指定第一个待比较的内存起始地址和结束地址
address:指定待比较的第二个内存区域的起始地址
使用举例:
汇编软件MASM和调试工具DEBUG的使用
2.3 D(显示内存名)
格式:D [range]
参数:range 指定显示其内容的内存区域的起始地址和长度,如果不指定range则显示从以前D命令指定的显示地址范围的末尾处开始显示128个字节内容。
使用示例:
汇编软件MASM和调试工具DEBUG的使用

2.4 R(寄存器显示命令)
功能:显示或者改变一个或者多个CPU寄存器的内容
格式:R [register-name]
参数:无
显示所有寄存器的内容,以及寄存器存储区域中的标志。
执行示例:
汇编软件MASM和调试工具DEBUG的使用

参数:[register-name]指定显示值的寄存器名,同可以还可以对值进行修改
汇编软件MASM和调试工具DEBUG的使用

2.5 T(跟踪命令)
功能:执行一条指令,并显示所有寄存器的内容,所有标志的状态和所执行指令的源代码形式。
命令格式:T[=address] [number]
参数:
=address指定DEBUGE启动跟踪指令的地址,如果省略,则跟踪将从当前CS:IP寄存器所指定的地址开始
number:指定要跟踪的指令数,该值为十六进制数,默认值为1
汇编软件MASM和调试工具DEBUG的使用
2.6 G(运行命令)
格式:
G [=address][breakpoints]
参数:
=address:指定当前在内存中药开始执行的内存地址,如果不指定参数,将从CS:IP寄存器中当前地址中开始执行程序。
breakpoints:为G命令设置的临时断点
示例如下:
汇编软件MASM和调试工具DEBUG的使用
2.7 U(反汇编命令)
格式:
U[range]
参数:
range:指定反汇编代码的起始地址和结束地址,或者起始地址和长度
无参数:则从前面U命令所显示地址的后一个地址开始,显示20h个字节内容(默认情况)
汇编软件MASM和调试工具DEBUG的使用
2.8 Q(退出命令)
在DEBUG的提示符下输入Q,将会回到DOS环境下。

汇编软件MASM和调试工具DEBUG的使用相关推荐

  1. debug和汇编编译器masm对指令不同的处理

    debug和汇编编译器masm对指令不同的处理 1.在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用[...]来表示内存单元.如果 在[  ]里用一个常量idata直接给出内存单元的偏移地 ...

  2. 汇编汇编(MASM debug命令)

    汇编汇编(MASM debug命令) 最近学习汇编语言, 在调试时命令总是忘记, 下面整理一下常用的debug命令,供后续查阅. t:执行CS:IP指向的指令,t命令在执行修改寄存器SS的指令时,下一 ...

  3. 读书笔记之《格蠹汇编-软件调试案例集锦》

    最近张银奎大侠出新书<格蠹汇编-软件调试案例集锦> 迫不及待买回来看了下,确实是好书,行如流水,看如小说,有慎怕一下看完了之想,学习之余写下读书笔记便于以后查询. 1.编辑博客时,编辑的内 ...

  4. [置顶]       读书笔记之《格蠹汇编-软件调试案例集锦》

    最近张银奎大侠出新书<格蠹汇编-软件调试案例集锦> 迫不及待买回来看了下,确实是好书,行如流水,看如小说,有慎怕一下看完了之想,学习之余写下读书笔记便于以后查询. 1.编辑博客时,编辑的内 ...

  5. 调试工具DEBUG的使用(8086)

    有关CPU和存储单元的概念在前一节我们已经了解,那么如何观察实际机器内部的情况呢?能不能看到具体的寄存器.标志.存储单元的内容呢?可不可以修改和控制它们呢? DEBUG这个有力工具,就可以深入到机器内 ...

  6. 汇编程序设计入门(安装+debug调试实例)

    汇编程序设计入门(安装+debug调试实例) 一.汇编环境安装 1.安装dosbox https://www.dosbox.com/download.php?main=1 2.下载和安装masm ht ...

  7. 汇编语言入门--调试工具debug的使用(史上最全,11种常见命令)

    汇编语言入门–调试工具debug的使用(史上最全,11种常见命令) 1.直接启动debug程序 详见:https://bingshuai.blog.csdn.net/article/details/1 ...

  8. 汇编中一些常用的debug命令

    汇编中一些常用的debug命令 1.-r 查看.改变寄存器地址 查看 修改寄存器地址(-r命令后加上要修改的寄存器名称,按回车键,在输入要修改的地址) 2.-d 查看内存中的内容 3. -e 改变内存 ...

  9. 关于使用Dosbox时无法使用masm命令和debug的问题

    关于使用Dosbox时无法使用masm命令和debug的问题 本人在2020年5月22日已经崩溃了,于是来这儿写一篇博客 直接正文吧 一般在官网下载的都没有masm.exe和debug.exe,所以我 ...

  10. 汇编软件的安装与实验一

    软件的安装在课程邮箱里有详尽的介绍,但在安装调试的时候还是出了一点小问题,创建虚拟盘符的时候,我将masm文件夹前面套上了一层名为masm文件夹,导致虚拟盘符创建之后无法使用debug. 随后就是实验 ...

最新文章

  1. 博客园网站程序的一个小问题
  2. 论文笔记:Autoregressive Tensor Factorizationfor Spatio-temporal Predictions
  3. ECCV 2018 DSLT:《Deep Regression Tracking with Shrinkage Loss》论文笔记
  4. 一帮一python_[python]L1-030 一帮一 (15分)
  5. 动软代码生成器之模板功能介绍
  6. mysql保存emoji报java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B'
  7. 解决使用jQuery采用append添加的元素事件无效的方法
  8. python入门系列:迭代器和生成器
  9. s7-200plc编程及应用_西门子S7200PLC编程应用15个为什么
  10. 小企业主代理记账基础知识
  11. 【网络流量识别】总结篇1:机器学习方法在网络流量识别的应用
  12. python输入多个数用逗号隔开、计算平均值_python实现输入五个数并求平均值
  13. 大陆身份证号码格式校验
  14. 解决docker容器启动时候无法映射端口的问题
  15. bt面板增加多个站点用同一个IP
  16. 验证本地缓冲区溢出漏洞攻击
  17. c语言int型变量写入char数组的方法
  18. 【Leetcode】825. Friends Of Appropriate Ages
  19. 宿舍怎样推行5s管理制度?
  20. 海量数据处理面试题/大文件问题

热门文章

  1. DataGridView 获取当前行数据
  2. 花音机器人_氧叔在“难红难在哪儿”系列中分析曾黎时提到:
  3. Python爬虫获取租房数据
  4. safari java 插件_精通Safari – 如何在 Mac 版 Safari 中使用互联网插件
  5. Mac OS X Safari 插件存放位置
  6. java设置打印字体大小_PHP调整字体大小打印到网络热敏打印机
  7. Java的位运算符详解实例——与()、非(~)、或(|)、异或(^)
  8. Andriod OpenGL 教程 10 - 3D世界
  9. vue + echarts 实现以中国为中心的世界3D地图
  10. Vue 九宫格抽奖实现