实验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等一些工具的使用;也对一些基本的汇编指令进行了实践,得到了更加深刻的理解;同时理解了寄存器的间接寻址方式以及栈空间的应用;最后我的实践能力也在犯错与纠正的过程中得到了提高。
浙公网安备 33010602011771号