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

四、实验结论

2.实验任务2

(1)使用d命令查看生产日期,在内存FFFF0H~FFFFFH单元发现生产时期是92年1月1日;

(2)使用e命令修改生产日期所在的内存单元,修改后,再次使用d命令查看,发现生产日期没有变化;

(3)不能修改生产日期,因为在进行实验的电脑上,地址C0000H~FFFFFH的内存单元为只读存储器,写入数据操作是无效的,因此生产日期无法改变。

实验命令及结果截图:

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

 

3.实验任务3

(1)在debug中,使用e命令修改内存单元b8000H~b8009H,

实验命令及效果截图:

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

实验1 8086汇编指令编码和调试(2)在debug中,使用f命令批量填充内存单元b8f00H~b8f9fH,

实验命令及效果截图:

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

(3)使用f命令修改内存单元b8f00H~b8f9fH的数据后,

实验命令及效果截图:

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

 

4.实验任务4

(1)指令mov ss,ax和mov sp,30执行后,栈顶的

  逻辑地址:0020:0030H

  物理地址:00230H

(2)push [6] 指令执行结束后, pop [6] 指令执行结束前,使用d命令 d 20:20 2f 查看此时栈空间的数据:

实验命令及结果截图:

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

(3)pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间的数据发现没有变化

实验命令及结果截图:

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

(4)如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时 数据空间内的数据发现数据空间中的数据发生了变化

实验命令及结果截图:

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

 

5.实验任务5

(1)使用t命令单步执行 mov ss, ax 时,不是单步执行完这一条指令就暂停了,后面的指令 mov sp, 30也紧跟着执行了,由下图的逻辑地址空间的变化可以看出指令的执行:

实验命令及结果截图:

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

(2)实验观察发现在进行入栈操作时,栈空间中的内容发生了改变。

  原因(思考及查阅相关参考资料):因为在debug使用t等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以栈里就会有不是自己操作的数据了。

 

6.实验任务6

(1)

程序源码:

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

 (2)使用masm、link对程序task6依次汇编、链接以及运行:

实验命令及结果截图:

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

(3)在debug中查看task6.exe的程序段前缀(共256个字节),验证前两个字节确实是CD 20:

实验命令及结果截图:

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

 

7.实验任务7

(1)

  第一空填写cs:要完成自身代码的自我复制,首先要找到代码段的起始地址,并将该地址送入ds寄存器中,而cs寄存器存放的就是代码段的段地址,即起始地址,所以这一空处填写cs;

  第二空填写17h:cx用作循环的计数器,本题即要保存代码段的长度,要在debug中反汇编查看mov ax,4c00h前代码段的总长度,查看知,长度为0-16h,即一共17个字节,如下图所示:

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

 因此确定第二空填写17h。

程序源码:

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

(2)使用g命令运行到loop s之后、mov ax,4c00h之前:

实验命令及结果截图:

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

使用u命令反汇编0:200开始的内存单元:

实验命令及结果截图:

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

 由上图可知,已经成功将task7.asm中的line3-line12的代码复制到了目标内存空间。

 

五、实验总结

  (1)加深r、t、g、d、e等命令的功能,提高使用这些命令进行操作时的熟练程度;

  (2)明白栈空间入栈和出栈数据的具体变化情况;

  (3)加深了对一个源程序从写出到执行的具体过程,并可以熟练地完成源程序写出到执行地过程;

  (4)巩固了不同寄存器的作用。

上一篇:实验1 8086汇编指令编码和调试


下一篇:实验1 8086汇编指令编码和调试