汇编实验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