【DSP原理及应用】实验-CCS的使用与汇编程序设计

目录

    • 实验 CCS的使用和汇编程序设计
      • 一、实验目的
      • 二、试验设备
      • 三、实验内容
      • 四、实验程序

实验 CCS的使用和汇编程序设计

一、实验目的

  1. 熟悉CCS开发软件

  2. 学会C55X汇编语言程序设计

  3. 熟悉c55x汇编指令

二、试验设备

计算机,CCS开发环境

三、实验内容

  1. 安装CCS5.5

  2. 熟悉CCS的基本操作,工程的打开、导入

  3. 熟悉用CCS调试程序、查看寄存器

  4. 利用CCS软件观察如下指令运行结果

指令1:

ADD *AR3+, T0, T1

含义:AR3间接寻址得到的内容与T0的内容相加,结果装入T1,并将AR3增1。

Before                                           After 
AR3                0302                          AR3                0303
302                EF00                          302                EF00
T0                 3300                          T0                 3300
T1                    0                          T1                 2200
CARRY                 0                          CARRY                 0

指令2:

MOV *AR3+ << #16,AC1

Before                                           After                              
AC1               00 0200 FC00                   AC1               00 3400 0000
AR3                       0200                   AR3                       0201
200                       3400                   200                       3400

指令3:

ADDSUBCC *AR1,AC0,TC2,AC1

Before                                          After
AC0                00 EC00 0000                 AC0                00 EC00 0000
AC1                00 0000 0000                 AC1                01 1F00 0000
AR1                        0200                 AR1                        0200
200                        3300                 200                        3300
TC2                           1                 TC2                           1
SXMD                          0                 SXMD                          0
M40                           0                 M40                           0
AC0V1                         0                 AC0V1                         1
CARRY                         0                 CARRY                         1

指令4:

AMAR *AR2+

:: MAC uns(*AR1), uns(*CDP), AC0 >> #16

Before                                         After                              
AC0           00 6900 0000                     AC0           00 95C0 9200            
AC1           00 0023 0000                     AC1           00 0023 0000
*AR1                  EF00                     *AR1                  EF00
AR2                   0201                     AR2                   0202
*CDP                  A067                     *CDP                  A067
ACOV0                    0                     ACOV0                    1
ACOV1                    0                     ACOV1                    0
CARRY                    0                     CARRY                    0
M40                      0                     M40                      0
FRCT                     0                     FRCT                     0
SATD                     0                     SATD                     0

指令5:

ADD *AR1 << T0, AC1, AC0

Before                                              After                              
AC0          00 0000 0000                           AC0             00 2330 0000
AC1          00 2300 0000                           AC1             00 2300 0000
T0                   000C                           T0                      000C
AR1                  0200                           AR1                     0200
200                  0300                           200                     0300
SXMD                    0                           SXMD                       0
M40                     0                           M40                        0
ACOV0                   0                           ACOV0                      0
CARRY                   0                           AC0V1                      1

指令分析:

  1. ADD *AR3+, T0, T1:这是一个寄存器操作指令。它将 AR3 指向的内存位置的值与寄存器 T0 的值相加,结果存储在寄存器 T1 中,并递增 AR3 的值。

  2. MOV *AR3+ << 16, AC1:这是一个移位和加载指令。它将 AR3 指向的内存位置的值左移 16 位(二进制左移16位相当于十六进制左移四位,所以在右边补四个0),然后将结果加载到累加器 AC1 中,并递增 AR3 的值。

  3. ADDSUBCC *AR1, AC0, TC2, AC1:这是一个累加-减指令。它将 AR1 指向的内存位置的值和 AC0 寄存器中的值相加,并将结果存储到 AC1 寄存器中,同时将进位(carry)结果存储到 TC2 寄存器。

  4. AMAR *AR2+ :: MAC uns(*AR1), uns(*CDP), AC0 >> #16:这是一系列的宏指令。它是一种特殊的操作,包含了更多的操作代码(宏定义),主要用于特定的运算或功能。这里的宏定义了一些不同的操作,包括了取模运算和移位操作。

  5. ADD *AR1 << T0, AC1, AC0:这是一个寄存器操作指令。它将 *AR1 指向的内存位置的值左移 T0 寄存器中的值所指定的位数,并将结果与 AC1 寄存器中的值相加,最终结果存储在 AC0 寄存器中。

这些指令主要是对寄存器进行操作、内存加载和移位运算等,实现了对数据的加减、移位等操作。

四、实验程序

.mmregs.model call=c55_std;.model mem=large.global	x.bss	x,1,0,0.sym	x,x, 4, 2, 16.global	y.bss	y,1,0,0.sym	y,y, 4, 2, 16.global	z.bss	z,1,0,0.sym	z,z, 4, 2, 16.sect	".text".align 4.global	start.sym	start,start, 36, 2, 0
start:MOV #2, *(#y) MOV #1, *(#x) 
L1:    MOV *(#y), AR3ADD *(#x), AR3, AR3MOV AR1, *(#z) ;ADD *AR3+, T0, T1;MOV *AR3+ << #16, AC1;ADDSUBCC *AR3,AC0,TC2,AC1AMAR *AR2+
:: MAC uns(*AR1), uns(*CDP), AC0 >> #16ADD *AR1 << T0, AC1, AC0B L1   

这段汇编代码是为 C55x DSP 架构编写的程序,主要包含了一些寄存器操作和指令。下面对代码的不同部分进行解释和分析:

  1. .mmregs:这个部分主要是定义了寄存器变量和分配内存,为代码中使用的寄存器和内存空间分配了一定的存储空间。

  2. .model call=c55_std:指定使用 C55x 标准模型。

  3. .sect ".text":定义了一个文本段,通常用于存放可执行代码。

  4. .global start:声明一个名为 start 的全局标签。

  5. MOV #2, *(#y)MOV #1, *(#x):将值 21 分别存储到 yx 所指向的内存位置。这里使用 # 表示立即数,*() 表示存储到内存的操作。

  6. L1::定义一个标签 L1,用于在程序中作为一个跳转的目标点。

  7. MOV *(#y), AR3:将 y 所指向的内存位置的值加载到 AR3 寄存器中。

  8. ADD *(#x), AR3, AR3:将 x 所指向的内存位置的值与 AR3 寄存器中的值相加,结果存储回 AR3 寄存器。

  9. MOV AR1, *(#z):将 AR1 寄存器中的值存储到 z 所指向的内存位置。

  10. AMAR *AR2+ :: MAC uns(*AR1), uns(*CDP), AC0 >> #16:这是一个复杂的宏指令,涉及到一些特殊操作,包括乘法和移位等。具体的操作需要参考相关的宏定义和上下文,这个宏指令的含义需要更多代码或宏定义的信息才能完全解释清楚。

  11. ADD *AR1 << T0, AC1, AC0:将 *AR1 所指向的内存位置的值左移 T0 寄存器中的值所指定的位数,并将结果与 AC1 寄存器中的值相加,最终结果存储在 AC0 寄存器中。

需要注意的是,这段代码在涉及到宏定义和一些特殊指令时,其具体含义和操作需要结合整个程序的上下文和宏定义来理解。

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

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

相关文章

vcpkg安装zlmediakit(windows环境)

文章目录 一、简介二、vcpkg安装1. vcpkg源码下载2. vcpkg安装 三、安装zlmediakit1. 默认安装开启特性: [core,mp4,openssl,webrtc]2. 安装全部特性zlmediakit(包括webrtc datachannel)3. 安装路径4. 安装不同的版本5. 卸载 四、问题1. 启动服务乱码问题 一、简介 vcpkg是一个…

2401vim,vim重要修改更新大全

原文 2023 更好的UTF-16支持 添加strutf16len()和utf16idx(),并在byteidx(),byteidxcomp()和charidx()中添加utf16标志,在内置.txt文档中. 添加crypymethod xchacha20v2 与xchacha20基本相同,但更能抵御libsodium的变化. 2022 添加"smoothscroll" 用鼠标滚动…

Saprk SQL基础知识

一.Spark SQL基本介绍 1.什么是Spark SQL Spark SQL是Spark多种组件中其中一个,主要是用于处理大规模的[结构化数据] Spark SQL的特点: 1).融合性:既可以使用SQL语句,也可以编写代码,同时支持两者混合使用. 2).统一的数据访问:Spark SQL用统一的API对接不同的数据源 3).H…

超好用的阅读器更新摸鱼模式啦

潮汐阅读器重磅更新啦&#xff01;这次更新的是隐蔽模式&#xff08;摸鱼模式&#xff09;。 何为隐蔽模式&#xff1f;就是将阅读窗口的标题栏隐藏掉&#xff0c;从而可以使阅读窗口可以隐藏在任意其他窗口里面不被发现&#xff0c;从而可以快乐的看小说摸鱼啦&#xff01; …

InfluxDB学习笔记

本博客是我在学习InfluxDB的时候&#xff0c;记录的笔记&#xff0c;大家可以看看参考学些。 简介 简述 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成&#xff0c;着力于高性能查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据&#xff0c;IoT…

18.将文件上传至云服务器 + 优化网站的性能

目录 1.将文件上传至云服务器 1.1 处理上传头像逻辑 1.1.1 客户端上传 1.1.2 服务器直传 2.优化网站的性能 2.1 本地缓存优化查询方法 2.2 压力测试 1.将文件上传至云服务器 客户端上传&#xff1a;客户端将数据提交给云服务器&#xff0c;并等待其响应&#xff1b;用户…

软件工程造价师证书有用吗?难不难考?

&#x1f3af;软件工程造价师证书是有用的&#xff0c;它证明了持有人具备评估和估算软件开发cheng本、进度和资源规划的能力。✔️在IT行业中&#xff0c;受高度重视&#xff0c;特别是在软件开发和项目管理领域。 &#x1f469;软件工程造价师考试难易程度因人而异。该证书需…

影响代理IP稳定性的因素有哪些?

代理IP作为一种网络服务&#xff0c;在生活中扮演着各种各样的角色。它们可以用于保护隐私、突破访问限制、提高网络安全性等。代理IP的稳定性受到多种因素的影响&#xff0c;下面和大家探讨一下影响代理IP稳定性的因素。 1、网络环境&#xff1a;代理IP所处的网络环境对它的稳…

腾讯云新用户的定义与权益

腾讯云作为国内领先的云计算服务提供商&#xff0c;吸引了越来越多的用户。对于新用户来说&#xff0c;了解腾讯云的新用户定义和相关权益非常重要&#xff0c;因为它关系到用户能否享受到更多的优惠和服务。 一、腾讯云新用户的定义 腾讯云新用户是指首次注册腾讯云账号并且没…

【数据库】mysql事务

一、事务的基本概念 1、事务的定义 事务可由一条非常简单的SQL语句组成&#xff0c;也可以由一组复杂的SQL语句组成。。 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性&#xff0c;保证成批的 SQL 语句要么全部执行&…

Java技术专题:「入门到精通系列」深入探索常用的六种加密技术和实现

文章目录 1. 引言2. 对称加密3. 非对称加密4. 哈希算法5. 消息摘要6. 数字签名7. 数字证书8. 拓展功能与未来展望 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&am…

产品经理如何选择城市?

年底&#xff0c;全国性的人口大迁徙即将开始。选择城市&#xff0c;堪称年轻人的“二次投胎”&#xff0c;族望留原籍&#xff0c;家贫走他乡。 古人在选择城市时&#xff0c;主要的考量因素是家族势力&#xff0c;这一点放在当代&#xff0c;大致也成立&#xff0c;如果在老…

如何在CentOS安装SQL Server数据库并通过内网穿透工具实现公网访问

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…

C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry

文章目录 前言反射是什么&#xff1f;常用类型操作SummryPropertyInfoMethodInfo无参函数运行 有参函数运行,获取paramterInfo 总结 前言 我之前写了一篇Attribute特性的介绍&#xff0c;成功拿到了Attribute的属性&#xff0c;但是如果把Attribute玩的溜&#xff0c;那就要彻…

【Databend】数据库和表操作

文章目录 数据库操作数据表操作创建表删除表和恢复表查看表修改表 总结 数据库操作 基本语法&#xff1a; -- 创建数据库 create database if not exists database_name; -- 查看创建数据库语句 show create database database_name; -- 使用数据库 use database_name; -- 重…

什么是企业数字化转型?数字化的价值体现在哪里?

从2015年接触平安的数字化转型&#xff0c;到2021年承接阿里云的服务数字化项目&#xff0c;再到2023年主导大大小小10来个数字化项目&#xff0c;8年的时间&#xff0c;数字化对我而言已经从一个“新词”变成了一个“旧词”。 8年过去&#xff0c;数字化也从一道企业的“选做…

迎接人工智能的下一个时代:ChatGPT的技术实现原理、行业实践以及商业变现途径

课程背景 2023年&#xff0c;以ChatGPT为代表的接近人类水平的对话机器人&#xff0c;AIGC不断刷爆网络&#xff0c;其强大的内容生成能力给人们带来了巨大的震撼。学术界和产业界也都形成共识&#xff1a;AIGC绝非昙花一现&#xff0c;其底层技术和产业生态已经形成了新的格局…

[Vulnhub靶机] DriftingBlues: 2

[Vulnhub靶机] DriftingBlues: 2靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues2.ova 靶机地址&#xff1a;192.168.67.21 攻击机地址&#xff1a;192.168.67.3 一、信息收集 1.…

Linux在应用层上使用I2C

Linux在应用层上使用I2C 通常情况下i2c读写一般是在kernel中使用&#xff0c;但是在应用层上一样可以使用。在应用上可以通过读写/dev/i2c-x这个节点从而控制i2c接口进行读写数据。 通常一个SOC有多个I2C控制器&#xff0c;假设有这个SOC有3个控制器&#xff0c;我们会在/dev目…

led手电筒照明线性恒流驱动芯片推荐:SM2123EGL双通道可调光

LED手电筒照明线性恒流驱动芯片是一种专门用于LED手电筒的照明系统的关键组件。它采用了线性恒流驱动技术&#xff0c;可以确保LED手电筒在不同电池电压和温度变化下&#xff0c;保持恒定的亮度输出&#xff0c;提高了LED手电筒的稳定性和可靠性。 LED手电筒照明线性恒流驱动芯…