汇编实验1
汇编实验1 用机器指令和汇编指令编程(1)
我再也不嫌弃c语言麻烦了噫呜呜噫orz
实验目的
- 掌握使用debug工具编写和调试汇编命令的方法
- 掌握第1-2章所学的关于CPU、寄存器、内存的基础知识
- 掌握第1-2章涉及的几条指令mov, add, sub, jmp的用法
实验准备
- 复习教材第1~2章内容,完成教材内相关检测点
- 结合教材实验1 (P35)及公邮文件中心→实验下的 “实验1辅助文档.pdf”学习debug 工具用法。
实验内容
- 练习教材 P35-45「预备知识:Debug 的使用」,学习 debug 启动、退出及常用指令用法
- 在练习基础上,完成「2. 实验任务」
实验结论
使用debug调试工具
- 32位win7及以下系统
win+R快捷键,输入cmd并回车,进入dos界面,输入debug并回车,进入debug调试环境,以短线为提示符
- 64位win7及以上系统/Mac OS/Linux
使用虚拟dos工具
汇编命令
-
r命令:查看、改变CPU寄存器的内容
-r ;输入后回车,查看所有寄存器的值-r ax ;以ax寄存器为例,输入后回车,查看/修改ax寄存器的值 AX 0000 : ;显示ax的值,若想要修改,在冒号后输入修改后的值并回车;若不想修改,输入回车跳过 -
d命令:查看内存中的内容
-d ;从系统当前的偏移地址开始,显示128个字节内容(显示8行,每行16个字节)-d 0100 ;以偏移地址为0100H为例,从偏移地址开始,显示128个字节内容(显示8行,每行16个字节)-d 0100 0105 ;以0100~0105为例,显示偏移地址从0100H到0105H的内存单元的内容(默认情况下指的是数据段) -
e命令:修改存储单元内容
-e 0100 ;以偏移地址为0100H为例,输入后回车,显示偏移地址0100H处的内容 0B9E:0100 04.90 ;04为该地址处原始值,在.后输入修改后的值90-e 0100 1 2 3 4 5 ;将偏移地址为0100H单元开始的连续五个单元内容改为1 2 3 4 5 -
a命令:输入符号指令
-a ;从当前CS:IP开始,输入符号指令 1000:0000 mov ax,1 ;以CS:IP=1000:0000为例,写入指令-a 1000:0 ;从1000:0开始的内存单元开始写入指令 1000:0000 mov ax,1 -
t命令:单步执行
-t ;从CS:IP指向的指令开始单步执行程序-t=0100 ;以偏移地址为0100为例,从指定的偏移地址处单步执行程序 -
u命令:将指定内存单元内容反汇编成汇编指令
-u 1000:0 ;从指定地址开始反汇编,默认连续反汇编32字节-u 1000:0 8 ;将指定内存地址单元的内容反汇编成机器指令(包括结尾地址)
任务1
-
第一种方式:
进入debug环境,使用a命令写入机器指令
![]()
使用t命令单步执行(在此不全部列出,仅示范说明)

使用d命令查看内存中的命令

-
第二种方式:
使用e命令改写内存中的内容
使用t命令单步执行(在此不全部列出,仅示范说明)
再使用u命令反汇编
![]()
![]()
可以看出两种方式效果相同
任务2
写入三条指令
单步执行,将关键指令add ax,ax执行8次,也就是跳转7次(略去一些单步执行)


ax内存入的100H即为2^8的十六进制形式
任务3
使用d命令查看内存FFF00H~FFFFFH中的内容

可以看到最后一行有日期内容
任务4
从内存地址B810:0000填入指定数据,回车

出现了!小可爱!!!!!
改变地址

发现在不同位置出现了相同的图案
改变内容

发现最后一个图案改变
总结
初步掌握了debug环境的配置以及命令的使用,发现汇编真是太可爱了233333
debug环境不区分大小写
debug环境默认16进制,不需要添加后缀H



浙公网安备 33010602011771号