实验1 用汇编指令编码和调试
一、实验目的
1. 掌握8086CPU、寄存器、内存(包括栈空间)的基础知
2. 掌握汇编源程序组成与结构
3. 理解和掌握寄存器间接寻址方式[bx]
4. 掌握汇编指令mov, add, sub, jmp, push, pop,loop的用法,理解高级语言的表达和抽象机制
5. 熟练掌握使用debug工具编写和调试x86汇编命令的方法 6. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法
二、实验内容
实验任务1
略
实验任务2
在debug中,使用d命令查看生产日期
使用e命令修改生产时期所在的内存单元,
修改后,再次使用d命令查看
结论:无法修改, C0000 ~ FFFFF 是 只读存储器,无法用 e命令修改。
实验3
在debug中,使用e命令,向内存单元填写数据。
-e b800:0 03 04 03 04 03 04 03 04 03 04
在debug中,使用f命令,向内存单元批量填写数据。
-f b800:0f00 0f9f 03 04
修改内存单元的数据后,
实验任务4
填空:依次为002E、002C、002A、0028、002A、002C、002E、0030
问题1:指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址:0020:0030 ;物理地址:00230H。
问题2:
问题3:
问题4:
实验任务5
问题1:不是单步执行完这一条指令就暂停,后面的指令 mov sp, 30 随之执行。
问题2:第一处存放下一条指令的地址,第二处表明随着push执行,地址往栈顶偏移。
实验任务6
程序源码:
assume cs:code 2 code segment 3 start: 4 mov cx, 10 5 mov dl, '0' 6 s: mov ah, 2 7 int 21h 8 add dl, 1 9 loop s 10 11 mov ah, 4ch 12 int 21h 13 code ends 14 end start
输出为0123456789
查看task6.exe的程序段前缀,程序前两个字节是为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
三、实验总结
通过这次实验,我掌握了一些基本命令的使用以及debug、masm、link等一些工具的使用;对这些汇编指令编码进行了实践,加深了理解,同时也掌握了寄存器的间接寻址方式以及栈空间的知识。在这次实验中,我的实践能力得到了提升。