实验1

                       实验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有分为显卡的地址空间和其他==

总结:第一次做汇编的实验嘛,前面也没有很好的听老师讲,有点模糊,不过现在经过

总结操作之后,明白了很多汇编上的知识。

 

posted on 2018-10-28 20:31  柯朵莉  阅读(232)  评论(6编辑  收藏  举报