1.教材实验一结论
(1)将下面的程序段分别用e命令和a命令两种方式写入内存
b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax 01 d8 add ax,bx b8 1a 00 mov ax,001AH bb 26 00 mov bx,0026H 00 d8 add al,bl 00 dc add ah,bl 00 c7 add bh,al b4 00 mov ah,0 00 d8 ad al,bl 04 9c add al,9CH
e命令写入0100:0开始的内存单元,并用u命令查看
或者使用a命令写入0100:0开始的内存单元
修改CS寄存器中的内容为0100,IP寄存器中的内容为0000后,使用t命令,逐条执行这个程序段
可以发现AX,BX中的内容随着指令中的执行而改变,IP寄存器中的内容在执行完一个指令后,会自动指向下一条指令的地址
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方
mov ax,1 add ax,ax jmp 2000:0003
接下来用t命令执行这个程序段
调试开始(ax起初是0):
调试结束(ax最后为8):
(3)查看内存中的内容
从FFF00H~FFFFFH中找到生产日期,并试图改变它
找到类似生产日期的位置在FFF0:00F5至FFF0:00FC内存单元中
试将其值修改为09/10/20
可见修改值的操作无效,因为向地址C0000~FFFFF的内存单元中写入数据是无效的,因为它是一个只读存储器ROM
(4)向内存从B8100H开始的单元中填写数据
可以看到向B8100开始的内存单元中修改数据,会显示出一些彩色的图标,这是因为A0000~BFFFF在8086PC机内是显存地址空间
2.教材实验二结论
(1)使用debug将下面的程序段写入内存,逐条执行
mov ax,0022 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ax= 5150 add ax,[2] ax = A4A2 mov bx,[4] bx= 5554 add bx,[8] bx = ACAA push ax sp = 00FE 修改的内存单元的地址是: 2200:00FE 内容为:A4A2 push bx sp = 00FC 修改的内存单元的地址是: 2200:00FC 内容为:ACAA
pop ax sp = 00FE AX=ACAA
pop bx sp = 00FC BX = A4A2
push [4] sp = 00FE 修改的内存单元的地址是:2200:00FE 内容为:5554
push [6] sp = 00FC 修改的内存单元的地址是: 2200:00FC 内容为:5756
a指令书写程序:
内存单元改写:
调试开始:
调试过程:
调试结束:
(2)运行以下程序,并分析为什么2000:0~2000:f中的内容会发生改变
修改2000中的内容
mov ax,2000:将2000送入寄存器ax中
mov ss,ax mov sp,10:将ax中的值作为栈的段地址,并将sp中的值设置为10,内存单元中值的变化可能是为了标识这个空间是一个栈
mov ax,3123:将3123送入寄存器中
push ax:将ax中的内容压入栈
mov ax,3366:将3366送入ax中
push ax:将ax中的值压入栈
前三行汇编语言指令的意思是:设置栈的起始地址为2200:0,并设置栈的大小为10
五、实验总结
学会了dosbox中的debug工具的几个常用指令
实践的知识:8086机的内存空间的划分,内存单元地址的编写,栈的使用
仍未解决的知识:申明栈空间时的存储空间中的一串乱码究竟是何含义?为什么执行mov ss,ax操作时,顺便执行了mov sp,10