用唐都实验箱通过微指令实现冒泡排序,原码一位乘和栈的相关操作

这篇具有很好参考价值的文章主要介绍了用唐都实验箱通过微指令实现冒泡排序,原码一位乘和栈的相关操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内含内容如有错漏或未解释清楚之处请私信博主进行讨论,讨论后予以更新

需要word和源码文件交流也请私信博主

摘要

1 前言

2 实验原理

2.1 数据格式

2.2 指令格式

2.3 数据通路框图

3 总体****设计

3.1 微指令流程图

3.2 指令系统

3.3 线路连接图

4 详细设****计

4.1 冒泡排序

4.2 原码一位乘

4.3 堆栈

5 实验结果

5.1 冒泡排序

5.2 原码一位乘

5.3堆栈

6 参考文献

摘要

本次课程设计首先对复杂模型机进行研究,了解复杂模型机的工作原理,然后实现实验箱中硬件接线,并用测试样例测试连线是否正确。测试通过后,对复杂模型机指令系统进行运用和改写,通过编写汇编语言代码和微程序指令,实现了冒泡排序、四位原码一位乘和栈这三个功能。

关键字:复杂模型机 冒泡排序 原码一位乘 栈

1 前言

《计算机组成原理》是高等学校计算机专业的一门核心课程,通过对复杂模型机的学习, 可以 使学生理解单处理机系统的组成结构,以及各功能部件的组成和工作原理, 帮助学生建立计算机的整机概念。

模型机必须能提供不同复杂程度的数据通路和运算功能,必须能实现不同复杂程度的指令系统。 复杂模型机首先要实现一个简单的CPU,并且在此 CPU 的基础上,继续构建一个复杂的模型计算机。 CPU 由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0), 指令寄存器(IR)、程序计 数器(PC)和地址寄存器(AR)组成,如图 3.1 所示。这个 CPU 在写入相应的微指令后, 就具备了 执行机器指令的功能,但是机器指令一般存放在主存当中,CPU 必须和主存挂接后,才有实际的意 义, 所以还需要在该 CPU 的基础上增加一个主存和基本的输入输出部件,以构成一个复杂的模型计算机。

模型机设计三大类指令共十五条,其中包括运算类指令、控制转移类指令, 数据传送类指令。 运算类指令包含三种运算,算术运算、逻辑运算和移位运算,设计有 6 条运算类指令,分别为:ADD、 AND 、INC 、SUB 、OR、RR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。控制转 移类指令有三条 HLT 、JMP 、BZC,用以控制程序的分支和转移,其中 HLT 为单字节指令,JMP 和 BZC 为双字节指令。数据传送类指令有 IN 、OUT、MOV、LDI、LAD 、STA 共 6 条,用以完成寄存 器和寄存器、寄存器和 I/O、寄存器和存储器之间的数据交换, 除 MOV 指令为单字节指令外,其余 均为双字节指令。

在本次复杂模型机实验中,我们通过硬件接线、程序运行和冒泡排序、补码一位乘法和堆栈功能代码的编写,深入了解了计算机系统各模块的工作原理及相互间的联系,熟悉计算机内部的数据流向,清晰建立计算机整机概念。

2 实验原理

2.1 数据格式

模型机规定采用定点补码表示法表示数据,字长为8位, 8 位全用来表示数据(最高位不表示符号) ,数值表示范围是: 0≤X≤28-1。

寄存器为8位,数据字段长度FFH。

2.2 指令格式

所有单字节指令(ADD、AND、INC、SUB、OR、RR、HLT和MOV)格式如下:

表 2.2.1 单字节指令

7654 32 10
OP-CODE RS RD

其中, OP-CODE 为操作码,RS 为源寄存器, RD 为目的寄存器, 并规定:

表 2.2.2 RS,RD

RS 或 RD 选定的寄存器
00 R0
01 R1
10 R2
11 R3

IN 和 OUT 的指令格式为:

表 2.2.3 IN,OUT

7654 32 10(1) 7—0(2)
OP-CODE RS RD P

其中括号中的1表示指令的第一字节,2表示指令的第二字节,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,P为I/O端口号,占用一个字节.用的是地址总线的高两位进行译码,I/O地址空间被分为四个区,如表2.3.2 所示:

表 2.2.4 I/O 地址空间分配

A7 A6 选定 地址空间
00 IOY0 00-3F
01 IOY1 40-7F
10 IOY2 80-BF
11 IOY3 C0-FF

系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI 指令为立即寻址, LAD 、STA 、JMP 和 BZC 指令均具备直接、间接、变址和相对寻址能力。LDI 的指令格式如下, 第一字节同前一样,第二字节为立即数。

表 2.2.5 寻址

7654(1) 32(1) 10(1) 7—0(2)
OP-CODE RS RD data

LAD 、STA 、JMP 和 BZC 指令格式如下。

表 2.2.6 指令格式

7654(1) 32(1) 10(1) 7—0(2)
OP-CODE M RD D

其中 M 为寻址模式, 具体见表 2.2.7,以 R2 做为变址寄存器 RI。

表 2.2.7 寻址方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XnziDOY-1679752238166)(file:///C:\Users\cfreeze\AppData\Local\Temp\ksohtml18156\wps3.jpg)]

2.3 数据通路框图

本模型机的数据通路框图如图 2.4.1 所示。

源码一位乘模型机,windows 10,算法

图 2.3.1 数据通路框图

3 总体设计

3.1 微指令流程图

本模型机共有15条基本指令,表3.1.1列出了各条指令的格式、汇编符号、指令功能。

表3.1.1 基本指令说明
源码一位乘模型机,windows 10,算法

依据功能需要,我们把复杂模型机中的指令进行了一定的更改,把地址为 3B 的保留指令设计为 DEC 指令,并把地址为 15 的微指令更改为自减一指令

3.2 指令系统

经过更改后的微指令二进制代码表如表 3.2.1 所示。

表 3.2.1 二进制代码表

地址 十六进制表示 高五位 S3-S0 A 字段 B 字段 C 字段 UA5-UA0
00 00 00 01 00000 0000 000 000 000 000001
01 00 6D 43 00000 0000 110 110 101 000011
03 10 70 70 00010 0000 111 000 001 110000
04 00 24 05 00000 0000 010 010 000 000101
05 04 B2 01 00000 1001 011 001 000 000001
06 00 24 07 00000 0000 010 010 000 000111
07 01 32 01 00000 0010 011 001 000 000001
08 10 60 09 00010 0000 110 000 000 001001
09 18 30 01 00011 0000 011 000 000 000001
0A 10 60 10 00010 0000 110 000 000 010000
0B 00 00 01 00000 0000 000 000 000 000001
0C 10 30 01 00010 0000 011 000 000 000001
0D 20 06 01 00100 0000 000 011 000 000001
0E 00 53 41 00000 0000 101 001 101 000001
0F 00 00 CB 00000 0000 000 000 011 001011
10 28 04 01 00101 0000 000 010 000 000001
11 10 30 01 00010 0000 011 000 000 000001
12 06 B2 01 00000 1101 011 001 000 000001
13 00 24 14 00000 0000 010 010 000 010100
14 05 B2 01 00000 1011 011 001 000 000001
15 06 32 01 00000 1100 011 001 000 000001
16 01 B2 01 00000 0011 011 001 000 000001
17 00 24 18 00000 0000 010 010 000 011000
18 02 B2 01 00000 0101 011 001 000 000001
1B 00 53 41 00000 0000 101 001 101 000001
1C 10 10 1D 00010 0000 001 000 000 011101
1D 10 60 8C 00010 0000 110 000 010 001100
1E 10 60 1F 00010 0000 110 000 000 011111
1F 10 10 20 00010 0000 001 000 000 100000
20 10 60 8C 00010 0000 110 000 010 001100
28 10 10 29 00010 0000 001 000 000 101001
29 00 28 2A 00000 0000 010 100 000 101010
2A 04 E2 2B 00000 1001 110 001 000 101011
2B 04 92 8C 00000 1001 001 001 010 001100
2C 10 10 2D 00010 0000 001 000 000 101101
2D 00 2C 2E 00000 0000 010 110 000 101110
2E 04 E2 2F 00000 1001 110 001 000 101111
2F 04 92 8C 00000 1001 001 001 010 001100
30 00 16 04 00000 0000 001 011 000 000100
31 00 16 06 00000 0000 001 011 000 000110
32 00 6D 48 00000 0000 110 110 101 001000
33 00 6D 4A 00000 0000 110 110 101 001010
34 00 34 01 00000 0000 011 010 000 000001
35 00 00 35 00000 0000 000 000 000 110101
36 00 6D 51 00000 0000 110 110 101 010001
37 00 16 12 00000 0000 001 011 000 010010
38 00 16 13 00000 0000 001 011 000 010011
39 00 16 15 00000 0000 001 011 000 010101
3A 00 16 17 00000 0000 001 011 000 010111
3B 00 16 15 00000 0000 001 011 000 010101
3C 00 6D 5C 00000 0000 110 110 101 011100
3D 00 6D 5E 00000 0000 110 110 101 011110
3E 00 6D 68 00000 0000 110 110 101 101000
3F 00 6D 6C 00000 0000 110 110 101 101100

3.3 线路连接图

实验线路图如图3.2.1 所示,实验开始前需仔细检查接线后打开实验箱电源。

源码一位乘模型机,windows 10,算法

图3.3.1 线路连接图

4 详细设计

4.1 冒泡排序

4.1.1 冒泡排序流程图

源码一位乘模型机,windows 10,算法

图4.1.1 冒泡排序流程图

*4.1.2 设计原理*

冒泡排序(Bubble Sort)是排序算法里面比较简单的一个排序。它重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止

*4.1.3 总体思路*

先输入待排序的数量至 R0,接着保存长度到 F1H 中,从 F1H 处取出数据送到 R2, 此步作为输入循环控制。

输入待排序数至 R0,采用变址寻址方式保存数据, 其中 E0 为基地址,寄存器R2自减,若R2不等于0,则重新进入输入循环控制中; 若R2等于0,则跳到外循环控制中。

将R3中的数据送到R2中,R2作为内循环控制。接着通过变址寻址方式取值送到R1中, 作为当前比较数,之后把最大值送入到 F2 中,保存最大数。

比较 R0 与 R1 中的数据,若R1大于R0,则保存较大值位置,并取出较小值送到 R0,把较小值 R0 存到原来较大值的位置,再将R2自减;否则 直接进入 R2 自减步骤。判断 R2 是否为 0,若是,R3 自减,否则进入内循环控制。接着判断 R3 是否 为 0,若是则输出结果, 否则进入内循环控制。

*4.1.4 源程序代码*

$P 00 21 ;IN R1,00H

$P 01 00 ;

$P 02 71 ;INC R1

$P 03 D1 ;STA R1,60H

$P 04 60 ;

$P 05 60 ;LDI R0,01H

$P 06 01

;LOOP:

$P 07 C1 ;LAD R1,60H

$P 08 60 ;

$P 09 81 ;SUB R1,R0

$P 0A F0 ;BZC HALT///OUT

$P 0B 26

$P 0C D1 ;STA R1,60H

$P 0D 60 ;

$P 0E 81 ;SUB R1,R0

$P 0F D1 ;STA R1,5FH

$P 10 5F

$P 11 62 ;LDI R2,61H

$P 12 61

;LOOP2:

$P 13 C8 ;LAD R0,[RI],00H

$P 14 00

$P 15 72 ;INC R2

$P 16 C9 ;LAD R1,[RI],00H

$P 17 00 ;

$P 18 84 ;SUB R0,R1

$P 19 F0 ;BZC EX

$P 1A 37 ;

;RET:

$P 1B 60 ;LDI R0,01H

$P 1C 01

$P 1D C3 ;LAD R3,5FH

$P 1E 5F ;

$P 1F 83 ;SUB R3,R0

$P 20 D3 ;STA R3,5FH

$P 21 5F ;

$P 22 F0 ;BZC LOOP

$P 23 07

$P 24 E0 ;JMP LOOP2

$P 25 13

$P 26 62;LDI R2,60HLOOP///OUT

$P 27 60

$P 28 60;LDI R0,03

$P 29 03

$P 2A 72;INC R2

$P 2B C9;LAD R1

$P 2C 00

$P 2D 34;OUT

$P 2E 40

$P 2F 61;DEC R0,LDIR1 01 SUB

$P 30 01

$P 31 84

$P 32 F0;BZC HALT

$P 33 36

$P 34 E0;JMP LOOP

$P 35 2A

$P 36 50 ;HALT

;EX:

$P 37 E0 ;JMP 29

$P 38 39 ;

$P 39 CB ;LAD R3,[RI],00H

$P 3A 00

$P 3B 60 ;LDI R0,01H

$P 3C 01

$P 3D 82 ;SUB R2,R0

$P 3E C8 ;LAD R0,[RI],00H

$P 3F 00

$P 40 72 ;INC R2

$P 41 D8 ;STA R0,[RI],00H

$P 42 00

$P 43 60 ;LDI R0,01H

$P 44 01

$P 45 82 ;SUB R2,R0

$P 46 D9 ;STA R1,[RI],00H

$P 47 00 ;

$P 48 72 ;INC R2

$P 49 E0 ;JMP RET

$P 4A 1B

;存放数字

$P 61 01

$P 62 03

$P 63 02

$P 64 04

$P 65 05

$P 66 06

$P 67 06

$P 68 08

$P 69 09

$P 6A 0A

$P 6B 0B

$P 6C 0C

$P 6D 0D

$P 6E 0E

$P 6F 0F

$P 70 10

$P 71 11

$P 72 12

$P 73 12

$P 74 14

4.2 原码一位乘

4.2.1设计原理

4.2.2总体思路

在定点补码一位乘的过程中,给各个寄存器和存储单元赋初值,再通过乘数放乘积的低八位,存储单元和寄存器r0放乘数的高八位,每次先判断乘数最低位是否为0,为1则进行部分积加被乘数,同时保留溢出,保留部分积最低位,将乘数最低位置零,再加上部分积的最低位并进行一次右环移),再将部分积最低位置零再右环移,并加回溢出值,判断结束,运算结束输出结果,否则返回再循环。

4.2.3流程图

定点原码一位乘的总体流程如图所示:
源码一位乘模型机,windows 10,算法

图4.2.3 补码一位乘流程图

4.2.4 源程序代码

$P 00 20 ;IN R0, 00H

$P 01 00 ;

$P 02 21 ;IN R1, 00H ;读取输入的值分别存储到R0和R1里

$P 03 00 ;

$P 04 62 ;LDI R2,F0H

$P 05 F0

$P 06 63 ;LDI R3,0FH

$P 07 0F

$P 08 18 ;AND R0,R2 ;X

$P 09 1D ;AND R1,R3 ;Y

$P 0A 62 ;LDI R2, 00H ;计数

$P 0B 00 ;

$P 0C 63 ;LDI R3, 00H ;部分积

$P 0D 00 ;

$P 0E D0 ;STA 00, F0H, R0 ;存储X的数据到f0单元

$P 0F F0 ;

$P 10 60 ;LDI R0, 00H ;初始化进位标志位为0

$P 11 00 ;

$P 12 D0 ;STA 00H, F4H, R0 ;存储进位标志

$P 13 F4 ;

$P 14 72 ;INC R2

$P 15 60 ;LDI R0,05H ;循环次数:5-1=4

$P 16 05 ;

$P 17 88 ;SUB R0, R2 ;比较循环次数

$P 18 F0 ;BZC Output ;zf=0 end

$P 19 49 ;

$P 1A 60 ;LDI R0,01H

$P 1B 01

$P 1C 14 ;AND R0,R1; 取最后一位的值

$P 1D F0 ;BZC Preser0 ;最后一位为0跳转

$P 1E 21

$P 1F E0 ;JMP Preser1 ;为1跳另一个

$P 20 31

$P 21 60 ;LDI R0,01H;

$P 22 01

$P 23 D2 ;STA 00H, F1H, R2 ;存储计数值

$P 24 F1

$P 25 A1 ;RR R1,R0

$P 26 A3 ;RR R3,R0 ;部分积和Y右移一位

$P 27 4C;MOV R0,R3

$P 28 62;LDI R2,08H

$P 29 08

$P 2A 18;AND R0,R2

$P 2B 01;ADD R1,R0 ;;;右一后将乘数第一位补充上

$P 2C 62 ;LDI R2, 80

$P 2D 80

$P 2E 1E ;AND R2,R3

$P 2F E0;JMP A0;;

$P 30 5C

$P 31 C0 ;LAD 00, F0H, R0 ;取出X

$P 32 F0

$P 33 03 ;ADD R3,R0 ;加一个X

$P 34 F0 ;BZC C0 相加有进位,

$P 35 55 ;

$P 36 D2 ;STA 00H, F1H, R2 ;存储计数值

$P 37 F1

$P 38 62 ;LDI R2, 80H

$P 39 80

$P 3A 60 ;LDI R0,01H

$P 3B 01

$P 3C A1 ;RR R1,R

$P 3D A3 ;RR R3,R0

$P 3E 4C;MOV R0,R3

$P 3F 62; LDI R2,08H

$P 40 08

$P 41 18;AND R0,R2

$P 42 01;ADD R1,R0

$P 43 E0;JMP A0

$P 44 5C

$P 45 C2 ;LAD 00H, F1H, R2

$P 46 F1

$P 47 E0 ;JMP Right

$P 48 14

$P 49 60 ;LDI R0,0FH

$P 4A 0F

$P 4B 62 ;LDI R2,F0H

$P 4C F0

$P 4D 1B ;AND R3,R2

$P 4E 11 ;AND R1,R0

$P 4F 07 ;ADD R3,R1

$P 50 3C ;OUT 40H, R3

$P 51 40;

$P 52 D3 ;STA 00H, F2H, R3

$P 53 F2

$P 54 50 ;HALT

$P 55 60 ;LDI R0 01H

$P 56 01 ;

$P 57 D0 ;STA 00H, F4H, R0 ;存储进位标志

$P 58 F4

$P 59 80 ;SUB R0,R0 ;清空进位标志位

$P 5A E0 ;JMP C1 ;相加有进位返回此处

$P 5B 36

$P 5C C0 ;LAD 00H, F4H, R0 ;取出进位标志位

$P 5D F4 ;

$P 5E 62 ;LDI R2,01H

$P 5F 01 ;

$P 60 82 ;SUB R2,R0

$P 61 F0 ;BZC A2 ;进位为1

$P 62 68 ;

$P 63 62 ;LDI R2, 7FH

$P 64 7F ;

$P 65 1B ;AND R3,R2 ;让部分积最高位置0

$P 66 E0 ;JMP A1 ;;部分积最高位为0

$P 67 45 ;

;A2:

$P 68 62 ;LDI R2, 80H

$P 69 80 ;

$P 6A 9B ;OR R3, R2 ;部分积最高位置1

$P 6B 60 ;LDI R0, 00H ;重置标志位为0

$P 6C 00 ;

$P 6D D0 ;STA 00H, F4H, R0

$P 6E F4 ;

$P 6F E0 ;JMP A1

$P 70 45 ;

4.3 堆栈

4.3.1 设计原理

栈(stack)又称堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称进栈、入栈或者是压栈,它是把新元素放到栈顶元素的上面,使之称为新的栈顶元素;从一个栈删除一个元素又称出栈或者是退栈,它是把栈顶元素删除掉,使其相邻的元素称为新的栈顶元素。当栈中没有任何元素时称为空栈。

4.3.2 栈约束

源码一位乘模型机,windows 10,算法

图4.3.2.1 栈初始化

源码一位乘模型机,windows 10,算法

图4.3.2.2 入栈

源码一位乘模型机,windows 10,算法

图4.3.2.3 出栈

源码一位乘模型机,windows 10,算法

图4.3.2.4 上溢说明

4.3.3 堆栈流程图
源码一位乘模型机,windows 10,算法

图4.2.3 堆栈流程图

4.3.4 源程序代码

START: 初始化栈栈底栈容量初始化栈内数据
IN R0,00H 把00H端口的数据放入R0(输入操作数)
LDI R1,01H 装入比较值
SUB R1,R0 相减
BZC P1LDI R1,02H 装入比较值
SUB R1,R0 相减
BZC P2LDI R1,04H 装入比较值
SUB R1,R0 相减
BZC P3LDI R1,08H 装入比较值
SUB R1,R0 相减
BZC P4LDI R1,10H 装入比较值
SUB R1,R0 相减
BZC P5
P1: 入栈功能
IN R0,00 输入入栈元素
LDI R2,61HLAD R1,[RI],00HINC R1STA 61H,R1 栈内数据个数++R1
LDI R2,62HLAD R3,[RI],00HINC R3SUB R3,R1BZC WARN 判上溢 容量 R3
LDI R2,63HLAD R1,[RI],00H ;r1存栈顶地址MOV R2,R1STA R0,[RI],00H 存数
LDI R1,01HSUB R2,R1STA 63H,R2 栈顶指针减一
JMP START 跳转到开始
P2: 出栈
LDI R2,60HLAD R1,[RI],00HSUB R0,R1BZC WARN 判下溢,提示
LDI R2,63HLAD R0,[RI],00HINC R0STA 63H,R0 栈顶指针加一
LDI R2,61HLAD R0,[RI],00HLDI R1,01HSUB R2,R1STA 61H,R2 栈内数据数-1
JMP START 跳转到开始
P3: 展示元素//需要判断是否是从指针加1开始的
LOOP:
LAD R0,63H 取地址
LAD R1,R0 取地址内的数
OUT 40H,R1 显示数据
INC R0 指针++
LAD R2,60HINC R2SUB R0,R2BZC START;等于0就跳会选项JMP LOOP;未显示完返回显示 判断指针是否等于栈底地址+1(下溢不显示)
P4: 展示元素个数
LAD R0,61HOUT 40H,R0 显示数据
JMP START
p5: 清空栈
LDI R2,60HLAD R0,[RI],00HLDI R2,63HSTA R0,[RI],00H 把栈底地址R0写入栈顶地址63H
WARN:
LDI R0,FFH
OUT 40H,R0
JMP START

4.3.5 微程序代码

$P0020

$P0100

$P0261

$P0301

$P0484

$P05F0

$P0621

$P0720

$P0800

$P0961

$P0A02

$P0B84

$P0CF0

$P0D46

$P0E20

$P0F00

$P1061

$P1104

$P1284

$P13F0

$P145F

$P1520

$P1600

$P1761

$P1808

$P1984

$P1AF0

$P1B72

$P1C20

$P1D00

$P1E61

$P1F10

$P2064

$P21F0

$P227A

$P2120

$P2200

$P2362

$P2491

$P25C9

$P2600

$P2771

$P2862

$P2992

$P2ACB

$P2B00

$P2C73

$P2D87

$P2EF0

$P2F84

$P30D1

$P3191

$P3262

$P3393

$P34C9

$P3500

$P3646

$P37D8

$P3800

$P3961

$P3A01

$P3B86

$P3CD2

$P3D93

$P3E62

$P3FFF

$P40C9

$P4100

$P4234

$P4340

$P44E0

$P4500

$P4662

$P4790

$P48C9

$P4900

$P4A84

$P4BF0

$P4C84

$P4D62

$P4E93

$P4FC8

$P5000

$P5170

$P52D0

$P5393

$P5462

$P5591

$P56C8

$P5700

$P5861

$P5901

$P5A86

$P5BD2

$P5C91

$P5DE0

$P5E00

$P5F62

$P6093

$P61C8

$P6200

$P6362

$P6490

$P65C9

$P6600

$P6784

$P68F0

$P6900

$P6A70

$P6B42

$P6CC9

$P6D00

$P6E34

$P6F40

$P70E0

$P715F

$P7262

$P7391

$P74C9

$P7500

$P7634

$P7740

$P78E0

$P7900

$P7A62

$P7B90

$P7CC8

$P7D00

$P7E62

$P7F93

$P80D8

$P8100

$P8300

$P8460

$P8500

$P86D0

$P8791

$P82E0

$P8300

$P8461

$P85FF

$P8634

$P8740

$P88E0

$P8900

$P8A50

$P90FF

$P9100

$P9202

$P93FF

5 实验结果

5.1 冒泡排序

依次输入1,3,2三个数,经排序,数码管应依次显示结果01,02,03,实验结果符合预期,如图5.1.1、5.1.2、5.1.3所示。
源码一位乘模型机,windows 10,算法

图5.1.1 冒泡排序实验结果1

源码一位乘模型机,windows 10,算法

图5.1.2 冒泡排序实验结果2

源码一位乘模型机,windows 10,算法

图5.1.3 冒泡排序实验结果3

5.2 原码一位乘

低四位输入0010(十进制为2),高四位输入0100(十进制为4),高四位和低四位相乘,输出结果应为十进制的08,实验结果符合预期,如图5.2所示。

源码一位乘模型机,windows 10,算法

图5.2 原码一位乘实验结果

5.3堆栈

输入0000 0001,实现入栈功能,将01压入栈,数码管应显示01,实验结果符合预期,如图5.3.1所示

源码一位乘模型机,windows 10,算法

图5.3.1 入栈实验结果

继续入栈,设置栈内容量为2,因此将两个01压入栈,会发生溢出,数码管应显示FF,实验结果符合预期,如图5.3.2所示
源码一位乘模型机,windows 10,算法

图5.3.2 溢出实验结果

输入0000 0010,实现元素出栈功能。

输入0000 0100,实现显示栈内元素功能,之前压入栈的数据为01,因此显示01,运行结果如图5.3.3所示

源码一位乘模型机,windows 10,算法

图5.3.3 显示栈内元素实验结果

输入0000 1000,实现显示栈内元素个数功能,之前将两个01压入栈,因此数码管应显示02,运行结果符合预期,如图5.3.4所示。

源码一位乘模型机,windows 10,算法

图5.3.4 显示栈内元素个数实验结果

输入0001 0000,实现清空栈内元素功能,此时,栈内元素清空,数码管应显示00,实验结果符合预期,如图5.3.5所示

源码一位乘模型机,windows 10,算法

图5.3.5 清空栈实验结果

此时,栈内无元素,在此显示栈内元素,数码管应显示00,实验结果符合预期,如图5.3.6所示。

源码一位乘模型机,windows 10,算法文章来源地址https://www.toymoban.com/news/detail-774935.html

到了这里,关于用唐都实验箱通过微指令实现冒泡排序,原码一位乘和栈的相关操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARM920T实验箱s3c2410 矩阵按键控制步进电机正反转和停止

    问题描述 按下第一个按键使步进电机可以正转、第二个反转反转、第三个按键停止 矩阵按键控制 画了张矩阵按键的内部电路图: 矩阵按键实物图: ABC 按键右边的就是步进电机。 按键第一行连接的是寄存器 GPFDAT0 的端口 第二行连接的是寄存器 GPFDAT2 的端口 第三行连接的是

    2024年02月09日
    浏览(46)
  • 20230705点亮STC32G实验箱9.6(STC32G12K128)开发板的跑马灯LED(深入了解)

    08第六集:LED闪烁第六集:LED闪烁和花式点灯上和花式点灯上.mp4 09第六集:LED闪烁和花式点灯下.mp4 【大文哥学习32位8051】20230704【冲哥视频】第六集的晶振时钟的学习困惑 2023/7/5 17:36 delay_ms(3000); 刷机的时候如果使用11.0592M的Fosc,3秒钟的延迟大概7秒钟。 刷机的时候如果使用

    2024年02月12日
    浏览(48)
  • 基于 matplotlib 实现的基本排序算法的动态可视化项目源码,通过 pyaudio 增加音效,冒泡、选择、插入、快速等排序

    依托 matplotlib 实现的基本排序算法的动态可视化,并通过 pyaudio 增加音效。 安装 在使用之前请先检查本地是否存在以下库: matplotlib pyaudio fire requirements.txt 中包含了上述的库 使用 目前本项目仅提供了以下排序算法 冒泡排序 选择排序 插入排序 快排 归并排序 命令行工具 命

    2024年02月08日
    浏览(42)
  • 图解基础排序算法(冒泡、插入、选择)(山东大学实验二)

      目录 ⚽前言: 🏐 冒泡排序: 设定: 分类: 起源: 图解冒泡: 图中绿色: 图中橙色: 整体思路: 交换思路: 核心代码:  🏀 图解插入: 设定: 插入思路: 整体思路: 核心代码: 🥎图解选择:  设定: 整体思路: 核心代码:  🎱山东大学实验二完整代码: 

    2024年01月17日
    浏览(66)
  • 【C++实战小项目】通讯录(四) 冒泡排序通过string首字母排序多个数组

    🧛‍♂️iecne个人主页: : iecne的学习日志 💡每天 关注 iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 首先制作一款通讯录我们可以将它分为以下部分 增加联系人 删除联系人 查找联系人 修改联系人 打印通讯录 排序通讯录 这一期我们

    2024年01月19日
    浏览(51)
  • Java实现:选择排序、冒泡排序、插入排序

    本文我们将使用Java编程语言实现经典的选择排序、冒泡排序和插入排序算法,并用对数器进行测试。 选择排序的基本思想是:遍历数组,每次找到数组中最小的元素,将其放到数组的前端。接着,在剩余的元素中继续寻找最小的元素,将其放在已找到的最小元素之后。重复

    2024年02月02日
    浏览(35)
  • 【排序算法】C语言实现选择排序与冒泡排序

    这里是阿辉算法与数据结构专栏的第一篇文章,咱们就从排序算法开始讲起,排序算法有很多大致分为两类:基于比较的排序和非比较的排序 基于比较的排序:冒泡、选择、插入、希尔、堆、归并、随机快排 非比较的排序:桶排序 以上的排序算法阿辉都会讲到,今天阿辉主

    2024年02月04日
    浏览(43)
  • 【C++实现插入排序、希尔排序、冒泡排序、快速排序、选择排序】

    使用C++实现来插入排序、希尔排序、冒泡排序、快速排序、选择排序算法。 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而生成一个新

    2024年02月06日
    浏览(48)
  • C++冒泡排序代码实现

    冒泡排序是一组数据元素中的相邻元素两两比较,如果满足前一个元素(i)比后一个元素(i+1)大则这两个元素交换,否则向后比较元素(i+1)和元素(i+2),这只是一轮排序。有n个元素需要排n-1轮,每一轮的排序都不用比较之前已经排好的数据,所以第i轮的比较次数为(n-i-1)次。(个人

    2024年02月16日
    浏览(43)
  • Python实现冒泡排序

    以下是使用Python实现冒泡排序的示例代码: 在上述代码中,bubble_sort 函数接受一个列表作为输入,并使用冒泡排序算法对其进行排序。算法通过比较相邻元素的大小,并在需要时交换它们的位置来实现排序。外层循环控制了排序的轮数,内层循环则遍历未排序部分,进行相邻

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包