当前位置: 首页 > news >正文

汇编语言程序设计实验报告

一、实验一

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 镜像&#xf…...

章鱼网络进展月报 | 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号,那么就重新发送这些包。 这一机制非常强大。通过这一机制&#xf…...

使用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按照如下步骤操作&#xf…...

使用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 - 粘粘图片…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...