汇编实验二

实验任务1


1、ex1.asm的源码如下

 

 2、masmlink工具汇编、链接的命令行截图   

3、查看PSP段前缀所占的265个字节内容

 

 4、对其进行反汇编并使用g命令执行到程序退出之前,观察到显示器上出现彩色图案

 

 

 


 实验任务2 

1、ex2.asm源代码如下

 

 2、编译和连接的步骤,直接运行,屏幕出现彩色图案

 

 3、使用g命令执行到循环前一步,然后使用p命令跳过循环。

 

 4、使用g命令直接执行到程序结束,接着使用p命令,出现程序成功结束提示,且显示彩色图案

 

 5、将CX的值,改为8,发现屏幕上多显示了4个图像

 

分析:ex2.asm和ex1.asm在实现的功能和效果上是完全一致的,只不过ex1.asm是把字节数据逐步写到对应的显存字节地址里,而ex2.asm则是利用了字数据小端存储的原理,借助循环简便而又高效地实现了这一目标。


 实验任务3 

源代码如下

借助bx寄存器存放段的偏移地址,由于存放的是字数据,每次循环bx加2,结果如下

 

把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果。

 

 把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果。 

 经过观察,该字数据高位字节存放的应该是颜色信息,低位字节存放的是字符信息


实验任务4

源程序如下

 

 使用d命令查看内存0:200~0:23f内的地址

 

 

 

选做:栈实现

源代码如下,要注意栈指针初始位置的设置,利用每次push后sp+1来实现读入字数据和字节数据起到相同效果,还有一点就算寄存器ah的初始值要设为3fh,因为栈是自底部高地址向上存放字数据的。

 

 同样使用d命令查看该地址段内的内容

 

 


 实验任务5 

 寄存器cx中存放的是程序的长度,而要把程序段mov ax,4c00h之前复制到0000:0200处首先得把程序存放在cs寄存器中的起始地址通过ax赋值给ds寄存器,

 所以第一空为 mov ax,cs ,然后mov ax,4c00h和int 21h占了5个字,所以cx为cx-5,但是cx的值不知道,于是通过debug命令查询一下cx的初值为001c,所

以第二空 mov cx,0017 ,显示如下

 

posted @   rockdow  阅读(92)  评论(3编辑  收藏  举报
编辑推荐:
· .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 进行网页爬虫
点击右上角即可分享
微信分享提示