(2) (3) (4) 四、实验结果(遇到的问题及解决方法) 第三条的改变日期没搞懂怎么弄,其余都还好。 开始做第一条的时候忘记了分配ip地址导致没做出来。 五、心得体会 (实验收获) 得多看书上的讲解,理解的把题目做出来。 实验预习20% 实验过程20% 实验结果30% 实验报告30% 成绩 日期
实验名称 实验目的 实验设备 实验日期 实验二 用机器指令和汇编指令编程 掌握DEBUG 的几个补充的命令及其功能。 PC机器一台 一、实验预习训练 1. 预备知识:Debug命令的补充 (1) 在D命令中使用段寄存器 格式:“d 段寄存器:偏移地址”,以段寄存器中的数据为段地址SA,列出从SA:偏移地址开始的内存区间中的数据。以下是4个例子: ① -r ds :1000 -d ds:0 ;查看从1000:0开始的内存区间中的内容 ② -r ds :1000 -d ds:10 18 ;查看1000:10~1000:18中的内容 ③ -d cs:0 ;查看当前代码段中的指令代码 ④ -d ss:0 ;查看当前栈段中的内容 (2) 在E、A、U命令中使用段寄存器 在E、A、U这些可以带有内存单元地址的命令中,也可以同D命令一样,用段寄存器表示内存单元的段地址。以下是3个例子: ① -r ds :1000 -e ds:0 11 22 33 44 55 66 ;在从1000:0开始的内存区间中写入数据 ② -u cs:0 ;以汇编指令的形式,显示当前代码段中的代码,0代码的偏移地址 ③ -r ds (3) 下一条指令执行了吗? 在Debug中,用A命令写一段程序: :1000 -a ds:0 ;以汇编指令的形式,向从1000:0开始的内存单元中写入指令 mov ax,2000 mov ss,ax mov sp,10 ;安排2000:0000~2000:000F 为栈空间,初始化栈顶。 mov ax,3123 push ax mov ax,3366 push ax ;在栈中压入两个数据。 在用T命令单步执行mov ax,2000后,显示出当前CPU各个寄存器的状态和下一步要执行的指令:mov ss,ax;在用T命令单步执行mov ss,ax后,下一条指令应该是mov sp,10,却变成了mov ax,3123? 注意,在用T命令单步执行mov ss,ax 前,ax=0000,ss=0b39,sp=ffee,而执行后 ss=2000,sp=0010。ss变为2000是正常的,这正是mov ss,ax的执行结果。而能够将sp设为0010的只有指令mov sp,10,看来,mov sp,10一定是得到了执行。 在用T命令执行mov ss,ax的时候,它的下一条指令mov sp,10也紧接着执行了。 整理一下我们分析的结果:在用T命令执行mov ss,ax的时候,它的下一条指令mov sp,10也 紧接着执行了。一般情况下,用T命令执行一条指令后,会停止继续执行,显示出当前CPU 各个寄存器的状态和下一步要执行的指令,但T命令执行mov ss,ax的时候,没有做到这一点。 不单是mov ss,ax,对于如:mov ss,bx,mov ss,[0],pop ss等指令都会发生上面的情况,这些指令有哪些共性呢?它们都是修改栈段寄存器SS的指令。
结论:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。 二、实验内容 (1) 使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。 mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] add ax,[2] mov bx,[4] add bx,[6] push ax push bx pop ax pop bx push [4] ;ax= ;ax= ;bx= ;bx= ;sp= ;修改的内存单元的地址是 内容为 ;sp= ;修改的内存单元的地址是 内容为 ;sp= ;ax= ;sp= ;bx= ;sp= ;修改的内存单元的地址是 内容为 push [6] ;sp= ;修改的内存单元的地址是 内容为 (2) 仔细观察下图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变? 用Debug进行实验的示例 实验报告必须包含内容说明: 写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。 三、实验过程(主要步骤、实现代码)