实验任务2
1)给出使用d命令查看生产时期的截图
2)给出使用e命令修改生产日期所在内存单元截图,以及,修改后,再次使用d命令查看的截图
3)结论:能否修改,以及分析原因
结论:通过e命令修改无效。因为这里属于ROM部分,只读区域,写入是无效的。
实验任务3
1)给出在debug中使用e命令修改内存单元的命令,以及效果截图
2)在debug中使用f命令批量充填内存单元的命令以及截图
3)尝试修改内存单元
实验任务4
填空
1 -a 2 mov ax, 20 3 mov ds, ax 4 mov ss, ax 5 mov sp, 30 6 push [0] ; 执行后,寄存器(sp) = __002E__ 7 push [2] ; 执行后,寄存器(sp) = __002C__ 8 push [4] ; 执行后,寄存器(sp) = __002A__ 9 push [6] ; 执行后,寄存器(sp) = __0028__ 10 pop [6] ; 执行后,寄存器(sp) = __002A__ 11 pop [4] ; 执行后,寄存器(sp) = __002C__ 12 pop [2] ; 执行后,寄存器(sp) = __002E__ 13 pop [0] ; 执行后,寄存器(sp) = __0030__
1)问题1:指令mov ss, ax和mov sp, 30执行后,栈顶的逻辑地址和物理地址是?
栈顶的逻辑地址为0020:0030, 物理地址为00230H。
2)问题2:单步调试到汇编指令push [6]执行结束,pop [6]执行之前,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。
3)问题3:汇编指令pop [0]执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。
4)问题4:
实验任务5
1)问题1:实验t命令单步执行 mov ss, ax 时,是单步执行到这一条指令就暂停了吗?后面的指令mov sp, 30 是什么时候执行的?
单步执行完 mov ss, ax后没有暂停,而是接着执行下一条指令,即 mov sp, 30这一条指令,这是因为原本在第二次t命令之后,cs:ip指向的命令是mov ax,2010,而不是原本的mov sp,30。ss的内容送入之后,sp的内容也立刻被送入。
2)问题2:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。
08 01 为偏移地址。3F 07 为程序段地址,作为暂存地址,在该程序中存在中断机制,需要暂存原程序的入口,故存了下来。
实验任务6
1)实验masm、link,汇编、连接,结果如下:
2)查看psp
观察到前两个字节是CD 20 。
实验任务7
1)补全程序:
1 assume cs:code 2 code segment 3 mov ax, __cs___ 4 mov ds, ax 5 mov ax, 0020h 6 mov es, ax 7 mov bx, 0 8 mov cx, __17H___ 9 s: 10 mov al, [bx] 11 mov es:[bx], al 12 inc bx 13 loop s 14 mov ax, 4c00h 15 int 21h 16 code ends 17 end
要使代码被复制,则需先将cs放入到ds中,即第一空为cs;第二空位复制字节的循环次数,即为17H。
2)代码复制成功: