实验结论:
实验任务二:
1、查看生产日期
由上图可看出生产日期为92年1月1日。
2、修改生产日期
观察结果可知我们并未成功修改生产日期,原因在于生产日期位于ROM存储器,即只读存储器中,其数据只能被读取而无法被修改。
实验任务三:
1、e命令修改内存单元
2、f命令批量填充内存单元
3、修改内存的数据
4、修改内存地址
综上,我们可以得出以下结论:
(1)b8000~b8f9f 为显存地址空间。
(2)显示时为字型数据,一个字符占两个内存单元,低地址内存单元存放字符的ASCII码,高地址内存单元存放的数据对应字符的颜色。
(3)字符在显示器上显示的位置与偏移地址对应。
为验证结论(3),进行测试
经测试,可以认为结论(3)正确。由此可以发现,在当前环境下,显示内存地址的大小与显示器的尺寸相匹配。
实验任务四:
问题1:逻辑地址:0020H:0030H 物理地址:00230H
问题2:
问题3:
问题4:
实验任务五:
问题1:单步执行完mov ss, ax后,程序并不暂停,而是紧接着执行mov sp, 30。究其原因,在mov ss, ax指令执行后,CPU不响应任何中断,包括单步中断,所以Debug设置好的用来显示寄存器状态和等待输入命令的中断处理程序根本没有得到执行,所以我们看不到预期的结果。CPU接着向下执行后面的指令mov sp, 30,然后响应单步中断,我们才看到正常的结果。
问题2:观察结果可知,CS和IP的值被压入栈中。查询资料得知,t命令是单步中断,CPU会保护现场,即顺序地标志寄存器、CS,IP入栈。
实验任务六:
源码:
1 assume cs:code 2 code segment 3 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 15 code ends 16 end start
编译、连接、运行:
查看程序段前缀PSP:
实验任务七:
完整源码:
1 assume cs:code 2 code segment 3 4 start: 5 mov ax, cs 6 mov ds, ax 7 mov ax, 0020h 8 mov es, ax 9 mov bx, 0 10 mov cx, 0017h 11 s: mov al, [bx] 12 mov es:[bx], al 13 inc bx 14 loop s 15 16 mov ax, 4c00h 17 int 21h 18 19 code ends 20 end start
填写过程:已知程序的功能是自身代码的自我复制,结合已有代码可知,寄存器ds中应存储源始单元的地址,即程序的第一条指令的地址,亦即cx寄存器中的数据,所以第一空填cx。第二空需要填写循环次数,由于程序功能为复制mov ax, 4cooh之前的指令,故循环次数应与相应的代码长度一致。此时有两种方法,第一种是直接人工计算代码长度,第二种是先任意填一循环次数,随后调试时记录代码总长度(cx寄存器中的内容),由此计算出正确的循环次数并重新填写。第一种方法涉及的汇编语言指令长度相关知识可见于总结,在此我选择第二种方法:先令循环长度为0020H,调试发现代码长度为001C,减去mov ax, 4cooh和int 21h两条指令的长度共5个字节,得出正确的循环次数为23次,即0017H,将其填回第二空,源代码正式补充完整。
补充完源代码后调试:
实验总结:
1、存于ROM中的数据只能被读取而无法被使用。
2、当前环境下:
(1)b8000~b8f9f 为显存地址空间。
(2)显示时为字型数据,一个字符占两个内存单元,低地址内存单元存放字符的ASCII码,高地址内存单元存放的数据对应字符的颜色。
(3)字符在显示器上显示的位置与偏移地址对应。
3、Debug的t命令在执行修改寄存器ss的指令时,下一条指令也紧跟着被执行。
4、汇编语言指令长度参考:http://t.zoukankan.com/Java-Starter-p-10981728.html
5、实模式:运行真实的指令;发往内存的地址是真实地址;实模式下的寄存器都是16位的。
保护模式:相比于实模式,将所有通用寄存器扩展到32位;通过映射表、特权级等方式实现了不同任务之间和同一任务内的保护。
长模式:基本与保护模式相同。
参考文章:https://blog.csdn.net/qq_48322523/article/details/119935422?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.highlightwordscore&spm=1001.2101.3001.4242.1