实验1 查看CPU和内存,用机器指令和汇编指令编程:
准备工作:
我的笔记本是64位的windows系统,并不可直接进入debug程序,需要先下载dosbox和debug的环境
进入调试因为装在d:\masm
我创建了D盘为驱动器,D:\masm为挂载驱动器的目录
之后在进入D盘,输入debug就进入程序了。
(R命令查看,改变CPU寄存器的内容;
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器命令;
A命令以汇编指令的格式在内存中写入一条机器指令;)
那我们开始动手吧,利用任务来熟悉debug的指令功能!
实验任务:
(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令
执行之后CPU中相关寄存器中内容的变化。
可以用E指令和A指令两种方法写入内存:
a指令写入汇编指令:
用d指令查看:
用e指令写入机器码:
死机了。。换个地址再试试:
问题不大,但是不太清楚为什么地址不可以从0:0开始,还有这个图
和上图又点和顿号的区别:
再看0:200
这就一样了==???
使用U命令查看机器指令:
用T命令执行,看CS:IP的指向:
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add,ax,ax
jmp 2000:0003
起初ax=1,add之后ax=2,jmp跳转之后ax=2*2;
2的8次方的话就需要jmp7次,还需要用r指令改变cs:ip的指向,如图:
正符合答案100.也就是说一轮mov和add需要2次t指令,而jmp只是修改cs:ip的指向
并没有机器指令不需要t指令,计算2的8次方的话是需要16次t指令的。
(3)查看内存中的内容:再内存fff00H~fffffH的某几个单元中找到生产日期并试图改变它。
使用d命令查看FFF0:0000内存中的内容,得到生产日期为01/01/92
然后用e命令更改FFF0:00F0中的内容:
并没有能改变时间==难到我没又权限改?试了其他数据也不行,经提醒,我们向地址c0000~FFFFF写入数据的操作是无效的,
这等于改写只读存储器的内容。
(4)向内存从B8100H开始的单元填写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
先填写不同的数据,然后再改变地址。
这就是因为CPU有分为显卡的地址空间和其他==
总结:第一次做汇编的实验嘛,前面也没有很好的听老师讲,有点模糊,不过现在经过
总结操作之后,明白了很多汇编上的知识。