实验1 8086汇编指令编码和调试

四、实验结论

1、实验任务1

2、实验任务2

  • 使用-d FFF0:0 FF查看生产日期,结果如下图所示。

            由图可以看出生产日期位于FFF0:F5到FFF0:FC单元中。

           

  • 使用e命令尝试修改生产日期并再次使用d命令查看生产日期。

           

  •  结论:e命令无法修改生产日期,原因是生产日期在ROM中,存储权限为只读,无法修改。

 3、实验任务3

  • 使用e命令,向内存单元填写数据。(-e b800:0 03 04 03 04 03 04 03 04 03 04)

           

  • 从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。

           

  • 在debug中,使用f命令,向内存单元批量填写数据。(-f b800:0f00 0f9f 03 04)

           

  •  最后在b800:0单元往后一次输入数据05 06 05 06 05 06 05 06 05 06。结果发现单元中的数据并没有被修改,经过在网上搜索发现这里的数据显示的是屏幕上的内容,屏幕上是什么数据就是什么,所以最开始屏幕上没有东西时,输入数据不仅可以改变单元中的数据  值并且屏幕上也会有所改变。

            

 4、实验任务4

  • 填空
  • -a
    mov ax, 20
    mov ds, ax
    mov ss, ax
    mov sp, 30
    push [0] ; 执行后,寄存器(sp) = 002E
    push [2] ; 执行后,寄存器(sp) = 002C
    push [4] ; 执行后,寄存器(sp) = 002A
    push [6] ; 执行后,寄存器(sp) = 0028
    pop [6] ; 执行后,寄存器(sp) = 002A
    pop [4] ; 执行后,寄存器(sp) = 002C
    pop [2] ; 执行后,寄存器(sp) = 002E
    pop [0] ; 执行后,寄存器(sp) = 0030
  • 回答问题

              问题一:题目要求是把00220H ~ 0022fH用作栈空间。指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址和物理地址分别是?

                  答:逻辑地址为0020:0030,物理地址为00230H。

              问题二:单步调试到汇编指令 push [6] 执行结束, pop [6] 执行之前,使用 d 20:20 2f 查看此 时栈空间数据,给出实验截图。

                  

              问题三:pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。

                  答:没有变化。

                  

               问题四:如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时 数据空间内的数据是否有变化。

                  答:变化了。

                  

 5、实验任务5

  • 问题一:使用t命令单步执行 mov ss, ax 时,是单步执行完这一条指令就暂停了吗?后面的指令 mov sp, 30 是什么时候执行的?

              答:并不是执行完mov ss,ax就暂停了,mov sp,30和mov ss,ax一并执行了。

  • 问题二:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通 过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特 别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。

               答:内存中的黄色部分记录了cs和ip的值。原因是执行完t命令后发生中断,ip和cs便先后入栈。

 6、实验任务6

  • 程序源码
    assume cs:code
    
    code segment
    start:
            mov cx, 10
            mov dl, '0'
        s: mov ah, 2
            int 21h
            add dl, 1
            loop s
    
            mov ah, 4ch
            int 21h
    code ends
    end start

     

  • masm与link对程序汇编链接过程,以及运行程序结果截图。

          masm与link:

           

           结果如下:

           

  •  前缀PSP截图

           

7、实验任务7

  • 补全后代码如下:
    assume cs:code
    code segment
        mov ax, cs
        mov ds, ax
        mov ax, 0020h
        mov es, ax
        mov bx, 0
        mov cx, 17h
    s:  mov al, [bx]
        mov es:[bx], al
        inc bx
        loop s
        mov ax, 4c00h
        int 21h
    code ends
    end

    原因:

              第一个空:将代码段起始地址通过ax赋值给ds。

              第二个空:从第三行到第十二行所需要的空间大小为17H。

  • 在debug中调试,使用g命令将程序执行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命 令对0:200开始的内存单元反汇编,确认是否把task7.asm中line3-line12的代码复制到了目标内存 空间。 给出使用g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图。

           

           可以看出代码复制成功。

 

posted @ 2021-10-25 11:43  GGGGGMT  阅读(75)  评论(3)    收藏  举报