实验一 用机器指令和汇编指令编程——汇编语言实验


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM