汇编实验一
实验1 用机器指令和汇编指令编程
1. 教材实验1结论
任务1
用e命令和a命令两种方式,写入内存。用t命令单步调试。
首先使用e命令将指令写入内存,然后用d命令查看对应地址的内容,再使用u命令查看对应的汇编语言。


使用a命令将指令写入内存,接着单步调试
 
 
任务2
利用jmp语句实现循环,通过累加计算2^8。

 
任务3
 
 
使用d命令从起始地址FFF0:0000向后查询ff即256个字节,发现主板日期位于FFF0:00F0位置,为1992年1月1日。使用e命令尝试对其前3个字节进行修改,发现并未成功,分析可知ROM是只读存储器,不能修改其中内容。
任务4


 
在起始地址为B810:0000的内存单元中写入数据会发现出现彩色的图案。修改输入的数据,显示的彩色图案也会随之不同,但是如果修改地址为1000:0000后写入相同数据则不会产生彩色图像。分析后得知,8086PC机内存中,A0000~BFFFF为显存地址空间,只有在该区域内写入特定数据会在屏幕对应位置显示图案。
2. 教材实验2结论
任务1
使用 e 命令修改 内存单元0022:0~0022:f 中的数据50H,51H,52H,53H,54H,55H,56H,57H。

使用 a 命令输入的 p74 指令

每一行指令单步调试

 
 

推测与实验结果一致
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,  [6]   ;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=0010;    bx=A4A2
push [4]     ;sp=00FE;     修改的内存单元的地址是:2200:00FE 内容为:5554
push [6]     ;sp=00FC;     修改的内存单元的地址是:2200:00FC 内容为:5756
分析:段首地址寄存器DS内为0022H,该段前八个字节对应之前写入的50H...57H。栈基址SS=2200H,栈顶初始地址为SP=0100H,弹栈的时候SP+2,入栈的时候sp-2。
任务2
使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值, 及修改后查看的部分

单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化。

 
 
以文字方式陈述:
1.前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?
第一行:给ax寄存器赋值2000
第二行:初始化栈基地址为ax中的值
第三行:初始化栈顶偏移地址为10
初始栈顶:2000:0010
初始栈底:2000:000e
2.基于单步调试观察到的变化,给出你对此的思考及可能原因分析。
由于mov ss,**指令的特定,执行mov ss,ax 时其后边的指令将立即被执行。至于指令执行后靠近栈顶的10个字节中值立即有了变化,是对定义栈段时部分运行环境变量进行暂存,靠近栈顶的10个字节中的暂存数据分别是SS、IP、 CS 等的值。
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号