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

实验结论

2.实验任务2

使用d命令查看生产时期的截图,时间为01/01/92:

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

结论:不能修改

 原因分析:地址A000H~FFFFH的24KB空间为各个ROM的地址空间,ROM为只读存储器,我们对只读存储器进行写入,改写操作都是无效的。

3.实验任务3

在debug中使用e命令修改内存单元的命令,及,效果截图:

在debug中使用f命令批量填充内存单元的命令,及,效果截图:

 改变数据后的截图

4.实验任务4

 -a

mov ax, 20

mov ds, ax

mov ss, ax

mov sp, 30

push [0]    ;执行后,寄存器(sp) = _2E___

push [2]    ;执行后,寄存器(sp) = _2C___

push [4]    ;执行后,寄存器(sp) = _2A___

push [6]    ;执行后,寄存器(sp) = _28___

pop [6]     ;执行后,寄存器(sp) = __2A__

pop [4]     ;执行后,寄存器(sp) = __2C__

pop [2]     ;执行后,寄存器(sp) = _2E___

pop [0]     ; 执行后,寄存器(sp) = _30___

 问题1:题目要求是把00220H ~ 0022fH用作栈空间。指令mov ss, ax和mov sp, 30执行后,栈顶的逻辑地址和物理地址分别是?

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

问题2:单步调试到汇编指令push [6]执行结束,pop [6]执行之前,使用d 20:20 2f查看此时栈空间数据,给出实验截图。

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

 答:没有变化。

问题4:如果把最后四条指令改成截图中的顺序,pop [6]指令执行结束后,使用d命令d 20:0 7查看此时数据空间内的数据是否有变化。给出实验截图。

 答:有变化。因为出栈顺序与入栈顺序不同,故数据发生了变化。

5.实验任务5

 观察并思考:

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

答:没有暂停,单步执行mov ss, ax时,同时执行了mov sp,30这条指令。

mov sp,30在执行mov ss, ax时同时执行了。

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

答:黄色下划线是下一条命令的逻辑地址,debug使用t指令引发了中断,中断过程使用了当前栈空间存放cpu关键数据。

6.实验任务6

 程序源码:

assume cs:code
code segment
start:
       mov cx,10
       mov dl,'0'
s:     mov ah,2
       int 21h
       add dl,1
       loop s
       mov ah,4ch
       int 21h
code ends
end start

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

 

 在debug中查看task6.exe的程序段前缀PSP的截图:

 证明前两个字节是CD 20。

7.实验任务7

(1)

 mov ax,cs

要复制的开头是程序开头,即需要指向程序段开头。

mov cx,23

到loop s一共23字节,刚好复制完成。

assume cs:code
code segment
        mov ax,cs
        mov ds,ax
        mov ax,0020h
        mov es,ax
        mov bx,0
        mov cx,23
s:     mov al,[bx]
       mov es:[bx],al
       inc bx
       loop s
       mov ax,4c00h
       int 21h
code ends
end

(2)

 

 答:确认把task7.asm中line3-line12的代码复制到了目标内存空间。

实验总结

1. 修改的内存空间需要注意,0~7FFFH为主随机存储器的地址空间,这部分可以修改,不过没有输出。8000H~9FFFH为显存地址空间,即放置其中的数据会有输出的显示,实验任务3正是证明了这一点。而A000H~FFFH为ROM地址空间,只读,对其进行修改操作无效。

2.对于显存空间的数据不显示时,可以通过cls清屏命令清屏后让其显示出来。

posted @ 2021-10-22 16:01  Exia#  阅读(119)  评论(3)    收藏  举报