博客园
虽然痛苦,却依旧要快乐,并相信着未来。

导航

 

( 前期准备)Debug状态

在Windows10 以下Windows系统中,可以按WIN+R(+指同时按两个键),输入cmd进入,输入debug,下一行前出现 -   则进入debug状态。

在Windows10系统下,需要安装DOS模拟器,安装好,创建虚拟盘,再转到虚拟盘,输入debug,出现 -  则进入debug状态。

百度上有详细教程,具体操作不再叙述。

注:以下输入数均为(16进制数)

实验1.1

题目:使用debug,将下面的程序写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。

机器码

汇编指令

b8 20 4e

05 16 14

bb 00 20

01 d8

89 c3

01 d8

b8 1a 00

bb 26 00

00 d8

00 dc

00 c7

b4 00

00 d8

04 9c

mov ax,4E20

add ax,1416

mov bax,2000

add ax, bx

mov bx,ax

add ax,bx

mov ax,001A

mov bx,0026

add al,bl

add ah,bl

add bh,al

mov ah,0

add al,bl

add al,9c

实验过程:

第一次,使用a命令输入汇编指令,没有指定段地址和偏移地址。用t命令执行。

步骤如下图:

 

第一步用mov指令将4E20赋给AX,

第二步用mov指令将2000赋给BX,

第三步用ADD指令将BX加上AX后的值赋给AX,

第四步用第二步用mov指令将BX值赋给AX,

第五步用ADD指令将BX加上AX后的值赋给AX,(8236+8236=1046C,其中1溢出)

第六步用mov指令将001A赋给AX,

第七步用mov指令将0026赋给BX,

第八步用ADD指令将BL加上AL后的值赋给AL,

第九步用ADD指令将BL加上AH后的值赋给AH,

第十步用ADD指令将AL加上BH后的值赋给BH,

(注:AX可以拆成AH和AL,AH是高位,AL是低位,AH、AL是一个字节)

 

 

第十一步用mov指令将00赋给AH,

第十二步用ADD指令将BL加上AL后的值赋给AL,

第十三步用ADD指令将9C加上AL后的值赋给AL。(同上,9C+66=102,一个字八位,其中1溢出)。

 

第二次使用e 指令写入机器码,指定段地址为0,偏移地址为200.

(-e 0:200 <回车> 在冒号前是原来的值,再冒号后输入机器码,就会修改之前的值)

可以用d命令查看(-d 0:200<回车>)

此时需要用t命令执行该命令,一定要将段地址CS,偏移地址IP修改成0:200,否则无法执行该机器码。

执行步骤如下:

  

  实验步骤和上面一样,不再赘述。

  注:t和p指令在大部分情况下可以互换,区别在于:

    单步执行程序时,如果遇到子程序或中断服务程序:

    若使用t命令,则进入子程序或中断服务程序,继续单步执行;

    若使用p命令,则把子程序或中断服务程序当做是一个整体执行。 

 

  我们可以用U命令来反汇编一下。(-u 0:200)

  

 

实验1.2

  题目:使用下面3条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方。

  

mov ax,1
add ax,ax
jmp 2000:3

实验步骤:

  想法:2的8次方,就是1连续乘2乘八次。

  或者说,乘2,就是将两个相同的值相加。

  1+1=2 等价于21

  2+2=4等价于22

  4+4=8等价于23

  以此循环,28就是加八次。

  也就是执行代码行16+1次(赋给AX代码1次,相加代码8次,跳转代码8次)。

  

  28在十六进制下是100。

 

实验1.3

   查看内存中的内容。PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

  

   此处的值修改不了。

  从C0000~FFFFF是各种ROM地址空间,向其写入数据的操作无效。

实验1.4

  题目:向内存从B8100H开始的单元中填写数据。如:

-e B810:01 01 02 02 03 03 04 04

  

  

向地址A0000~BFFFF的内存单元中写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上。

 

总结与体会

  1.在短线与命令之间不能出现空格,否则报错。

  

  2.t=偏移地址 或 p=偏移地址 功能:从指定的偏移地址处单步执行程序。

  所以在使用t或者p命令之前,一定要确定CS和IP指向命令储存地址。

  

posted on 2018-10-24 19:39  砖猿  阅读(299)  评论(1编辑  收藏  举报