因为已知生产日期的储存位置是内存FFF00H~FFFFFH某几个单元,所以从FFF00H查找到FFFFF,查找到生产日期为1992年1月1日。
结论:不能修改。
原因:8086PC机中地址C0000-FFFFF的内存单元是ROM地址空间,ROM为只读内存,不能被改写。
-a mov ax, 20 mov ds, ax mov ss, ax mov sp, 30 push [0] ; 执行后,寄存器(sp) = 2e push [2] ; 执行后,寄存器(sp) = 2c push [4] ; 执行后,寄存器(sp) = 2a push [6] ; 执行后,寄存器(sp) = 28 pop [6] ; 执行后,寄存器(sp) = 2a pop [4] ; 执行后,寄存器(sp) = 2c pop [2] ; 执行后,寄存器(sp) = 2e pop [0] ; 执行后,寄存器(sp) = 30
问题1:题目要求是把00220H ~ 0022fH用作栈空间。指令mov ss, ax 和mov sp, 30执行后,栈顶的逻辑地址和物理地址分别是?
答:逻辑地址为0020:0030H,物理地址为00230H。
问题2:单步调试到汇编指令push [6] 执行结束,pop [6] 执行之前,使用 d 20:20 2f 查看此时栈空间数据,给出实验截图。
答:
问题3:汇编指令 pop [0] 执行结束后,使用d命令 d 20:0 7 查看此 时数据空间内的数据是否有变化。给出实验截图。
答:没有变化
问题4:如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。给出实验截图。
答:有变化
答:没有暂停,后面的指令mov sp,30一起执行。执行mov ss,ax后sp内容已经改变。
答:图中黄色下划线数据是下一步指令所在的地址。CPU在执行完一条指令后,如果检测到标志寄存器的TF位为1,则产生单步中断(中断类型码为1),引发中断过程,执行中断处理程序。中断过程使用当前栈空间存放cpu关键数据,所以栈里面不是我们想要的数据。
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
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
填写依据:
1、cs为代码段的其实地址,将其赋值给ax,ax再赋值给ds作为复制的原地址。
2、总的代码段为001CH字节,而mov ax, 4c00h和int 21h命令占5H字节 ,所以line3-line12 代码段为0017H字节。