实验任务2
结论:不能修改
原因:8086PC机中地址C0000-FFFFF的内存单元是各类ROM地址空间,因此向地址C0000-FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。
实验任务3
实验任务4
- 填空
push [0] (sp)= 002E
push [2] (sp)= 002C
push [4] (sp)= 002A
push [6] (sp)= 0028
pop [6] (sp)= 002A
pop [4] (sp)= 002C
pop [2] (sp)= 002E
pop [0] (sp)= 0030
- 回答问题
1、逻辑地址:0020H:0030H ; 物理地址:00230H
2、
3、
数据空间内的数据没有变化
4、
数据空间内的数据发生变化
实验任务5
1、在用 t 命令执行mov ss, ax的时候,单步执行完并没有暂停,而是紧接着执行它的下一条指令mov sp, 30,这两条指令都执行完才暂停执行。
2、073F:0108 原因:在用 t 命令执行完073F:0103地址处的指令mov ss, ax的时候,紧接着又执行了下一条指令---073F:0105地址处的指令mov sp, 30,而下一条指令的地址为073F:0108。
栈中数据发生变化原因:因为在debug使用 t 等指令时引发了中断,中断过程使用当前栈空间存放cpu关键数据,所以,栈中有些数据改变了。
实验任务6
1 assume cs:code 2 3 code segment 4 start: 5 mov cx, 10 6 mov dl, \'0\' 7 s: mov ah, 2 8 int 21h 9 add dl, 1 10 loop s 11 12 mov ah, 4ch 13 int 21h 14 code ends 15 end start
实验任务7
1 ;完成自身代码的自我复制:把 mov ax, 4c00h 之前的指令复制到内存0:200开始的连续的内存单元。 2 assume cs:code 3 code segment 4 mov ax, cs 5 mov ds, ax 6 mov ax, 0020h 7 mov es, ax 8 mov bx, 0 9 mov cx, 17h 10 s: mov al, [bx] 11 mov es:[bx], al 12 inc bx 13 loop s 14 15 mov ax, 4c00h 16 int 21h 17 code ends 18 end
第一空:CS保存程序的代码段的段基址,因此将CS中的值通过ax赋给ds
第二空:cx控制循环次数,因此只要得到mov ax, 4c00h 之前的指令的长度即可
显而易见,mov ax, 4c00h 之前的指令长度为17h字节,因此 (cx) = 17H
g命令:
反汇编:
实验总结