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

一、实验目的
1. 掌握8086CPU、寄存器、内存(包括栈空间)的基础知识
2. 掌握汇编源程序组成与结构
3. 理解和掌握寄存器间接寻址方式[bx]
4. 掌握汇编指令mov, add, sub, jmp, push, pop,loop的用法,理解高级语言的表达和抽象机制
5. 熟练掌握使用debug工具编写和调试x86汇编命令的方法
6. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法
 
二、实验内容
任务1:自行练习,掌握工具用法。
任务2:
查看生产日期:

修改生产日期,修改后再次查看生产日期:

 结论:不能修改,因为我们向地址C0000-FFFFF的内存单元写入数据等于改写只读存储器中的内容。

任务3:

修改内存单元:

 批量填充内存单元:

 

 修改内存单元后的效果,部分红心变为了紫色的菱形:

任务4:

填空:依次为002E、002C、002A、0028、002A、002C、002E、0030

问题1:逻辑地址:0020:30  物理地址:00230

问题2:

 问题3:数据空间内的数据没有发生变化。

 问题4:在改变指令的顺序后,数据空间内的数据发生了变化。

 

 任务5:

 问题1:不是单步执行完这一指令就暂停,后面的指令mov sp, 30立刻被执行。

 问题2:第一处存放下一条指令的地址,第二处表明随着push执行,地址往栈顶偏移。

 

 

任务6:

程序源码:

 编译、连接、运行她是task6.asm,运行结果是0123456789:

 

 查看task6.exe的程序段前缀PSP,前两个字节是CD 20:

任务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

g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间:

 

 

三、实验总结

       通过这次实验,我掌握了debug、masm、link等一些工具的使用;也对一些基本的汇编指令进行了实践,得到了更加深刻的理解;同时理解了寄存器的间接寻址方式以及栈空间的应用;最后我的实践能力也在犯错与纠正的过程中得到了提高。

 

posted @ 2021-10-24 18:19  Dawnmax  阅读(96)  评论(1)    收藏  举报