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

使用d命令后发现01/01/92为生产日期

之后使用e命令进行修改之后再使用d命令查看发现无法修改
3.实验任务3:

使用e命令修改之后左上角出现了五个❤图案

使用f命令批量填充单元后在窗体最下方出现了一排的❤图案

使用d命令查看后的结果
4.实验任务4:
填空:2E,2C,2A,28,2A,2C,2E,30
问题1:栈顶的逻辑地址为0020:0030,物理地址为00230H
问题2:

问题3:

数据并无变化

数据变为70 80 50 60 30 40 10 20,因为输出是为一个字,两个两位数。
4.实验任务4:
问题1:

单步执行后发现执行mov ss,ax之后马上执行了下一条指令mov sp,30,并没有马上暂停。
问题2:

执行push[]表示偏移量,执行指令的下一步才能查看到结果,08 01表示当前代码的偏移量,即0108,3F 07表示当前的段地址,即073F。执行完push指令后,栈顶指针向前移动,所以整体移动两个字节
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,汇编、链接,得到可执行文件task6.exe

得到结果

验证可知前两个字节为CD 20

7.实验任务7:
assume cs:code code segment mov ax, 076Ah mov ds, ax mov ax, 0020h mov es, ax mov bx, 0de mov cx, 200 s: mov al, [bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end

将段地址为076A的代码复制到目标内存0:200,所以第一个空为076AH,第二空为200

三、实验总结
通过此次实验,我了解了dosbox的一些基本实践操作,并且利用了dosbox实现了一些书本上的例子。我发现单步执行代码时,关于栈中数据的变化只有在下一步操作时才能观测到。通过动手实践也能加深自己对于汇编语言的认识,与死板的书本只是有着天差地别的认识。a命令用来数写代码 ,g命令用来实现目标地址前一步的代码,t命令逐步实现。
浙公网安备 33010602011771号