实验1 8086汇编指令编码和调试

四、实验结论

2.实验任务2

(1)使用d命令查看生产时期的截图

实验1 8086汇编指令编码和调试

 

(2)使用e命令修改生产日期所在内存单元以及修改后再次使用d命令查看的截图

实验1 8086汇编指令编码和调试

 

(3)结论:不能修改。使用e命令修改生产时期所在的内存单元的操作是无效的,因为这等于改写只读存储器的内容。

 

3.实验任务3

(1)使用e命令修改内存单元的命令:

 

e b800:0 03 04 03 04 03 04 03 04 03 04

 

效果截图:

实验1 8086汇编指令编码和调试

 

(2)使用f命令批量填充内存单元的命令

 

f b800:0f00 0f9f 03 04

 

效果截图:

实验1 8086汇编指令编码和调试

 

(3)修改内存单元和数据的命令如下:

 

e b810:a 04 03 04 03 04 03

 

效果截图:

实验1 8086汇编指令编码和调试

 

4.实验任务4

(1)填空

 

 1 -a
 2 mov ax, 20
 3 mov ds, ax
 4 mov ss, ax
 5 mov sp, 30
 6 push [0] ; 执行后,寄存器(sp) = 002E
 7 push [2] ; 执行后,寄存器(sp) = 002C
 8 push [4] ; 执行后,寄存器(sp) = 002A
 9 push [6] ; 执行后,寄存器(sp) = 0028
10 pop [6] ; 执行后,寄存器(sp) = 002A
11 pop [4] ; 执行后,寄存器(sp) = 002C
12 pop [2] ; 执行后,寄存器(sp) = 002E
13 pop [0] ; 执行后,寄存器(sp) = 0030

 

(2)问题1:

栈顶的逻辑地址:0020:0030

栈顶的物理地址:0020*16+0030=00230h

 

问题2:实验截图如下:

实验1 8086汇编指令编码和调试

 

问题3:没有变化。

实验截图如下:

实验1 8086汇编指令编码和调试

 

问题4:按字来看,数据顺序与原来相反。

实验截图如下:

实验1 8086汇编指令编码和调试

 

5.实验任务5

(1)问题1:使用t命令单步执行mov ss, ax时,单步执行完这一条指令没有暂停。因为Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。所以指令mov sp, 30紧接着上一条指令被执行了。

 

(2)问题2:黄色下划线表示的是CS:IP,在数据进栈的同时,存储的位置也发生了改变。

 

6.实验任务6

(1)程序源码:

 

 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

 

(2)使用masm、link对程序汇编链接过程,以及运行可执行程序task5.exe的运行结果截图:

实验1 8086汇编指令编码和调试

 

(3)在debug中查看task5.exe的程序段前缀PSP的截图:

实验1 8086汇编指令编码和调试

前两个字节是CD 20 。

 

7.实验任务7

(1)补全后的完整源码:

 

 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, 17h
 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 code ends
17 end

 

第一个空填cs

依据:CS:IP指向要执行的指令(即本题中要复制的代码)。

第二个空填17h

依据:task7.asm中line3-line12的代码占据了17h个单元,一开始寄存器CX中存储的是循环的次数。

 

(2)使用g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图:

实验1 8086汇编指令编码和调试

 

五、实验总结

收获:

向 ROM(只读存储器)中写入数据的操作是无效的。

Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

 

尚存的问题:

实验任务5中的问题2,对于存储CS:IP的位置移动的原因尚未清楚。

上一篇:SVN客户端集成到MYECLIPSE10的方法


下一篇:uva 436(floyd变形)