实验1 用机器指令和汇编指令编程

P45实验

任务1

(1)使用E命令修改内存数据并使用反汇编看汇编指令是否匹配

 

 

 (2)使用A命令直接写入汇编指令

 

 

 (3)使用t命令分布执行指令,确保cs存储的就是我们期望的代码段的段地址,ip存储的也是我们期望的开始偏移地址

 

 

任务2:

(1)使用a命令写入3条指令

 

 (2)确保cs存储的就是我们期望的代码段的段地址,ip存储的也是我们期望的开始偏移地址

 

 

 

 

 (3)使用t命令分布执行指令

 

发现因为jmp指令程序陷入了死循环

任务3

(1)使用d命令查看内容,发现从00f5处出现了日期

 

 (2)使用e命令进行修改,发现并没有任何变化,说明该地址内容只能读,不能写

 

任务4:使用e命令写入数据,屏幕上出现了有趣的图案,说明B810:0000开始是显示缓冲区,所以在里面写的数据会被读取并解析成相应的屏幕信息,所以就可以看到屏幕显示东西了

 

 P74实验

任务1

(1)使用e命令修改并查看,发现修改正确

 

 (2)使用a命令输入指令

 

 

 

 (2)修改CS:IP到程序起始处:

 

 (3)使用t指令分布执行

 

 

 

 

 

 

 

 

 

(3) 手推答案对比 

 

任务2

(1) 编写程序段, 并进行一步步调试

 

 

 

 (2)通过对栈数据的观察,我们发现栈还暂存了ax寄存器的数据。通过了解,知道了dos下系统只有一个栈,也就是说,外部操作未设置栈时,系统自己已经有一个栈在做暂存等相关工作了,当外部进行设置时,暂存等工作就发生在新栈中,因此没有进行push前系统已经先用来暂存相关数据了,这就是我们看到数据的原因。

 实验总结

(1)SS和DS不能直接修改,需要通过通用寄存器进行中转

(2)DOS下栈只有一个,它不仅可以push和pop,还可以在执行指令时进行相关寄存器数据暂存。

posted @ 2020-10-18 22:20  ViVoi  阅读(134)  评论(3)    收藏  举报