程序员汇编语言

汇编实验一

2018-08-07  本文已影响19人  柠檬就是酸

汇编实验一

实验一主要是学会使用debug的,命令,查看内存状态等。

Mac下虚拟机打不开Windows的debug,便使用dosbox,启动如下: DOS启动.png

(1)题

根据课本的实验要求,输入代码并使用d命令查看内存: 1.png 可以看出来,使用d命令后可以看出来内存的状态,但是,机器码看不懂,再使用u命令,将机器码翻译成汇编命令: 2.png 这就是刚刚自己打的代码了,到此为止,已经向内存中写入了我们想要执行的代码了,接下来就要想办法让它执行,那么怎么执行,就由CS:IP来决定了,查看CPU寄存器并将CS:IP指向073F:0100就好了,先查看CPU寄存器状态: 3.png

运气比较好,直接CS:IP就是正确的,如果CS或者IP不是正确的,就要像上面那样子改变两个寄存器的值,可以看出来,下一条将要执行的命令就是mov ax,4E20,看r命令之后的最后一排,CS:IP的值,机器码,汇编指令全是和前面一一对应正确的。

执行t命令,执行一条机器指令: 4.png

可以看出,AX的值已经改成了4E20,CS段地址不变,IP偏移地址加3,原因是上一条命令占三个字节,执行完成后自动加3,最后一行显示的是下一条要执行的命令。

后面的都类似这样,不停地执行t命令到完就行了。

(2)题

实验要求将命令写入2000:0开始的内存单元,那么就使用a命令开始写,但一定要注意CS:IP的值,很重要。 5.png 很容易看出这是一个死循环,想要让CPU执行它,则要修改CS和IP的值,如上,一直执行t命令,直到算出来2的8次方为止。 6.png

(3)

这个题目是找到PC主板机上的ROM里的生产日期,并试图改变它。 7.png

01/01/92,dosbox很残暴。不管了,现在修改他,先说一下,d fff0:0 ff后面的ff是范围的意思,最后一行,的30H,就是十进制下的48,也就是ASCII码的0,这样就对起来了。

修改如下: 8.png

不顶用!原因想一想是,这个题目说了是修改主板上的ROM,ROM是什么,只可读不可写啊,所以肯定改不成。

(4)

第四题直接修改如下: 9.png

上面出现了笑脸,原因是,这个地址是显存,也就是内容会在显示屏上显示出来。

上一篇下一篇

猜你喜欢

热点阅读