设计一台嵌入式CISC模型机
设计一台嵌入式CISC模型机文章目录前言一、CISI是什么?二、课程设计选题2.微地址3.ROM代码总结文章目录文章目录文章目录前言一、CISI是什么?二、课程设计选题2.微地址3.ROM代码总结前言一、CISI是什么?自PC机诞生以来,入们一直沿用CISC指令集方式,它采用变长的指令格式,指令的种类比较多,编程和设计处理器时也较为麻烦。在CISC之后,人们发明了RISC,即精简指令系统计算机,它
文章目录
前言
一、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.
更多推荐
所有评论(0)