汇编语言作业(五)

目录

一、实验目的

二、实验内容

三、实验步骤以及结果

四、实验结果与分析

[五、 实验总结](#五、 实验总结)


一、实验目的

1. 熟悉掌握汇编语言的程序结构,能正确书写数据段、代码段等

2 ,利用debug功能,查看寄存器(CS,IP,AX,DS..)及数据段的内容变化,熟悉并了解程序调试方法,并认真观察、判断每条指令执行的结果是否正确。

3. 熟悉各种寻址方式的使用

二、实验内容

  1. 数据段定义如下图所示,要求将block的第6个字送到DX寄存器中,至少使用以下三种寻址方式:


1 )寄存器间接寻址
2) 寄存器相对寻址
3) 基质变址寻址

观察数据段,给出三种不同寻址方式指令,验证执行后DX寄存器的值为多少,是否都一样。

提示:可以利用lea 指令 或 offset 操作符获取符号地址

2. 在DS数据段中定义两个字节符号valuex和valuey,并给出初始值如下,要求编写汇编指令交换这两个地址存放的数据,在实验报告中给出相关指令,观察寄存器及数据段的变换情况,并记录下来 (参考课本例3.4),思考:如果要读取附加段中的数据,该如何实现?

3. 编写一个汇编程序(ex4_3.asm),在数据表DATA1中存放数据0F895H,在数据表DATA2中存放数据3E0CH,要求将两数分别取出相加,然后将计算结果存放到当前数据段,偏移地址为0020H的单元中。给出程序片段(关键部分的源码)和运行结果截图。

即计算 0F895H+3E0CH ,并将结果存放到 DS:2800H位置,利用debug命令,观察是否将数据正确写入。
提示:使用ADD加法指令

三、实验步骤以及结果

问题1、

1 )寄存器间接寻址

2 )寄存器相对寻址

3 )基址变址寻址

DX 寄存器的值为1586h,三种方案结果是一样的。

三种方案的关键代码如下:

问题2、

在DS数据段中定义两个字节符号valuex和valuey,并给出初始值如下,要求编写汇编指令交换这两个地址存放的数据,在实验报告中给出相关指令,观察寄存器及数据段的变换情况,并记录下来 (参考课本例3.4),思考:如果要读取附加段中的数据,该如何实现?

核心代码如下:

由下图可知,valuex的地址为DS:0008,valuey的地址为DS:0009,所以要调用d命令找DS:0008所在内存空间的数值。

注意:DS不是默认的073F,而是076A,所以要先调用r命令明确DS到底是什么。再调用-d 076a:0008,可见,DS:0008被修改为25,DS:0009被修改为24。

思考:如果要读取附加段中的数据,该如何实现?

    1. 将附加段的地址加载到ES寄存器中。
    2. 使用ES前缀和偏移量来访问附加段的数据。

也可以用debug命令直接读取。

问题3、

编写一个汇编程序(ex4_3.asm),在数据表DATA1中存放数据0F895H,在数据表DATA2中存放数据3E0CH,要求将两数分别取出相加,然后将计算结果存放到当前数据段,偏移地址为0020H的单元中。给出程序片段(关键部分的源码)和运行结果截图。

即计算 0F895H+3E0CH ,并将结果存放到 DS:2800H位置,利用debug命令,观察是否将数据正确写入。
提示:使用ADD加法指令。

关键代码:

运行结果:

四、实验结果与分析

详见第三部分。

补充问题1、

特别提醒debug的方法。

首先,不能只输入debug,要用debug+.exe文件。此时才不是全局的debug环境,而是程序的debug环境。

其次,一开始调用r命令是程序还未调用时的寄存器的值。

要调用t命令让程序运行。若是t命令太多,可以如下操作,减少t命令次数。

五、 实验总结

1 、既定目标基本实现。

2 、之前只会全局的debug,所以上机课第一题就浪费了大量的时间,可惜。

相关推荐
代码改变世界ctw19 小时前
ARM汇编编程(AArch64架构)课程 - 第5章函数调用规范
汇编·arm开发·架构
liulilittle1 天前
C/C++ inline-hook(x86)高级函数内联钩子
c语言·开发语言·汇编·c++·hook·底层·钩子
代码改变世界ctw1 天前
ARM汇编编程(AArch64架构)课程 - 第8章:控制流与循环
汇编·arm开发
Jacen.L1 天前
【汇编逆向系列】九、函数传参之结构体 - SHL、SHR指令,小型结构体参数和返回值
汇编
2401_861615282 天前
跨平台的ARM 和 x86 Docker 镜像:汇编语言实验环境搭建
linux·汇编·ubuntu·docker·容器
大P哥阿豪2 天前
Go defer(二):从汇编的角度理解延迟调用的实现
开发语言·汇编·后端·golang
花小璇学linux2 天前
imx6ull-裸机学习实验1——汇编LED灯实验
linux·汇编·imx6ull·arm裸机开发
无小道3 天前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
liulilittle4 天前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
工业互联网专业4 天前
汇编与接口技术:8259中断实验
汇编·单片机·嵌入式硬件·8259中断实验