汇编语言程序设计实验报告
一、实验一
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 - 粘粘图片…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
