实验1 用汇编指令编码和调试
实验任务1
编译
连接
运行
实验任务2
使用d命令访问从fff0:0开始的内存空间,发现生产日期中fff0:00f5 fff0:00fC 中
尝试修改生产日期
发现修改并没有成功,应为该地址属于ROM地址空间,ROM是只读的,不能修改。
实验任务3
修改内容后,屏幕显示了红色的5个❤,因为b800:0属于显存地址空间,但是重新查看该地址空间的数据,并没有改变。
把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。
由上一个实验可以推测出,一个图案的显示由两个字节表示,屏幕中应该会显示出80个爱心,重新查看该地址空间的数据,仍没有改变。
实验任务4
按实验要求输入命令,用t命令单步执行,观察内存数据变化
填空:
问题1:
执行后,栈顶的逻辑地址:0020H:0030H,物理地址 00230H
问题2:
问题3:
执行后,数据没有变化。
问题4:
如果把最后四条指令变换顺序,执行后,数据空间内的数据的顺序发生了变化
实验任务5
写入汇编命令,然后开始调试
问题1:t命令单步执行mov ss,ax 时,指令并没有暂停,会继续执行mov sp,30;SS:SP 从 037F:00FD 变成 0020:0030
问题2:
t命令单步执行
该内存单元值对应了下一条要运行的指令的内存地址
该内存单元记录着指令中的数据
观察ax进栈时,可以看到数据空间中数据的变化,
实验任务6
程序运行结果:
段前缀:前两个字节为CD 20
实验任务7
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,0017h 9 s: mov al,[bx] 10 mov es:[bx],al 11 inc bx 12 loop s 13 14 mov ax,4c00h 15 int 21h 16 17 code ends 18 end
(1)将代码段code的起始地址cs存到段寄存器ds中,填cs
(2)通过反汇编源程序,可知mov ax,4c00h之前的程序占0017H字节。cx为循环次数,inc 指令可使目标操作数+1,所以cx=0017H,即可将mov ax,4c00h之前的程序全部复制到0:200中
复制成功