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

实验任务2

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

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

 

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

 

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

 

 3)结论:能否修改,以及分析原因

 结论:通过e命令修改无效。因为这里属于ROM部分,只读区域,写入是无效的。

 

实验任务3

 1)给出在debug中使用e命令修改内存单元的命令,以及效果截图

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

 

 2)在debug中使用f命令批量充填内存单元的命令以及截图

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

 

 3)尝试修改内存单元

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

 

 

实验任务4

 填空

 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__ 

1)问题1:指令mov ss, ax和mov sp, 30执行后,栈顶的逻辑地址和物理地址是?

栈顶的逻辑地址为0020:0030, 物理地址为00230H。

2)问题2:单步调试到汇编指令push [6]执行结束,pop [6]执行之前,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。

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

 

 3)问题3:汇编指令pop [0]执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。

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

 

 4)问题4:

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

 

 

实验任务5

1)问题1:实验t命令单步执行 mov ss, ax 时,是单步执行到这一条指令就暂停了吗?后面的指令mov sp, 30 是什么时候执行的?

单步执行完 mov ss, ax后没有暂停,而是接着执行下一条指令,即 mov sp, 30这一条指令,这是因为原本在第二次t命令之后,cs:ip指向的命令是mov ax,2010,而不是原本的mov sp,30。ss的内容送入之后,sp的内容也立刻被送入。

2)问题2:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。

08 01 为偏移地址。3F 07 为程序段地址,作为暂存地址,在该程序中存在中断机制,需要暂存原程序的入口,故存了下来。

 

实验任务6

1)实验masm、link,汇编、连接,结果如下:

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

 

 2)查看psp

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

 

观察到前两个字节是CD 20 。

 

实验任务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: 
10         mov al, [bx] 
11         mov es:[bx], al 
12         inc bx 
13     loop s 
14     mov ax, 4c00h 
15     int 21h
16 code ends 
17 end

要使代码被复制,则需先将cs放入到ds中,即第一空为cs;第二空位复制字节的循环次数,即为17H。

 2)代码复制成功:

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

 

上一篇:SQL基础-第7章 集合运算


下一篇:Java得到当前的时间并且增加一天或者减少一天