LC-3 机器码编程实验

news2024/7/30 9:33:09

一、实验目的

  1. 分析和理解试验指定的需解决问题。
  2. 利用LC-3的机器代码设计实现相关程序。
  3. 通过LC-3仿真器调试和运行相关程序并得到正确的结果。

二、实验内容

利用LC-3的机器代码计算一个16位的字中有多少位是“1”,程序从x3000开始,需计算的字存储在x3100,计算的结果存储在x3101。

三、实验步骤与结果

1. 流程图及思路

在这里插入图片描述

因为输入的数据只有16位,那么计算一个数据中“1”的个数,只需要进行16轮循环。实现16轮循环的具体方法是:令一个寄存器(R2)的值为16,在每一轮循环结束的时候都减1,直到R2 = 0的时候中止循环。用这种方法,可以将循环进行16次,对每一个位都进行检验。这里面遇到了一个问题,5位立即数的范围有限,无法一次性将R2的值加到16。于是我分了两次:先令R2 = 1,然后R2 += 15。

用一个寄存器(R3)保存输入数据,在每一轮循环中,通过判断该数字是否大于等于0,来检测其符号位。如果该数字为非负,则符号位为0;如果该数字为负,则符号位为1。在保存结果的寄存器(R1)中记录每一轮检测的信息。

每一轮循环后,将R3的值左移一位。具体方法是将R3的值乘以2,用加法实现,就是R3 = R3 + R3。这样就可以更新最高位的信息,进行下一轮的检测,直到程序结束。

2. 源代码和注释

0011 000 000000000      ; 设置初始位置,PC = x3000

0101 001 001 1 00000    ; R1 <- 0 该寄存器用来记录1的个数
0001 010 001 1 00001    ; R2 <- 1 该寄存器用来判断循环次数
0001 010 010 1 01111    ; R2 <- R2 + 15 分两次进行赋值,共16次

0010 011 011111100		; R3 <- *(x3100) 将待测数据放进R3

						;循环
0000 011 000000001		; R3 >= 0 ? 判断R3符号位是否为0,是则跳过下一句
0001 001 001 1 00001	; R1 <- R1 + 1 更新R1的值
0001 010 010 1 11111	; R2 <- R2 - 1 
0000 010 000000010		; R2 == 0 ? 判断是否结束?如果R2为0则结束
0001 011 011 0 00011	; R3 <- R3 << 1
0000 111 111111010		; 向回跳转,循环继续

0011 001 011110110		; 将R1的结果存储至x3101

3. 实验过程和结果

首先用LC3 Edit编辑好上述代码,然后生成obj文件,如图所示,没有发现错误。

在这里插入图片描述
用LC3模拟器装载之。
在这里插入图片描述
x3100处写入输入数据,然后执行。最后在x3101处查看结果。在此我使用了四组测试数据测试。

样例1:输入15(x000F)

在这里插入图片描述
结果如图:
在这里插入图片描述
可见输入数据的补码有4个“1”,这是正确的。

样例2:输入642(x0282)

在这里插入图片描述
结果如图:

在这里插入图片描述
可见输入数据的补码有3个“1”,这是正确的。

样例3:输入0(x0000)

在这里插入图片描述
结果如图:
在这里插入图片描述

样例4:输入-100(xFF9C)

在这里插入图片描述
结果如图:
在这里插入图片描述
可见输入数据的补码中有12个“1”,这依然是正确的。

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

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

相关文章

智能集成式电力电容器在山东某环保材料制造厂中的应用

摘要&#xff1a;分析智能集成式电力电容的工作原理及功能&#xff0c;结合山东环保材料制造厂配电现状&#xff0c;选择经济可靠的方案&#xff0c;智能电容过零投切与低功耗&#xff0c;解决了继电器投切产生涌流的问题&#xff1b;接线简单&#xff0c;扩容方便&#xff0c;…

chatgpt赋能python:Python实现Word合并

Python实现Word合并 在日常工作和生活中&#xff0c;我们经常需要处理Word文档。有一种情况是需要将多个Word文档合并成一个&#xff0c;并且保留原有的格式和样式。这个时候&#xff0c;Python就派上用场了。 Word文档的结构 在了解怎样合并多个Word文档之前&#xff0c;我…

手机修复老照片软件有哪些?手机修复老照片的软件哪个好?

随着智能手机与数码相机的广泛普及&#xff0c;越来越多的小伙伴爱上了拍照。那么面对这些拍下来美美的照片&#xff0c;随着时间的不断流逝&#xff0c;它们终会磨损、损坏或者褪色。其实我们可以通过手机上的一些软件来帮助我们修复这些老照片&#xff0c;那么手机修复老照片…

ISO证书“带标”与“不带标”的区别是什么?

ISO9001质量管理体系认证是企业产品获得“通行绿卡”的最直接最有效的途径。 通过认证在打破贸易壁垒&#xff0c;提高产品知名度&#xff0c;降低生产成本&#xff0c;提高经济效益&#xff0c;维护消费者权益&#xff0c;减少重复审核负担等方面的作用越来越为企业界所共知。…

使用Cpolar+freekan源代码 搭建属于自己的在线视频网站

文章目录 1.前言2.本地网页搭建2.1 环境使用2.2 支持组件和环境设置2.3 支持组件选和环境设置2.4 网页安装2.5 测试和使用2.6 问题解决 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDNprobezy的文章&#xff1a;使用Cpolarfreekan源码…

三线制Pt100隔离器在掘进机电机保护系统中的应用

摘要&#xff1a;三线制Pt100隔离器相较于二线制的更加稳定可靠&#xff0c;在中低温地区有广泛的应用。掘进机电机保护系统中&#xff0c;利用三线制Pt100隔离器将热电阻信号转换为线性4-20mA电流信号&#xff0c;经过A/D转化&#xff0c;传输至PLC并显示&#xff0c;通过实时…

OpenCV中的图像处理3.10(九)二维直方图与反投影

目录 3.10.3 直方图--3&#xff1a;二维直方图目标绪论OpenCV中的二维直方图Numpy中的2D直方图绘制二维直方图 3.10.4 直方图 - 4&#xff1a;直方图反投影目标理论Numpy中的算法OpenCV中的反投影其他资源 翻译及二次校对&#xff1a;cvtutorials.com 编辑者&#xff1a;廿瓶鲸…

前端新员工入职,需要为你的新电脑安装一些环境,开发工具

目录 一.先安装个谷歌浏览器&#xff0c;稳定版。 二.安装公司日常交流软件 三.安装个VSCode 四.安装nvm 五.vue-cli的安装和配置 六.安装git 配置git账号 拉取线上仓库到本地 一些常用git命令 七.其他工具 网络抓包工具&#xff1a;whistle 反向代理工具&#xff1…

雪花算法记录

引子 伴随着业务的日渐庞大&#xff0c;单库单表的数据库可能无法支持业务的读写&#xff0c;需要对数据库进行分库分表。 原来数据库中&#xff0c;通常使用自增id的方式生成主键。分库分表之后&#xff0c;如果仍然采用原来的方式&#xff0c;在多个表之间主键会发生重复。 …

斑梨电子树莓派Zero 2W显示屏7寸DIY电容触摸屏RJ45 USB HUB接口 兼容Banana pi Zero

spotpear.cn/index/product/detail/id/1320.html detail.tmall.com/item.htm?id719583990252&spma211lz.success.0.0.63982b90oweBSa 【产品简介】 为了让你的Zero正常工作&#xff0c;你需要很多模块&#xff0c;如一个显示器&#xff0c;一个USB HUB&#xff0c;一个…

Java StringBuilder类

3 StringBuilder可变字符串类 StringBuilder是一个可变的字符串类,内容可以改变3.1 StringBuilder构造方法 范例public class Demo {public static void main(String[] args) {//创建空白可

chatgpt赋能python:Pythonspidev简介

Python spidev简介 Python spidev是一个可以与SPI设备进行通信的Python库。SPI是一种简单的通信协议&#xff0c;通常用于与单片机或其他嵌入式设备进行通信。Python spidev库可以使用SPI协议读写数据&#xff0c;然后与其他设备交换数据。 开发环境和使用方法 开发环境 Py…

如何把视频中的声音提取出来转化成文字?

在观看电影、综艺节目等视频内容时&#xff0c;我们可以使用视频转文字的方法来帮助我们更好地了解对话内容&#xff0c;从而提高观影体验。那么&#xff0c;如何把视频声音转成文字&#xff1f;视频声音转成文字的软件有哪些呢&#xff1f;我给你介绍几个非常好用的视频声音转…

PCL学习之点云重建

1&#xff1a;点云模型重建 离散点云 • 数据量大 • 渲染显示大 • 模型操作计算不方便 网格模型 • 数据量小 • 渲染方便 • 模型操作计算方便 重建步骤 2&#xff1a;凸包算法 凸包 • 平面凸包&#xff1a;平面的一个子集S被称为是“ 凸”的&#xff0c;当且仅当对于任…

【Netty】ChannelPipeline源码分析(五)

文章目录 前言一、ChannelPipeline 接口1.1 创建 ChannelPipeline1.2 ChannelPipeline 事件传输机制1.2.1 处理出站事件1.2.2 处理入站事件 二、ChannelPipeline 中的 ChannelHandler三、ChannelHandlerContext 接口3.1 ChannelHandlerContext 与其他组件的关系3.2 跳过某些 Ch…

tcp拥塞控制

序列号: 在TCP连接中传送的字节流中的每一个字节都按顺序编号。该字段表明发送数据的第一个字节的序号 确认号&#xff1a;希望收到对方下一个报文的第一个字节的序号 窗口&#xff1a;用于通知发送端&#xff0c;接收端可以接收的空间大小 TCP的流量控制是使用滑动窗口机制&…

C4d Octane渲染器内存满、卡顿、崩溃、缓慢、updating解决办法

最近碰到Octane渲染动画序列&#xff0c;总是会渲染一段时间后卡在某一张图片上&#xff0c;图片查看器左下角一直显示updating。 偶然发现在C4D界面点击octane工具栏的设置&#xff0c;它又会开始渲染&#xff0c;但渲染一些序列帧后又会卡在一张图上显示updating 点击octane工…

MyBatis-Plus01_简介、入门案例、BaseMapper与IService中的CRUD以及常用的注解

目录 ①. MyBatis-plus简介 ②. MyBatis-plus入门案例 ③. BaseMapper中的CRUD ④. 通用Service的CRUD ⑤. MyBatis-plus中常用注解TableName&#xff1a; ⑥. 常用注解TableId ⑦. 雪花算法 ⑧常用注解TableField ⑨. 常用注解TableLogic——逻辑删除专用注解 ①. M…

chatgpt赋能python:PythonUDS:让你的汽车掌握更多技能

Python UDS&#xff1a;让你的汽车掌握更多技能 UDS&#xff08;Unified Diagnostic Services&#xff09;是一种汽车电子控制单元&#xff08;ECU&#xff09;通信协议&#xff0c;用于车辆的诊断和测试。Python UDS是用Python编程语言实现的UDS客户端和服务器实现&#xff0…

【stable diffusion保姆级教程,左手ChatGPT之剑,右手stablediffusion之矛】

一、前言 哈喽&#xff0c;大家好&#xff0c;我是Tian-Feng&#xff0c;前面写过两篇文章&#xff0c;但是细节没认真写&#xff0c;除了介绍一些参数意思&#xff0c;和推荐模型插件&#xff0c;有一定基础的小伙伴应该是挺有用的&#xff0c;但如果是小白&#xff0c;可能还…