实验1 用机器指令和汇编指令编程

实验1 用机器指令和汇编指令编程


 

1. 教材实验1结论

此部分书写内容:

教材实验1中「2. 实验任务」(P45)


 

实验任务(1)

  机器码数据较多,只用前4行实验即可。

  用t命令和a命令两种方式,写入内存。用t命令单步调试。附上实验截图。

实验任务(2)

  附上a命令写入和t命令单步调试实验截图。对于单步调试较多的部分,只截调试开始,和调试出正确结果的部分即可。

 

实验任务(3)

  附上在debug里实验的截图,并且基于实验结果,作必要的文字说明。

 

 

   说明:通过d命令,找到了位于FFF0:00F0位置的出场日期:1992年1月1日;在尝试使用e命令修改后发现并未成功修改日期,分析原因为日期信息位于内存ROM区,无法对其进行写入修改,故修改无效。

实验任务(4)

  附上在debug里实验的截图,并且基于实验结果,作必要的文字说明

  说明:8086PC机内存中,A0000~BFFFF为显存地址空间,在该区域内写入特定数据会在屏幕对应位置显示图案。

2. 教材实验2结论

此部分书写内容:

教材实验2中「2. 实验任务」(P74)


 

实验任务(1)

  ① 截图记录:使用 e 命令修改 内存单元0022:0~0022:f 中的数据,及修改后查看是否正确写入的操作

   ② 截图记录:使用 a 命令输入的 p74 指令

  ③ 截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏)

  ④ P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式复制在 文档中。 对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。如不一 致,分析原因。

    mov ax,0022

    mov ds,ax

    mov ax,2200
    mov ss,ax
    mov sp,0100


    mov ax, [0]        ;ax=5150
    add ax, [2]        ;ax=A4A2
    mov bx, [4]        ;bx=5554
    add bx, [6]        ;bx=ACAA

    push ax    ;sp=00FE;修改的内存单元的地址是:2200:00FE 内容为:A4A2
    push bx    ;sp=00FC;修改的内存单元的地址是:2200:00FC 内容为:ACAA
    pop ax     ;sp=00FE;    ax=ACAA
    pop bx     ;sp=0010;    bx=A4A2
    push [4]   ;sp=00FE;修改的内存单元的地址是:2200:00FE 内容为:5554
    push [6]   ;sp=00FC;修改的内存单元的地址是:2200:00FC 内容为:5756

    经检验,理论分析与实验结果一致。

实验任务(2)

  ① 截图记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值, 及修改后查看的部分

  ② 单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化,并思考原因。

   原因:观察发现执行mov ss,ax 后,栈顶附近值发生变化,且值与ss,cs,ip等寄存器中值相等。经查阅后得知:执行mov ss,ax 时其后边的指令将立即被执行。至于指令执行后靠近栈顶的10个字节中值立即有了变化,是对定义栈段时部分运行环境变量进行暂存,靠近栈顶的10个字节中的暂存数据分别是SS、IP、 CS 等的值。

  以文字方式陈述:

  ① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?

    第一行:给ax寄存器赋值2000

    第二行:初始化栈基地址为ax中的值

    第三行:初始化栈顶偏移地址为10

    初始栈顶:2000:0010

    初始栈底:2000:000E

  ② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。

    由于mov ss,**指令的特定,执行mov ss,ax 时其后边的指令将立即被执行。至于指令执行后靠近栈顶的10个字节中值立即有了变化,是对定义栈段时部分运行环境变量进行暂存,靠近栈顶的10个字节中的暂存数据分别是SS、IP、 CS 等的值。

posted @ 2020-10-09 17:28  max)  阅读(270)  评论(4编辑  收藏  举报