实验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中

复制成功

 

 

 

 

 

posted @ 2021-10-25 23:34  melons  阅读(97)  评论(4编辑  收藏  举报