实验- 用机器指令和汇编指令编程

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

e命令写入0200:0开始的内存单元

 

 修改CS寄存器中的内容为0200,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  内容为:ACAApop ax              sp =  00FE    AX=ACAApop bx              sp =  00FC   BX = A4A2push [4]            sp =    00FE  修改的内存单元的地址是:2200:00FE   内容为:5554push [6]          sp =   00FC   修改的内存单元的地址是: 2200:00FC  内容为:5756

 

内存单元改写:

 

 

 调试开始:

 

 调试过程:

 

 

 

 mov ax,2000:将2000送入寄存器ax中

 

 

五、实验总结

 


学习此应用程序使我获得了汇编语言领域的一些知识,并了解了机器的功能。

学会了dosbox中的debug工具的几个常用指令 实践的知识:8086机的内存空间的划分,内存单元地址的编写,栈的使用 仍未解决的知识:申明栈空间时的存储空间中的一串乱码究竟是何含义?为什么执行mov ss,ax操作时,顺便执行了mov sp10

 

posted @ 2020-10-19 14:47  奥菲  阅读(131)  评论(0)    收藏  举报