汇编语言程序设计实验报告
一、实验一
1、实验内容
(1)用Debug命令查看寄存器和内存中的内容
(2)上机过程及程序调试
2、实验目的
(1)要求掌握使用Debug命令查看寄存器和内存的方法;
(2)通过实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用;
(3)掌握汇编语言程序从设计到形成可执行文件的方法和步骤,即编辑、汇编、连接。了解汇编语言的系统工作文件和工作环境。理解汇编程序和连接程序的作用。理解列表文件内容。
(4)初步了解程序的运行和调试方法。学会使用Debug主要命令和常用的DOS指令。
3、实验步骤
(1)进入DOS方式并运行Debug程序;
(2)用R命令查看、改变CPU 寄存器的内容;
(3)用Debug的D和E命令查看和改写内存中的内容;
(4)用Debug对HELLO程序进行调试;
4、实验结果与分析
(1)用R命令查看、改变CPU寄存器的内容:
查看CS=13A1, IP=0100,即内存13A1:0100处的指令为CPU当前要读取、执行的指令。CS:IP 指向13A1:0100,此处存放的机器码为027548,对应的汇编指令为ADD DH, [DI+48]。右下角的指令“DS: 0048=00”表示在“ADD DH, [DI+48]”中需要用到的存储单元“DS:0048”的值为“00”。
将IP的值改为0200,CS:IP指向13A1:0200,此处存放的机器码为5B,对应汇编指令为“POP BX”;将CS的值改为FF00,CS:IP指向FF00:0200,此处存放的机器码为51,对应汇编指令为“PUSH CX”。
(2)用Debug的D命令查看内存中的内容:
最左侧是每行的起始地址以逻辑地址的形式给出;中间的内存1000:0单元中的内容是72H,内存1000:1单元中的内容是64H,内存1000:0~1000:F中的内存都在第一行; 内存1000:10中的内容是EBH,内存1000:11处的内容是F0H,内存1000:10~1000:1F中的内容都在第二行;右边的内存单元1000:0、1000:1、1000:2中存放的数据是72H、64H、73H,对应的ASCI字符分别是“r”、“d”、“s";内存单元1000:07中的数据是3AH,它没有对应可显示的ASCII字符,Debug 就用“.”来代替。
(3)用Debug的E命令改写内存中的内容:
用E命令从内存1000:0逐个写入构成‘hello world!’的字符,再用D命令查看1000:0~1000:F单元的内容:“hello world!”。
(4)用Debug对HELLO程序进行调试:
① masm hello.asm; ② link hello; ③ hello.exe
输出:hello world!
二、实验二
1、实验内容
(1)不同寻址方式的灵活运用
(2)算术及位串处理程序
2、实验目的
(1)熟悉和掌握7种不同的操作数寻址方式的使用方法;
(2)掌握多数位的算术运算、移位操作、字符串操作等程序的设计,学习使用分支与循环等基本编程方法,熟练使用Debug。
3、实验步骤
(1)对指定内存单元的数据进行不同寻址方式的询问;
(2)在数据段预先存放16个十六进制数的ASCII码,首地址为ASC。从键盘输入一位十六进制数到BX,用ASC[BX]寻址方式找到对应数位的ASCII码,并取出显示;
(3)用16位指令编制程序,处理32位的加减乘除四则运算题;
(4)用字符串处理指令编制程序,处理字符串的比较和查找,显示结果;
(5)AL字节内容反向排序。
4、实验结果与分析
(1)两个操作数相减运算,结果放在数据段偏移地址为0016H的单元:


(2)两个操作数相加运算,结果放在附加段的0020H的单元:


(3)在数据段预先存放16个十六进制数的ASCII码,首地址为ASC。从键盘输入一位十六进制数到BX,用ASC[BX]寻址方式找到对应数位的ASCII码,并取出显示:


三、实验三
1、实验内容
(1)伪指令
(2)分支程序设计
2、实验目的
(1)掌握常用伪指令的使用方法,熟悉定义数据、定义程序模式、分配存储区等功能,实践课程中的实例;
(2)掌握分支程序的基本编程方法。熟悉数制转换。用LOOP指令、条件转移指令和向量地址法实现程序转移。
3、实验步骤
(1)用16位指令编写完整程序,实现数据定义语句和相关指令,在Debug下查看内存数据的定义情况,单步跟踪查看各寄存器的值;
(2)用16位指令编写完整程序,并上机调试,计算W=(X+Y)×Z,其中所有变量均为16位带符号变量;
(3)编写程序,如果输入的是大写字母,则输出对应的小写字母,反之亦然;如果输入的是数字,原样输出;按回车结束;
(4)分离字数组ARRAY中的正、负数,把其中的正数复制到PDATA数组;负数复制到NDATA数组,并分别统计正、负数个数。
(5)在数据段定义分支地址表,通过键盘输入数字1~8,实现转移,要求如下:
① 分支表定义为:PTABLE DW P1, P2, P3, P4, P5, P6, P7, P8
② P1~P8为标号,如果键入数字3,则从PTABLE中取出P3的地址,实现间接转移
4、实验结果与分析
(1)单步跟踪查看各寄存器的值:
AX=076A BX=0000 CX=014F DX=0000; AX=076A BX=0000 CX=014F DX=076A;
AX=07FF BX=0000 CX=014F DX=076A; AX=0700 BX=0000 CX=014F DX=076A;
AX=000C BX=0000 CX=014F DX=076A; AX=000C BX=0009 CX=014F DX=076A;
AX=0002 BX=0009 CX=014F DX=076A; AX=0002 BX=0001 CX=014F DX=076A;
AX=0002 BX=0102 CX=014F DX=076A; AX=0002 BX=0102 CX=0004 DX=076A;
AX=0002 BX=0102 CX=0004 DX=0004; AX=0002 BX=0009 CX=0004 DX=0004;
AX=0002 BX=00FF CX=0004 DX=0004
(2)字母大小写反转,数字原样输出:
判断输入的数据类型:
① 大写字母:加上20H转成小写字母[ADD AL,20H]再输出数据;
② 小写字母:减去20H转成大写字母[SUB AL,20H]再输出数据;
③ 数字类型:直接输出数据;
④ 回车:直接退出程序。
四、实验四
1、实验内容
(1)循环程序设计
(2)子程序设计和多模块程序设计
2、实验目的
(1)掌握循环程序的基本编程方法。提高循环程序编程技巧,熟悉键盘输入、显示输出等基本人机交互;
(2)掌握通用子程序的设计方法,学会子程序的功能划分和正确进行子程序的参数传递;
(3)熟悉使用结构变量,掌握多模块程序设计方法,正确使用PUBLIC,EXTRN实现参数传递;
3、实验步骤
(1)键入一个单个字符,显示该字符的ASCII码(十六进制),回车键退出循环,终止程序;
(2)键入7位二进制数,显示对应的字符,回车键退出循环,终止程序;
(3)键入一个四位的十六进制数(其中字母为大写),并将其转换为二进制数显示输出;
(4)采用通过地址表传递参数地址的方法,求数组元素累加和的通用子程序;
(5)键入一个十六进制数(不超过四位),显示输出该数的十进制形式;
(6)键入一个十进制数(小于65536的正数),显示输出该数的十六进制形式;
(7)设计一个简单计算器程序,实现整数的加减乘除运算;
(8)学生成绩表由姓名、A成绩、B成绩、合计总分四项组成,其中合计总分=A成绩+B成绩,键入6个人的成绩记录后,输出学生成绩表,要求成绩表用结构类型;输入、计算、输出分为3个子程序;成绩为百分制无符号数;合计总分由程序计算;
① 成绩键入后转为压缩BCD码格式存放;
② 成绩键入后转为二进制数格式存放;
4、实验结果与分析
(1)显示字符的十六进制ASCII码:
实现了从键盘输入一个单个字符(判断字符[CMP AL,13]),就可以以十六进制的形式显示该字符的ASCI码。如输入1,显示31,输入A,显示41。
(2)显示7位二进制数对应的字符:
实现了从键盘输人7位二进制数(二进制只有0和1,所以判断输入的数字是否是0或1即可),显示对应的字符。
(3)显示四位十六进制数对应的二进制数:
实现了从键盘输入一个四位的十六进制数,可以将其转换为二进制数并且显示输出。
(4)简单计算器程序:
① 从键盘输人算式,只接受不超过4位的十进制正整数。运算结果为不超过65535的整数
② 不接受复合算式,如3+5x6。
③ 计算器使用运算符‘+-×÷’、回车键和‘=’键、清除键‘C’。回车键或‘=’键给出计算结果,清除键‘C’为清0。按清除键后,可接受下一算式。
④ 程序分算式输人模块、计算模块、输出显示模块。输入模块和计算模块在同一程序文件中,输出显示模块为另一程序文件。
相关文章:
汇编语言程序设计实验报告
一、实验一 1、实验内容 (1)用Debug命令查看寄存器和内存中的内容 (2)上机过程及程序调试 2、实验目的 (1)要求掌握使用Debug命令查看寄存器和内存的方法; (2)通过…...
广域网(WAN)设备通信过程(通信流程、通信步骤、通信顺序、设备通信、主机通信)(MAC地址在本地链路中的作用)跳跃(hop)
文章目录 广域网(WAN)通信:MAC地址在本地链路中的作用引言MAC地址概述什么是MAC地址?如何工作? MAC地址与广域网MAC地址的局限性IP地址和路由 广域网设备通信过程1. 请求生成2. 封装数据帧3. 确定下一跳4. 数据传输5. …...
ExoPlayer架构详解与源码分析(10)——H264Reader
系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…...
智能优化算法应用:基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.粒子群算法4.实验参数设定5.算法结果6.参考文…...
微积分-序言
大家好,这里我将为大家带来一个全新的专栏“微积分”。在这里我将为大家讲解微积分的内容,我会从最基础的内容开始讲解。争取让零基础的人也可以看懂和学会。 我也会在后续出一些微积分的题,让大家可以进行巩固和提高。 学习微积分那么就需要…...
ArchLinux安装详细步骤
下载(略)安装VirtualBox(略)新建虚拟机(略)启动 进入提示符 进入安装设置界面 archinstall出现界面: 逐项设置。 Disk我选择了ext4 在Profile中 我选择了KDE作为桌面(选择后按回车…...
react 学习笔记 李立超老师 | (学习中~)
文章目录 react学习笔记01入门概述React 基础案例HelloWorld三个API介绍 JSXJSX 解构数组 创建react项目(手动)创建React项目(自动) | create-react-app事件处理React中的CSS样式内联样式 | 内联样式中使用state (不建议使用)外部样式表 | CSS Module React组件函数式组件和类组…...
Docker镜像和容器的简单操作
1.镜像管理 搜索镜像: 这种方法只能用于官方镜像库 搜索基于 centos 操作系统的镜像 # docker search centos 按星级搜索镜像: 查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 ubuntu 镜像…...
章鱼网络进展月报 | 2023.11.1-11.30
章鱼网络大事摘要 1、2023年12月,Octopus 2.0 将会正式启动。 2、隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态。 3、Louis 受邀作为嘉宾,在 NEARCON2023 的多链网络主题沙龙中发言:我们依然处于区…...
基于Maven构建OSGI应用(Maven和OSGI结合)
基于Maven构建OSGI应用。 使用Maven来构建项目,包括项目的创建、子模块buldle的创建等。使用OSGI来实现动态模块化管理,实现模块的热插拔效果(即插即用)。 创建一个Maven项目:helloworld,并在该项目下创建…...
oracle分组排序后取第一条
在 Oracle 中,可以使用「ROW_NUMBER」函数对某个列进行分组并排序,然后通过「WHERE」语句取第一条记录。 假设有一张「USERS」表,其中包含「ID」、「NAME」、「AGE」和「COUNTRY」列,您可以使用以下 SQL 语句对「AGE」列进行分组…...
MAMBA介绍:一种新的可能超过Transformer的AI架构
有人说,“理解了人类的语言,就理解了世界”。一直以来,人工智能领域的学者和工程师们都试图让机器学习人类的语言和说话方式,但进展始终不大。因为人类的语言太复杂,太多样,而组成它背后的机制,…...
win系统一台电脑安装两个不同版本的mysql教程
文章目录 1.mysql下载zip包(地址)2.解压在你的电脑上(不要再C盘和带中文的路径)3.创建my.ini文件4.更改环境变量(方便使用, 可选)5.打包mysql服务6.初始化mysql的data7.启动刚刚打包的服务8.更改密码 1.mys…...
esp32-s3部署yolox_nano进行目标检测
ESP32-S3部署yolox_nano进行目标检测 一、生成模型部署项目01 环境02 配置TVM包03 模型量化3.1预处理3.2 量化 04 生成项目 二、烧录程序 手上的是ESP32-S3-WROOM-1 N8R8芯片,整个链路跑通了,但是识别速度太慢了,20秒一张图,所以暂…...
TCP传输数据的确认机制
实际的TCP收发数据的过程是双向的。 TCP采用这样的方式确认对方是否收到了数据,在得到对方确认之前,发送过的包都会保存在发送缓冲区中。如果对方没有返回某些包对应的ACK号,那么就重新发送这些包。 这一机制非常强大。通过这一机制…...
使用Ansible Expect模块实现自动化交互式任务
Ansible是一种功能强大的自动化工具,可用于自动化配置管理、部署和任务执行。其中的Expect模块是Ansible的一个重要组件,它允许我们自动化处理需要与交互式命令行进行交互的任务。本文将介绍如何使用Ansible的Expect模块,并提供一些示例来说明…...
51单片机独立按键以及矩阵按键的使用以及其原理--独立按键 K1 控制 D1 指示灯亮灭以及数码管显示矩阵按键 S1-S16 按下后键值 0-F
IO 的使用–按键 本文主要涉及8051单片机按键的使用,包括独立按键以及矩阵按键的使用以及其原理,其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按…...
chrome安装jsonview
写在前面 通过jsonview可以实现,当http响应时application/json时直接在浏览器格式化显示,增加可读性。本文看下如何安装该插件到chrome中。 1:安装 首先在这里 下载插件包,然后解压备用。接着在chrome按照如下步骤操作…...
使用TouchSocket适配一个c++的自定义协议
这里写目录标题 说明一、新建项目二、创建适配器三、创建服务器和客户端3.1 服务器3.2 客户端3.3 客户端发送3.4 客户端接收3.5 服务器接收与发送 四、关于同步Send 说明 今天有小伙伴咨询我,他和同事(c端)协商了一个协议,如果使…...
VSC改造MD编辑器及图床方案分享
VSC改造MD编辑器及图床方案分享 用了那么多md编辑器,到头来还是觉得VSC最好用。这次就来分享一下我的blog文件编辑流吧。 这篇文章包括:VSC下md功能扩展插件推荐、图床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘图片…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
