关于汇编语言与程序设计——子程序设计

学习目标:

编程实现两个数:#8888H 和 #79H 的乘除运算。


一、实验要求

能够熟练掌握算术运算汇编指令的使用;熟练掌握子程序设计的基本方法;熟练掌握程序的调试方法。

二、实验设计

 1.整体思路

乘法:将单字节的乘数由低位字节到高位字节依次相乘(MUL AB),将当前字节运算的积的低位字节A与上一字节的运算结果的进位(B+Cy)相加所得结果存入寄存器,反复跳转循环,直至完成运算。

除法:将被除数由高位字节到低位字节依次不断减去除数,当进行减法的被减数字节不够减去除数时,向上一字节的运算结果的余数进行借位,直至上一字节的运算结果的余数变为0,且当前字节小于除数时,被除数进入下一位运算,直至完成最低位运算,并存入余数。

2.流程图

乘法程序:

除法程序:

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

(1)乘法模块/子程序

(2)除法模块/子程序

三、 实现效果

(1)乘法运行结果 

(2)除法运行结果

四、学习总结

1.对多字节的运算,可以通过合理的转换,转换成多次的单字节运算。

2.注意现场保护和恢复现场。

3.在实验开始前,不清楚应该怎样去移位,要移几位,也不知道商和余数具体怎样去计算。学习过程中,通过翻找指令集,一点一点把这部分编程完成了,感觉收获很多,且学到了很多新的指令。

附录:

(1)乘法:
ORG 0000H  
NUM1:   DW 8888H
NUM2:   DB 79H
START:MOV DPTR,#0000HMOVC A,@A+DPTR			MOV R0,A					;将88H(高位)存入R0CLR AINC DPTR	   MOVC A,@A+DPTR		    MOV R1,A					;将88H(低位)存入R1CLR AINC DPTR	MOVC A,@A+DPTRMOV R2,A					;将79H存入R2
MUL_LOOP:MOV B,R1MUL AB				    ;高位->R1,低位->AMOV R5,A	MOV R1,B			   		MOV A,R0					MOV B,R2MUL AB					;高位->R2,低位->AADDC A,R1				;R2*R1结果的高8位与R2*R0结果的低8位做进位加法MOV R4,AMOV A,BADDC A,#00HMOV  R3,AEND除法:ORG 0000H  
NUM1:   DW 8888H
NUM2:   DB 79HMOV DPTR,#0000HMOVC A,@A+DPTRMOV R0,A	 	;将88H(高位)存入R0
CLR A
INC DPTR    MOVC A,@A+DPTRMOV R1,A		;将88H(低位)存入R1CLR AINC DPTR MOVC A,@A+DPTRMOV R2,A		;将79H存入R2MOV R6,#0000H
START:;低位累次相减MOV A,R0CLR CSUBB A,R2JNC LOOP1       ;若R0>R2则跳转到LOOP1
LOOP:MOV A,R6INC AMOV R6,ASUBB A,#08HJZ LOOP_END	    ;若累加器为0则跳转至LOOP_ENDMOV A,R1   CLR C    		;将进位清零RLC A    		;R1带进位循环左移,最高位->CyMOV R1,A     	;将循环左移后的数保存回R1MOV A,BRLC A     		;余数循环左移MOV B,A   		;将循环左移后的余数存回B中JNC LOOP    	;循环这一操作,直到余数最高位为1RRC A     		;将余数循环右移至最高位为1nopMOV R7,A		MOV A,R1RRC A			;余数循环右移nopCLR C			;将进位清零SUBB A,R2		;判断是否够减JNC LOOP2		;若进位标志为0则跳转至LOOP2LOOP1:MOV A,R0MOV B,R2DIV AB			;R0-R2MOV R3,A		;取低位为余数AJMP LOOP		;返回LOOP继续循环
LOOP2:MOV A,R7MOV B,R2DIV AB			;R7-R2MOV R4,A		;取低位为余数AJMP LOOP		;返回LOOP
LOOP_END:      END   

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

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

相关文章

AWS SQS 队列策略配置指南:常见错误与解决方案

在 AWS 云服务中,Simple Queue Service (SQS) 是一种完全托管的消息队列服务,广泛应用于分布式系统组件间的解耦。为了确保队列的安全访问,正确配置队列策略至关重要。本文将详细介绍 SQS 队列策略的配置方法,常见错误及其解决方案。 SQS 队列策略基础 SQS 队列策略是基于…

Webshell管理工具的流量特征

目录 一、常见Webshell工具流量特征 1. ​​中国菜刀(Chopper)​​ 2. ​​冰蝎(Behinder)​​ 3. ​​哥斯拉(Godzilla)​​ 4. ​​蚁剑(AntSword)​​ 5. ​​C99 Shell​​…

【每日八股】复习 MySQL Day3:锁

文章目录 昨日内容复习MySQL 使用 B 树作为索引的优势是什么?索引有哪几种?什么是最左匹配原则?索引区分度?联合索引如何排序?使用索引有哪些缺陷?什么时候需要建立索引,什么时候不需要&#xf…

Arkts完成数据请求http以及使用axios第三方库

import http from ohos.net.http Entry Component struct HttpPage {State message: string Hello Worldbuild() {Column({space:20}) {Row(){Button(发送http请求).onClick(()>{let httpRequest http.createHttp();httpRequest.request(https://zzgoodqc.cn/index.php/in…

SELinux 从理论到实践:深入解析与实战指南

文章目录 引言:为什么需要 SELinux?第一部分:SELinux 核心理论1.1 SELinux 的三大核心模型1.2 安全上下文(Security Context)1.3 策略语言与模块化 第二部分:实战操作指南2.1 SELinux 状态管理2.2 文件上下…

CD34.【C++ Dev】STL库的string的使用 (上)

目录 1.知识回顾 2.串联类和对象的知识重新理解 构造函数 string(); string (const string& str); string (const string& str, size_t pos, size_t len npos); string (const char* s); string (size_t n, char c); append和push_back string& append …

Git常用指令速查

Git常用指令速查 基本操作类&#xff1a; git init &#xff1a;初始化仓库git log&#xff1a;查看日志&#xff0c;这个命令很重要&#xff01;git add <文件名|.>&#xff1a;添加到暂存区git commit -m 注释&#xff1a;提交到仓库git merge <分支名>&#xf…

探索无人机模拟环境的多元景象及AI拓展

无人驾驶飞行器&#xff08;UAVs&#xff09;在各行各业的迅速普及&#xff0c;从农业和检测到空中操作和人机交互等令人兴奋的前沿领域&#xff0c;都引发了一个关键需求&#xff1a;强大而逼真的模拟环境。直接在物理硬件上测试尖端算法存在固有的风险——成本高昂的坠机、中…

AI Agent开源技术栈

构建和编排Agent的框架 如果您是从头开始构建&#xff0c;请从这里开始。这些工具可以帮助您构建Agent的逻辑——做什么、何时做以及如何处理工具。您可以将其视为将原始语言模型转化为更自主的模型的核心大脑。 2. 计算机和浏览器的使用 一旦你的Agent能够规划&#xff0c…

jspm老年体检信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 信息化时代&#xff0c;各行各业都以网络为基础飞速发展&#xff0c;而医疗服务行业的发展却进展缓慢&#xff0c;传统的医疗服务行业已经逐渐不满足民众的需求&#xff0c;有些还在以线下预约的方式接待病人&#xff0c;特别是针对于老年体检的服务&#xff0c;是少之又…

ESP32- 开发笔记- 软件开发 4 - GPIO 口

1 背景介绍 GPIO&#xff08;General Purpose Input/Output&#xff09; ——通用输入输出口&#xff0c;就是能由软件自由控制输入&#xff08;接收外界信号&#xff09;或输出&#xff08;发出电平信号&#xff09;的引脚。 ESP32 最核心的功能之一&#xff0c;能被用来控制…

格式工厂:多媒体转换工具

格式工厂&#xff08;FormatFactory&#xff09;是一款免费且功能全面的多媒体格式转换工具&#xff0c;支持视频、音频、图片及文档等多种格式的转换&#xff0c;覆盖超过70种语言&#xff0c;并兼容Windows XP至Win10/11系统。软件基于FFmpeg解码库开发&#xff0c;支持高效转…

在Anolis OS 8上部署Elasticsearch 7.16.1与JDK 11的完整指南

目录 1. 环境与版本选择 1.1 操作系统选择:Anolis OS 8 1.2 版本匹配说明 1.3 前置条件检查 2. JDK 11安装与配置 2.1 安装流程 2.2 配置详解 3. Elasticsearch 7.16.1安装与优化 3.1 基础安装 3.2 目录规划与权限 3.3 核心配置文件详解 3.4 JVM调优 4. 用户权限管…

Java中final关键字的作用?

在Java中&#xff0c;final 关键字用于表示不可变性&#xff0c;具体作用取决于它修饰的目标&#xff08;变量、方法或类&#xff09;。以下是其核心作用&#xff1a; 1. 修饰变量&#xff08;常量&#xff09; 基本类型变量&#xff1a;值不可更改&#xff08;常量&#xff09…

自动伴随无人机说明文档

自动伴随无人机说明文档 一、无人机参数二、能力说明三、操作流程3.1 模式定义3.2 启动流程3.3 可调参数&#xff08;建议默认&#xff09; 四、特别注意五、最后 一、无人机参数 型号&#xff1a;S400视觉pro版轴距&#xff1a;400mm起飞重量&#xff1a;1300g额外载重&#…

53.[前端开发-JS实战框架应用]Day04-Bootstrap入门到项目实战

Bootstrap入门到实战 1 认识Bootstrap 认识Bootstrap Bootstrap起源和历史 Bootstrap3-5版本的区别 Bootstrap优缺点 学习Bootstrap的理由 2 Bootstrap安装 Bootstrap4的安装 方式一 : CDN <!DOCTYPE html> <html lang"en"> <head><meta cha…

C#:创建变量和类的实例

在 C# 编程中&#xff0c;类作为引用类型&#xff0c;创建其变量和实例涉及到内存分配等重要概念。以下为你详细介绍创建类实例的步骤和相关操作。 类的声明与变量声明 类的声明就像是创建类实例的蓝图。当我们声明一个类后&#xff0c;就能够创建该类的实例。类属于引用类型…

<el-date-picker 设置记录时间早于当前时间 (包含时分秒)

<el-date-picker 设置记录时间早于当前时间 &#xff08;包含时分秒&#xff09; <el-date-pickerv-else-if"item.type datetime"v-model"state.ruleForm[item.key]"type"datetime":placeholder"item.title"format"YYYY-M…

Tailwind CSS 响应式设计解析(含示例)

本文内容&#xff1a; Tailwindcss V4 中如何使用响应式设计功能&#xff0c;包括默认断点、自定义断点、断点范围控制以及容器查询的各种技巧&#xff0c;帮助你在不离开 HTML 的前提下优雅构建响应式页面。 &#x1f31f; 默认断点用法&#xff08;移动优先&#xff09; Tail…

生态修复项目管理软件

在“双碳”目标与生态文明建设的双重驱动下&#xff0c;生态修复项目正成为全球环境治理的核心战场。然而&#xff0c;矿山复绿、湿地修复、水土保持等工程往往面临跨地域、多主体、长周期的管理难题——从数据分散到进度失控&#xff0c;从成本超支到风险频发&#xff0c;传统…