实验一查看CPU和内存,用机器指令和汇编指令编程

实验一查看CPU和内存,用机器指令和汇编指令编程

2023年7月3日发(作者:)

实验⼀查看CPU和内存,⽤机器指令和汇编指令编程⼀.实验准备 前⾔:由于⼤家的电脑⼤多使⽤的是64位的操作系统,不能在系统⾃带的MS-DOS环境下编写汇编源程序,所以我们需要DOSBox这个软件,以便在64位环境下编写汇编源程序。下载完成后进⾏挂载,进⼊挂载虚拟盘进⼊debug环境即可

⼆.使⽤debug将书中事例程序段写⼊内存,逐条执⾏,观察每条指令执⾏后CPU相关寄存器中内容的变化 (可⽤E命令和A命令以两种⽅式将指令写⼊内存)1.使⽤e命令将指令机器码写⼊指定1000:0地址的内存2.使⽤u命令进⾏反汇编查看是否与对应的汇编指令相符合经过核对与相应的汇编指令符合3.使⽤t命令单步执⾏ 由于指令⾏数过多,这⾥只列出了部分代码截图。经核对,其符合汇编指令的执⾏第⼀步,将寄存器ax的值设为4e20h第⼆步,将寄存器ax的值加上1416h变为6236h第三步,将寄存器bx的值设为2000h第四步,将寄存器ax的值与bx的值想加并赋给ax......步骤过多就不在此⼀⼀列举了,总之可以发现⽤e指令通过机器码修改内存的内容可以达到汇编指令的作⽤4.使⽤a命令以汇编指令的形式在内存中写⼊机器指令

5.使⽤u反汇编指令检查汇编指令与机器码是否对应可以发现将汇编指令反汇编后的机器码与之前所列机器码⼀致6.使⽤t命令进⾏单步执⾏通过汇编指令与单步执⾏的结果与机器码单步执⾏的结果⼀致三.将下⾯三条指令写⼊从2000:0开始的内存单元中,使⽤下⾯三条指令计算2的8次⽅

1.代码分析---恢复内容结束---实验结论⼀.实验准备 前⾔:由于⼤家的电脑⼤多使⽤的是64位的操作系统,不能在系统⾃带的MS-DOS环境下编写汇编源程序,所以我们需要DOSBox这个软件,以便在64位环境下编写汇编源程序。下载完成后进⾏挂载,进⼊挂载虚拟盘进⼊debug环境即可

⼆.使⽤debug将书中事例程序段写⼊内存,逐条执⾏,观察每条指令执⾏后CPU相关寄存器中内容的变化 (可⽤E命令和A命令以两种⽅式将指令写⼊内存)1.使⽤e命令将指令机器码写⼊指定1000:0地址的内存2.使⽤u命令进⾏反汇编查看是否与对应的汇编指令相符合经过核对与相应的汇编指令符合3.使⽤t命令单步执⾏

由于指令⾏数过多,这⾥只列出了部分代码截图。经核对,其符合汇编指令的执⾏第⼀步,将寄存器ax的值设为4e20h第⼆步,将寄存器ax的值加上1416h变为6236h第三步,将寄存器bx的值设为2000h第四步,将寄存器ax的值与bx的值想加并赋给ax......步骤过多就不在此⼀⼀列举了,总之可以发现⽤e指令通过机器码修改内存的内容可以达到汇编指令的作⽤4.使⽤a命令以汇编指令的形式在内存中写⼊机器指令 5.使⽤u反汇编指令检查汇编指令与机器码是否对应可以发现将汇编指令反汇编后的机器码与之前所列机器码⼀致6.使⽤t命令进⾏单步执⾏通过汇编指令与单步执⾏的结果与机器码单步执⾏的结果⼀致三.将下⾯三条指令写⼊从2000:0开始的内存单元中,使⽤下⾯三条指令计算2的8次⽅ 2000:0 mov ax,12000:3 add ax,ax2000:5 jmp 2000:0003 1.代码分析cs:ip初始指向2000:0mov ax,1;将ax的值设为1add ax,ax:可以看成将ax+ax的值再赋给axjmp 2000:0003;跳转到2000:3的位置,执⾏add ax,ax指令这样就构成了⼀个循环,当ax=100h时即⼗进制的2的8次⽅1 +1=22+2=44+4=88+8=1010+10=2020+20=4040+40=8080+80=100(以上数字均为16进制)100h=16的平⽅=2的⼋次⽅执⾏8个循环后(8x3)所得值为100h(16的平⽅)即为2的⼋次⽅。2.按要求输⼊指令并单步执⾏通过代码实操演练发现与代码分析情况⼀致:(1 +1=22+2=44+4=88+8=1010+10=2020+20=4040+40=8080+80=100(以上数字均为16进制)100h=16的平⽅=2的⼋次⽅执⾏8个循环后(8x3)所得值为100h(16的平⽅)即为2的⼋次⽅。) 三.查看内存中的内容PC机主板上的ROM中写有⼀个⽣⼚⽇期,在内存FFF00H~FFFFFH的某⼏个单元中,请找出到这个⽣存⽇期并试图改变它1.⽤d指令查看内存FFF00H~FFFFFH内容,FFF00H~FFFFFFH为物理地址,CS:IP=FFF0:0 FF显⽰出的左边是每⾏的起始地址,中间是从指定地址开始的128个内存单元内容,⽤⼗六进制的格式输出,右边是每个内存单元中的数据对应的可显⽰的ASCII码字符。可以看到在右下⾓有从FFF0:00F5开始的8个内存单元显⽰为01/01/92,该值便是ROM的⽣⼚⽇期2.利⽤e指令修改从从FFF0:00F5开始的8个内存单元,并再⽤d指令查看修改后的值在修改内存单元内容后发现⽇期并没有被修改,猜测可能与dosbox有关,我们查看的可能是虚拟机的⽇期,需要换成XP系统进⼊debug中进⾏查看 四.向内存从B8100H开始的单元中填写数据,如:e b810:0000 01 01 02 02 03 03 04 04并改变其内容观察现象1.向内存从B8100H开始的单元中填写数据输⼊完成enter后发现屏幕右上⾓显⽰出2.修改内存单元中内容并观察变化这样的图案注:第⼀次我将所有内容都进⾏了修改,发现屏幕上并没有出现任何图案

修改最后⼀个内存单元的内容,出现

这样的图案,与初始图案有所不同修改最后两个内存单元的内容,出现

这样的图案,与前⾯的图案均不同修改最后三个内存单元内容,出现 修改最后四个内存单元内容,出现

通过修改发现,每次内存单元内容的改变都会影响到图案。

五.总结和体会 通过此次实验,我了解学习了Debug程序的主要⽤法,Debug是DOS,Windows都提供的实模式(8086⽅式)程序的调试⼯具,使⽤它的各种指令查看,改变,内存和寄存器中的内容。 深刻的体会到了⽤汇编指令代替机器码的便利性,编程语⾔是计算机发展的必经之路 当然,实验也反映了理论与实践之间的距离,经过已经了解了各种指令的⽤法。但在第⼀题中,使⽤t指令进⾏单步执⾏时,寄存器内容并没有任何改变,原来是忘了t指令的⽤法,没有注意到CS:IP的指向。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688328846a121015.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信