汇编语言与接口技术--算术运算程序设计

一、 实验要求

  1. 编程实现两个数:#998877H 和 #778899H 的加法运算。
  2. 编程实现两个数:#998877H 和 #778899H 的减法运算。

二、 实验设计

 1.整体思路

无符号角度:
(1)加法

1.初始化:设置两个数 998877H 和 778899H。

2.低位相加:

从 NUM1 获取第2位(即77)并存入 R0。

从 NUM2 获取第2位(即77)并存入 A。

执行 ADD A, R0 将 A 与 R0 相加,结果存回 A。

将结果存入 R3。

3.中位相加:

从 NUM1 获取第1位(即88)并存入 R1。

从 NUM2 获取第1位(即88)并存入 A。

执行 ADDC A, R1 将 A 与 R1 及进位相加,结果存回 A。

将结果存入 R4。

4.高位相加:

从 NUM1 获取第0位(即99)并存入 R2。

从 NUM2 获取第0位(即99)并存入 A。

执行 ADDC A, R2 将 A 与 R2 及进位相加,结果存回 A。

将结果存入 R5。

5.检查进位:

如果最高位运算后没有进位,则将 R6 设置为 01H。

否则,清除进位标志。

(2)减法

1.初始化:设置两个数 998877H 和 778899H。

2.低位相减:

从 NUM1_SUB 获取低位并存入 R0。

从 NUM2_SUB 获取低位并存入 A。

执行 SUBB A, R0 将 A 减去 R0,结果存回 A。

将结果存入 R3。

3.中位相减:

从 NUM1_SUB 获取中位并存入 R1。

从 NUM2_SUB 获取中位并存入 A。

执行 SUBB A, R1 将 A 减去 R1,结果存回 A。

将结果存入 R4。

4.高位相减:

从 NUM1_SUB 获取高位并存入 R2。

从 NUM2_SUB 获取高位并存入 A。

执行 SUBB A, R2 将 A 减去 R2,结果存回 A。

将结果存入 R5。

有符号数角度:

对于有符号数的加法和减法,过程与无符号数相同,因为在这个代码中没有涉及到负数的情况。如果有负数参与,需要考虑补码表示和溢出检测。

2.流程图

1.加法

2.减法

                     

1.主要模块设计思路及分析

(1)加法模块

数据准备:将两个数分别存储在内存中,按照字节顺序排列。

逐位相加:从最低位开始,逐位进行加法运算,同时处理进位。

结果存储:将每一步的结果存储在寄存器中。

进位处理:使用 JNC 指令来检测是否有进位产生。

(2)减法模块 

数据准备:将两个数分别存储在内存中,按照字节顺序排列。

逐位相减:从最低位开始,逐位进行减法运算。

结果存储:将每一步的结果存储在寄存器中。

借位处理:使用 SUBB 指令来自动处理借位。

           

三、 实现效果

 1.加法部分

/*#998877H 和 #778899H 的加法运算。 0111 1110   */

2.减法部分

/*#998877H 和 #778899H 的减法运算。 21 FFDE   */

四、总结

(1)遇到的问题及解决办法(当我想将加法和减法写在一起时)

1. 将加法和减法程序分开,分别使用不同的起始地址(例如,ORG 0000H 和 ORG 0100H),以防止重定义,同时确保在汇编时不会冲突。

2.当完成加法模块后不能直接写END,可以加上指令JMP START_SUB跳转到减法部分,继续执行下面的减法部分

3. 将减法部分的数据标签定义为 NUM1_SUB 和 NUM2_SUB,以确保数据标签之间没有冲突。

4. 我发现图中的位置读错了,我是想先读取两个num的低位然后相加。第12行,我将num1地址赋给DRTR,它的0H地址存放的是99H,1H是88H,2H是77H,所以我的A偏移量2H是对的,可以正确读到num1的77H。第18行,我将num2地址赋给DRTR,它的0H地址存放的是77H,1H是88H,2H是99H,所以取它的低位时,还是用2H偏移量

修改之后:

5. 代码取数值的时候错了,我将低位相减取的0H,算的时候就是高位相减了。错误结果会与正确结果相差一个-1

6. 我知道了JNC指令的运用:

如果最近一次算术运算(如加法)没有产生进位(C=0),则执行跳转,跳转到标签LOOP指定的位置继续执行。

如果产生了进位(C=1),则不跳转,程序顺序执行下一条指令。

2)收获与体会

通过这次编程实验,我更加深入地理解了十六进制数与二进制数之间的转换以及它们在进行算术运算时的具体实现方式。特别是如何逐位进行加法和减法运算,并处理进位和借位。实验中,我使用了多个寄存器(如A、R0-R5)来暂存数据和运算结果。这使我更加熟悉了寄存器间的数据传输指令(如MOV)以及如何使用这些寄存器进行算术运算(如ADD、ADDC、SUBB)。在加法运算中,我使用了JNC(无进位跳转)指令来根据进位标志(C)的状态决定是否执行某个代码段。这加深了我对条件跳转指令的理解,并学会了如何根据程序的需要灵活使用它们。在减法运算中,我使用了SUBB指令来进行带借位的减法运算。这使我理解了无符号数减法运算的特殊性,即在发生借位时如何正确处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(蓝桥杯C/C++)——基础算法(上)

目录 一、二分法 1.二分法简介 二分法简介-解题步骤 2.整数二分-简介 整数二分-模板 3.浮点二分-简介 浮点二分-模板 4.二分答案-简介 二分答案-模板​​​​​​​ 二、位运算 1.位运算简介 2.常见的位运算 按位与AND(&) 按位或OR( | ) 按位异或…

1-petalinux 问题记录-根文件系统分区问题

在MPSOC上使用SD第二分区配置根文件系统的时候,需要选择对应的bootargs,但是板子上有emmc和sd两个区域,至于配置哪一种mmcblk0就出现了问题,从vivado中的BlockDesign和MLK XCZU2CG原理图来看的话,我使用的SD卡应该属于…

CSS中的背景色和前景色

目录 1 对比度的计算1.1 亮度计算1.2 对比度比率 2 在线计算对比度 在我们的样式设计中,通常会有背景色和前景色的概念。前景色我们通常用来设置文本的颜色,而背景色通常是文本的所在容器的颜色。比如如果我们把文本放在普通容器里,那普通容器…

全面解析:区块链技术及其应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 全面解析:区块链技术及其应用 全面解析:区块链技术及其应用 全面解析:区块链技术及其应用 区…

[Redis] Redis主从复制模式

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

初始JavaEE篇——多线程(8):JUC的组件

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 Callable接口 ReentrantLock synchronized 与 ReentrantLock的区别 信号量(Semaphore) CountDown…

Java实现JWT登录认证

文章目录 什么是JWT?为什么需要令牌?如何实现?添加依赖:JwtUtils.java(生成、解析Token的工具类)jwt配置:登录业务逻辑:其他关联代码:测试: 什么是JWT? JWT(Json Web Token&…

Meta AR 眼镜团队前负责人加入 OpenAI;visionOS 2.2 Beta 引入超宽屏投屏模式丨 RTE 开发者日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement)领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的数据」、「有思考的 文章 …

如何对LabVIEW软件进行性能评估?

对LabVIEW软件进行性能评估,可以从以下几个方面着手,通过定量与定性分析,全面了解软件在实际应用中的表现。这些评估方法适用于确保LabVIEW程序的运行效率、稳定性和可维护性。 一、响应时间和执行效率 时间戳测量:使用LabVIEW的时…

鸢尾博客项目开源

1.博客介绍 鸢尾博客是一个基于Spring BootVue3 TypeScript ViteJavaFx的客户端和服务器端的博客系统。项目采用前端与后端分离,支持移动端自适应,配有完备的前台和后台管理功能。后端使用Sa-Token进行权限管理,支持动态菜单权限,服务健康…

拾光云影 3.3.0 | 高清秒播电视直播,支持IPV4,几千频道

拾光云影是一款Ipv4通用版电视直播APP,界面熟悉但有所改进,操作布局类似TVbox。新增了功能按钮页,提供更多功能。频道清晰,加载速度快,支持港澳台等特殊频道,大部分频道均可秒播。软件内置了直播接口&#…

【HTML】——VSCode 基本使用入门和常见操作

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:HTML开发工具VSCode的使用 1:创建项目 2:创建格式模板&#x…

Redis数据库测试和缓存穿透、雪崩、击穿

Redis数据库测试实验 实验要求 1.新建一张user表,在表内插入10000条数据。 2.①通过jdbc查询这10000条数据,记录查询时间。 ②通过redis查询这10000条数据,记录查询时间。 3.①再次查询这一万条数据,要求根据年龄进行排序&#…

zabbix 7.0 安装(服务器、前端、代理等)

https://www.zabbix.com/download 使用上面的地址,按教程执行命令安装

andrular输入框input监听值传递

效果图&#xff1a; step1: E:\projectgood\ajnine\untitled4\src\app\apple\apple.component.html <button mat-button (click)“openDialog()”>Open dialog step2: E:\projectgood\ajnine\untitled4\src\app\apple\apple.component.ts import {Component, inject}…

考公人数攀升?地信、测绘、地质、遥感等专业,能报考哪些单位

近年来&#xff0c;考公人数持续飙升&#xff0c;国考报名人数更逐年攀升。2025年国家公务员考试共有341.6万人通过资格审查&#xff0c;报录比达86:1。国考报名人数再创新高。 国家公务员考试时间安排 地理学相关岗位分析 地信属于地理科学类&#xff0c;测绘类中不包括地信&…

Pr 视频效果:超级键

视频效果/键控/超级键 Keying/Ultra Key 超级键 Ultra Key效果是 Premiere Pro 中功能强大的抠像工具&#xff0c;主要用于绿幕/蓝幕抠像。通过选择要抠除的颜色&#xff08;通常是绿幕或蓝幕的颜色&#xff09;&#xff0c;即可以将该颜色的像素设为透明&#xff0c;实现主体与…

24-11-1-读书笔记(三十一)-《契诃夫文集》(五)下([俄] 契诃夫 [译] 汝龙)生活乏味但不乏魅力。

文章目录 《契诃夫文集》&#xff08;五&#xff09;下&#xff08;[俄] 契诃夫 [译] 汝龙&#xff09;生活乏味但不乏魅力。目录阅读笔记总结 《契诃夫文集》&#xff08;五&#xff09;下&#xff08;[俄] 契诃夫 [译] 汝龙&#xff09;生活乏味但不乏魅力。 休息&#xff0c…

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…

【C++】内存管理(二):operator new/delete

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的operator new/delete&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 new/delete的底层2 new/delete的底层调用顺序3 delete[ ]调用析构函数的次数…