汇编实验一
实验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 等的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫