Windows xp以上版本如何调试汇编代码

首先,你要在网上下载DOS-BOX程序
下载链接:DOS-BOX
其次,你要下载debug
下载链接:debug
提取码:bx0s
如果上面这个debug文件应用起来有问题,可以下载下面这个试一试:
下载链接:debug
提取码: 2bty
然后,要下载nodepad++,做为编写汇编代码的IDE
下载链接:nodepad++

都下载完毕后,你需要新建一个文件夹,专门用来放汇编程序,该文件夹的整个打开路径中不要有中文,不妨就在D盘或E盘下面新建一个名为ASM的文件夹
在这里插入图片描述
然后将DOSBOX文件夹放进来
再把windows debug文件夹里面的所有文件都放进来(其中windows debug文件夹中最重要的是这三个程序:debug.exe、masm.exe、link.exe)
在这里插入图片描述
接下来,进入DOSBox文件夹
在这里插入图片描述
点开那个黄黄的exe文件,你会看到这样的界面
在这里插入图片描述
然后,在进行任何操作之前,你要先要进行挂载操作,就是在那个小屏幕内先输入mount e e:\asm其中第一个e指的是你要在哪个虚拟盘上进行操作,看你心情,26个字母都可以。E:\ASM指的是你存放debug程序的位置,如果你把debug程序放在了别的位置(路径中不能有中文),就要进行相应的动。
mount e e:\asm这句话也可以放在options.bat文件中,这样每次打开DOSBox时就不用都要重写一遍了。
在这里插入图片描述
在这里插入图片描述
然后,你可以进入DOSBox.exe测试一下,先输入e:回车,再输入debug回车,再输入r指令查看一下寄存器当前位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中r指令用来查看寄存器当前状态,在这个控制台下,你也可以用a指令逐条输入汇编指令
在这里插入图片描述
控制台调试短小的汇编程序没有问题,当你需要调试稍长些的汇编代码时,最好还是先将程序代码写好,再编译运行与调试。

这里,就要用到nodepad++了。首先在当前ASM文件夹内为你要编写的汇编程序新建一个文件夹,并不要用中文来命名该文件夹。比如新建一个文件夹“40”。
在这里插入图片描述
当然,管理自己的文件时,最好用有意义的英文单词或短语缩写来进行命名,我这里没有这样做主要原因是。。。唉,英语没学好,编程两行泪啊。。。
点开这个文件夹,新建一个名为“40.asm"的文件:
在这里插入图片描述
(注意,要想更迅捷地使用自己的电脑,应当勾选文件扩展名!)
右键选择用nodepad++打开
在这里插入图片描述
编写完后,要把debug文件夹内的那些文件在放到这个文件夹里面:
在这里插入图片描述
然后再打开DOSBox.exe,输入e:回车(你挂载的那个盘符),再用cd命令进入这个文件夹cd 40回车
在这里插入图片描述
然后用masm命令进行编译,输入masm 40.asm后回车三次
在这里插入图片描述
如果编译没有出错,用link指令进行链接生成可执行文件.exe
输入link 40.obj后回车三次
在这里插入图片描述
然后你可以输入debug 40.exe来进行调试
在这里插入图片描述
在debug模式下,我最常用的有这几个指令:-r显示当前寄存器状态,也就是上面这种
-t单步执行:
在这里插入图片描述
-d 物理地址查看寄存器内部数据
在这里插入图片描述
以及-p指令,遇到循环时可以显示整个循环执行完毕后的结果,-q退出指令
当然,除了debug调试外,你也可以在可执行文件生成后直接输入 程序名.exe 来运行程序,一般只要瞬间回到当前文件夹就说明程序正常运行并正常退出:
在这里插入图片描述
这里给大家附上一段程序,功能是在指定位置用指定颜色显示字符串

;在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
;(cl)=颜色,ds:si指向字符串的首地址
;应用举例:在屏幕的8行3列,用绿色显示data段中的字符串
assume cs:code, ds:data

data segment 
		
		db 'Welcome to masm!', 0
		
data ends

code segment

start:
		mov dh, 8		;(dh)=行号(取值范围0~24)
		mov dl, 3		;(dl)=列号(取值范围0~79)
		mov cl, 2		;(cl)=颜色
		
		mov ax, data
		
		mov ds, ax
		
		mov si, 0
		
		call show_str
		
		mov ax, 4c00H
		
		int 21H
		
show_str:

		push cx
		push si
		
		mov al, 0A0H	;每行有80*2==160个字节==0A0H个字节
		
		dec dh			;行号在显存中从0开始,所以减1
		mul dh			;相当于从第(n-1)*0A0H个Byte单元开始
		
		mov bx, ax		;定位好的位置偏移地址存放在bx里(行)
		
		mov al, 2		;每个字符占两个字节
		mul dl			;定位列,结果ax存放的是定位好的列的位置
		sub ax, 2		;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2
		
		add bx, ax		;此时bx中存放的是行与列号的偏移地址
		
		mov ax, 0B800H	;显存开始的地址
		mov es, ax		;es中存放的是显存的第0页(共0--7页)的起始的段地址
		
		mov di, 0		;di指向显存的偏移地址,确定指向下一个要处理的字符的位置
		
		mov al, cl		;cl是存放颜色的参数,这时候al存放颜色了
		
		mov ch, 0		;下边cx存放的是每次准备处理的字符
					
s:		mov cl, ds:[si]	;ds:[si]指向“Welcome to masm", 0
		
		jcxz ok			;当cl的值为0的时候,cx == 0,则发生跳转,到ok处结束处理
		
		mov es:[bx+di], cl		;偶地址存放字符
		mov es:[bx+di+1], al	;奇地址存放字符的颜色属性
		
		inc si			;指向下个字符
		
		add di, 2		;指向下个字符
		jmp short s		;无条件跳转,jcxz是离开的关键跳转
		
ok:		pop si
		pop cx
		
		ret				;显示字符串的子程序【定义结束】
		
code ends

end start

程序运行结果是这样滴:
在这里插入图片描述
附:本文用到的两个示例程序均来自b站小甲鱼,大家有兴趣可以去听下他的课,讲的很好,也很风趣,由于原本就是免费课程,所以我这里应该也构不成侵犯知识产权吧。。。就当宣传宣传好了…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
××××××××××××××××××××××××××× × 《Windows环境下32位汇编语言程序设计》 × × 附书代码说明 × ××××××××××××××××××××××××××× 1. 编译器和链接器 本附书代码全部采用 MASM 格式编写,推荐使用 MASM32 软 件包作为编译环境,MASM32 软件包可以在以下地址下载: MASM32官方站点: http://www.masm32.com 安装及开发的操作系统建议采用32位的Windows 7,在64位操作系统 上安装 MASM32 软件包,安装生成的Lib文件可能不兼容。 安装完成以后请将本光盘根目录下的环境设置批处理文件Var.bat 拷贝到 Masm32\bin 目录下,并根据 MASM32 的安装位置编辑修改 Var.bat 文件中的相关目录名称。 2. 代码维护工具 每个例子都包括了描述编译、链接方法的 makefile 文件, 使用 nmake 工具可以自动根据此文件进行编译链接,nmake 工 具可以从 Visual C++ 的 bin 目录中找到,也可以从作者的网 站中下载。 3. 编译环境和编译方法 建议使用命令行方式进行编译,以编译 Chapter02\Test 目录中 Test.asm 为例,步骤是: I. 打开一个“命令提示符”窗口。 II. 进入环境设置批处理文件 Var.bat 所在目录并执行 它,以后就可以使用这个“命令提示符”窗口编译 文件了。 x: cd \masm32\bin var III. 进入源代码目录: cd \chapter02\test IV. 使用 nmake 工具进行编译链接: nmake V. 执行编译好的可执行文件。 如果需要对源代码进行修改,不必关闭“命令提示符”窗口, 只要切换到编辑器窗口,在修改 *.asm 文件后重复进行第 IV 和 第 V 步骤即可。 # 特别注意:将光盘中的代码拷贝到硬盘后,必须将文件的只读属性去除! 4. 本光盘所包含目录的说明 根目录下的 *.pdf ;附录A、B、C的电子版文档 Chapter02\Test ;测试编译环境 Chapter03\HelloWorld ;Hello World Chapter04\FirstWindow ;用Win32汇编写第一个窗口 Chapter04\FirstWindow-1 ;用Win32汇编写第一个窗口 Chapter04\SendMessage ;窗口间的消息互发 Chapter04\SendMessage-1 ;窗口间的消息互发 Chapter05\Menu ;使用资源 - 使用菜单 Chapter05\Icon ;使用资源 - 使用图标 Chapter05\Dialog ;使用资源 - 使用对话框 Chapter05\Listbox ;使用资源 - 使用列表框 Chapter05\Control ;使用资源 - 使用子窗口控件 Chapter05\ShowVersionInfo ;使用资源 - 显示版本信息资源的程序 Chapter05\VersionInfo ;使用资源 - 使用版本信息资源 Chapter06\Timer ;定时器的使用 Chapter07\DcCopy ;在两个窗口的 DC 间互相拷贝屏幕 Chapter07\Clock ;模拟时钟程序 Chapter07\BmpClock ;用 Bitmap 图片做背景的模拟时钟程序 Chapter07\TestObject ;一些常见的绘图操作 Chapter08\CommDlg ;使用通用对话框 Chapter09\Toolbar ;使用工具栏 Chapter09\StatusBar ;使用状态栏 Chapter09\Richedit ;使用丰富编辑控件 Chapter09\Wordpad ;一个完整的文本编辑器例子 Chapter09\SubClass ;窗口的子类化例子 Chapter09\SuperClass ;窗口的超类化例子 Chapter10\MemInfo ;显示当前内存的使用情况 Chapter10\FindFile ;全盘查找文件的例子 Chapter10\FormatText ;文件读写例子 Chapter10\FormatText\FileMap ;使用内存映射文件进行文件读写的例子 Chapter10\MMFShare ;使用内存映射文件进行进程间数据共享 Chapter11\Dll\Dll ;最简单的动态链接库例子 - 编写 DLL Chapter11\Dll\MASM Sample ;最简单的动态链接库例子 - 使用 DLL Chapter11\Dll\VC++ Sample ;最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一个存在同步问题的多线程程序 Chapter12\ThreadSyn\UseCriticalSection ;使用临界区对象解决多线程同步问题 Chapter12\ThreadSyn\UseEvent ;使用事件对象解决多线程同步问题 Chapter12\ThreadSyn\UseMutex ;使用互斥对象解决多线程同步问题 Chapter12\ThreadSyn\UseSemaphore ;使用信号灯对象解决多线程同步问题 Chapter13\CmdLine ;使用命令行参数 Chapter13\Process ;创建进程的例子 Chapter13\ProcessList ;显示系统运行的进程列表 Chapter13\Patch1 ;一个内存补丁程序 Chapter13\Patch2 ;一个内存补丁程序 Chapter13\Patch3 ;一个内存补丁程序 Chapter13\HideProcess9x ;Windows 9x下的进程隐藏 Chapter13\RemoteThreadDll ;用 DLL 注入的方法实现远程进程 Chapter13\RemoteThread ;不依靠任何外部文件实现远程进程 Chapter14\TopHandler ;使用筛选器处理异常 Chapter14\SEH01 ;最基本结构化异常处理例子 Chapter14\SEH02 ;改进后的结构化异常处理例子 Chapter14\Unwind ;异常处理中的展开操作例子 Chapter15\Ini ;使用 INI 文件 Chapter15\Reg ;操作注册表的例子 Chapter15\Associate ;操作注册表实现文件关联 Chapter16\TcpEcho ;实现 TCP 服务器端的简单例子 Chapter16\Chat-TCP ;用 TCP 协议实现的聊天室例子 Chapter17\PeInfo ;查看 PE 文件的基本信息 Chapter17\Import ;查看 PE 文件的导入表 Chapter17\Export ;查看 PE 文件的导出表 Chapter17\Resource ;查看 PE 文件的资源列表 Chapter17\Reloc ;查看 PE 文件的重定位信息 Chapter17\NoImport ;不使用导入表调用 API 函数 Chapter17\AddCode ;在 PE 文件上附加可执行代码的例子 Chapter18\OdbcSample ;用ODBC操作数据库的例子 Appendix A\EchoLine ;控制台输入输出的例子 Appendix B\MsgWindow01 ;消息机制试验 1 Appendix B\MsgWindow02 ;消息机制试验 2 Appendix B\MsgWindow03 ;消息机制试验 3 Appendix B\MsgWindow04 ;消息机制试验 4 Appendix C\BrowseFolder ;浏览目录对话框 6. 联系作者 虽然本书中所有的例子代码都已经在32位的Windows 98、Windows 2000、 Windows XPWindows Vista和Windows 7下测试通过,但也有存在Bug的可能,如果 发现代码存在错误或者有其它问题,请告知作者,联系方法: E-mail:[email protected] 感谢您的支持! 作者:罗云彬

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X-jazz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值