1.实验环境
{win20 ,dosbox,debug}
2.实验任务
(1) 在debug中使用“A 段地址:偏移地址”的方式将下面代码写入内存中,执行观察寄存器变化
[Asm] 纯文本查看 复制代码 ;截取部分代码熟悉实验工具
mov ax, 4E20H
add ax, 1416H
mov bx, 2000H
add ax, bx
mov bx, ax
add ax, bx
单步执行可以看出数据发生了溢出
输入指令
(2)利用以下指令计算2的8次方
[Asm] 纯文本查看 复制代码 mov ax, 1
add ax, ax
jump 2000:0003
[分析]:要计算2的8次方,就是要执行8次“add ax, ax”,也就是这句指令要放在2000:0003, 也是就第一句指令要放在2000:0000.实验结果如下
最后AX中的0040H也就是2^8啦
[小细节] 实际上对第三条指令取指到执行完成,IP的值经历两次变化
1.IP += GetBytes(jump 2000:0003)
2.IP = 0003e
(3) PC机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,定位生产日期并将其改变
如图所示,很容易发现生产日期“01/01/92”存储在FFFF5H-FFFFCH这8个字节中,尝试将其修改为国庆日“01/10/49”,发现不行。
再尝试,还是不行。想一下...这个日期数据存在ROM中只读!
(4) 想内存B8100H开始的单元中填写如下数据
发现屏幕上输出了几个小图标, 查ASCII表不难发现这几个图标的的十六进制形式正是01 02 03 04
接下来问题来了,剩下的一组01 02 03 04是干嘛的?
.
..
...
....
.....
大胆猜测:后一组01 02 03 04 分别表示深蓝色、绿色、淡蓝色、红色
小心验证:控制变量法。将第二个‘01’改成‘04’,观察笑脸是否会变红(果不其然.....)
最后,看了一下8086PC机的内存地址分配,很好地解释了后两个实验结果
|