汇编语言实验一

实验之前的一些总结:

  • 命令r——查看,修改寄存器的内容

    -r     (查看所有寄存器的内容)

    -r ax   (查看或修改某一个寄存器的内容)

  • 命令d——查看内存中的内容

    -d     (从当前的ds和ip所指向的地址开始,连续查看128个字节的内容)

    -d 0:200    (从给定的地址开始连续查看128个字节的内容)

    -d 0:200 204  (从给定地址到204为止连续查看内容)

    -d 0:200 l5   (从给定地址连续查看5个字节的内容)

  • 命令e——改写内存中的内容

    -e 0:200 33 34 35 36 37   (从给定地址连续修改)

    -e 0:200 <enter>        (按空格则继续修改,按回车则停止)

  • 命令a——向内存写入汇编指令

    -a   (默认从当前cs和ip开始写入)

    -a 0:200  (指定地址写入指令)

  • 命令g——一次性执行写入的汇编指令

    -g 0107  (从当前cs和ip开始执行到某一地址为止一次性执行,不包括这一地址)

    -g 0:200 0:208  (当用a指定地址写入指令时,g也要指定地址一次性执行,此时g从0:200到0:207执行)

  • 命令t——一次执行一条汇编指令

    -t  (从当前cs和ip开始执行一条指令)

    -t=0:200  (从指定地址开始执行一条指令)(注意等号)

  • 命令u——将内存中的机器指令翻译成汇编指令

    -u  (从当前cs和ip连续反汇编32个字节)

    -u 0:200 l5 (从指定地址开始连续反汇编5个字节)

    -u 0:200 208 (与g指令类似,但写法不同)

实验开始:

  •  程序段的输入和执行

(1)先用e命令将机器码写入内存:

再用u反汇编确认指令已写入内存中:

(2)用a命令将汇编指令写入内存:

再用e命令查看机器码,而确认指令已写入内存中:

(3)用t命令逐条执行指令:

   

 

小结:

    当我们指定地址进行汇编指令的输入时,一定要注意使用带参数的t命令,或者将当前cs和ip的值改变为我们指定的地址,这样才能正确执行我们写入的指令。

  • 将指令写入指定的内存单元,利用指令求2的8次方

(1)利用a命令写入指令:

(2)用t命令逐条执行(注意:保存在寄存器中的值为16进制,当ax的值为100时,即为十进制中的2的8次方,也就是256)

:

:

: (省略中间执行的过程)

 

小结:

    注意我们用a命令将指令写入从2000:0开始的内存单元中,则在第一次使用t命令时要带参数,即从指定地址开始执行指令,或者改变当前cs和ip的值;记住寄存器中存的数据是十六进制的。

  • 查看内存中的内容

(1)用d命令查看内存FFF00H~FFFFFH中的内容:

(2)我将试图用e命令修改上面显示的日期:01/01/92

(结果我失败了)

小结:

    这段内存是属于ROM的,因为ROM是只读存储器,即只能读取,不能写入,所以我尝试向其写入数据的做法是无效的,也就是我改日期而失败的原因。

  • 向内存B8100H开始的单元中填写数据

 (1)在此地址上填写数据:

换一种方法填写:

(2)改变地址填写数据:

小结:

地址8000H~9FFFH的空间为显存地址空间,即我们向这些地址写入数据,则这些数据会被写入显存中,然后会被显卡输出到显示器上,则呈现了四个多彩的图案。

实验体会:

  •  通过本次实验,我熟悉了debug命令的使用,可以向内存输入小程序而运行;
  • 在第三个小实验中,一开始看到我的PC主板上的ROM的生产日期居然是92年1月1日,惊了一下,后来上网查了一下,发现很多人都跟我一样。其实我们下载的dosbox读取的是虚拟主板的信息,这里显示的日期并不是实际的生产日期(庆幸,我的电脑不是翻新机)。
  • 我对第四个小实验很感兴趣,于是向这段地址,写入了其他的数据,于是有了这样的图案:

  

(下次想要在显示器上显示出男女的符号表示,就知道可以向显存地址空间写入0B 0B 0C 0C)

 

posted @ 2018-10-24 20:22  Cyiii  阅读(743)  评论(3编辑  收藏  举报