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

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命令写入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 13:11  dawei99  阅读(89)  评论(0)    收藏  举报