设计一台嵌入式CISC模型机

文章目录


前言

一、CISI是什么?

自PC机诞生以来,入们一直沿用CISC指令集方式,它采用变长的指令格式,指令的种类比较多,编程和设计处理器时也较为麻烦。在CISC之后,人们发明了RISC,即精简指令系统计算机,它的指令等长,且指令数较少,通过简化指令格式让计算机的结构更为简单,进而提高了运算速度。原本RISC应较为流行,现在在服务器上有一些RISC的应用,但是在普通的桌面机上还没有流行起来,因为早期的桌面软件是按CISC设计的并一直延续到现在,如果用RISC,将无法兼容。所以,微处理器厂商一直在走CISC的发展之路,,包括Intel、AMD,还有其它一些现已更名的厂商,如TI、Cyrix, 以及现在的VIA等。不过,由于RISC确实在设计和指令结构等方面具有先进的特性,现在的CISC结构微处理器基本上经过RISC改良,即已过渡成以RISC为内核、外围是CISC界面的微处理器。换句话说,现在的微处理器采用RISC技术为内核,通过译码器,将它转换成对外的CISC结构。像Intel Pentium系列、AMD K6系列就是这种结构的微处理器。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、课程设计选题

##本设计选择题目为A类第一题——输入包含5个整数(有符号数)的数组M,输出所有负数的立方和。

代码如下(示例):

汇编源程序:

MOV R0,00H  ;数据存放在RAM中的地址
MOV R1,4H   ;计数 从4H(4)开始,到-1时结束
MOV R3,00H  ;R3负数的平方和
L1:  
INT R2        ;输入一个数到R2
 STO R2,(R0)   ;将输入的数存放到RAM的(R0)地址
 INC R0        ;RAM地址指针+1
 DEC R1       ;计数-1
 TEST R1      ;测试计数是否到达5次,(R1)是否为负数
 JNS  L1       ;根据SF符号标志的判断,若不为负数,则跳转到L1       
 MOV R0  04H  ;当5个数输入存储完成后,重新初始化RAM指针,同时它也为计数值
 L2:  
LAD (R0) R2   ;将(R0)地址的数取出送到R2中
TEST R2      ;测试取出的数是否为负数
JNS L3       ;若不为负数,则跳转到L3
MOV R1,00H;方便R2的值转到R1
ADD R2,R1;

MUL R2,R2   ;//求立方
MUL R1,R2;
ADD R2,R3   ;再求平方和,把结果送到R3
L3: 
     	DEC R0      ;计数-1
 	TST R0       ;测试计数是否到达5次
 	JNS  L2       ;为正数,计数还不到5次,则跳转到L2
     	OUT R3

2.微地址

在这里插入图片描述

3.ROM代码

程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ROM IS
PORT(
		DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
		ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
		CS_I:IN STD_LOGIC
		);
END ROM;
ARCHITECTURE A OF ROM IS
BEGIN
DOUT <=
"0001000000000000" WHEN ADDR="00000000" AND CS_I = '0' ELSE	--MOV R0,00H 
"0001000100000100" WHEN ADDR="00000001" AND CS_I = '0' ELSE	--MOV R1,4H 
"0001001100000000" WHEN ADDR="00000010" AND CS_I = '0' ELSE	--MOV R3,00H "0010001000000000" WHEN ADDR="00000011" AND CS_I = '0' ELSE	--L1:INT R2 
"0011100000000000" WHEN ADDR="00000100" AND CS_I = '0' ELSE	--STO R2,(R0) 
"0100000000000000" WHEN ADDR="00000101" AND CS_I = '0' ELSE	--INC R0  
"0101000100000000" WHEN ADDR="00000110" AND CS_I = '0' ELSE	--DEC R1     
"0110000100000000" WHEN ADDR="00000111" AND CS_I = '0' ELSE	--TEST R1
"0111000000000011" WHEN ADDR="00001000" AND CS_I = '0' ELSE	--JNS  L1    
"0001000000000100" WHEN ADDR="00001001" AND CS_I = '0' ELSE	--MOV R0 04H 
"1000001000000000" WHEN ADDR="00001010" AND CS_I = '0' ELSE	--L2:LAD(R0) R2 
"0110001000000000" WHEN ADDR="00001011" AND CS_I = '0' ELSE	--TEST R2    
"0111000000010010" WHEN ADDR="00001100" AND CS_I = '0' ELSE	--JNS L3
"0001000100000000" WHEN ADDR="00001101" AND CS_I = '0' ELSE	-- MOV R1,00H
"1010100100000000" WHEN ADDR="00001110" AND CS_I = '0' ELSE	-- ADD R2,R1
"1001101000000000" WHEN ADDR="00001111" AND CS_I = '0' ELSE	--MUL R2,R2 
"1001011000000000" WHEN ADDR="00010000" AND CS_I = '0' ELSE	--MUL R1,R2
"1010101100000000" WHEN ADDR="00010001" AND CS_I = '0' ELSE	--ADD R2,R3 
"0101000000000000" WHEN ADDR="00010010" AND CS_I = '0' ELSE	--L3:DEC R0     
"0110000000000000" WHEN ADDR="00010011" AND CS_I = '0' ELSE	--TEST R0    
"0111000000001010" WHEN ADDR="00010100" AND CS_I = '0' ELSE	--JNS L2      
"1011110000000000" WHEN ADDR="00010101" AND CS_I = '0' ELSE	--OUT R3  
"0000000000000000";
END A;

总结

链接: maxplusⅡ详细操作链接说明.

运行结果:
在这里插入图片描述
工程代码下载:
链接: project.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白面师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值