计组-实验

实验1

1.实验目的

信息的二进制表示
使用C语言,依次输出以下几个变量在内存中存放的二进制形式,数字自行设置(注意不要和“将数字转换成二进制”的算法搞混,要求的是输出变量自身在计算机中存储的二进制形式)
(1)一个int型的正数
(2)一个int型的负数
(3)一个float型的正数
(4)一个float型的负数
(5)一个char型的字符
输出变量的二进制形式后,请结合课本内容分析,为何输出的是该结果。

2.实验背景知识与原理

相关知识点:补码、浮点数、ASCII码

3.实验过程与实验结果分析

简要用自己的话说明实验过程,提供实验结果并作出说明

#include<stdio.h>
#include<string.h>

void printBinaryDigitInt(int n)
{
	printf("%d的储存形式是:", n);
	for (int i = 0; i < 32; i++)
		printf("%d", (n & (1u << (31 - i))) != 0 ? 1 : 0);
	putchar('\n');
}

void printBinaryDigitFloat(float* pf)
{
	printf("%f的储存形式是:", *pf);
	int n = *(int*)pf;
	int sizeOfBits = sizeof(int) * 8;
	for (int i = sizeOfBits - 1; i >= 0; i--)
		printf("%d", n & (1 << i) ? 1 : 0);
	printf("\n");
}

void printBinaryDigitChar(char ch)
{
	printf("%c的储存形式是:", ch);
	for (int i = 0; i < 8; i++)
		printf("%d", (ch & (1u << (7 - i))) != 0 ? 1 : 0);
	putchar('\n');
}

int main()
{
	int a = 1, b = -1;
	float c = 1, d = -1;
	char e = 'a';
	printBinaryDigitInt(a);
	printBinaryDigitInt(b);
	printBinaryDigitFloat(&c);
	printBinaryDigitFloat(&d);
	printBinaryDigitChar(e);
 }

实验结果

1的储存形式是:00000000000000000000000000000001
-1的储存形式是:11111111111111111111111111111111
1.000000的储存形式是:00111111100000000000000000000000
-1.000000的储存形式是:10111111100000000000000000000000
a的储存形式是:01100001

4.实验心得体会与建议

整数的原码 = 整数的补码
负数的补码:(原码)->(反码)->(反码+1)
负数的原码:(补码-1)->最高位符号位别动其余均转反码

浮点数的二进制表示:
1.符号部分(S) 0正1负
2、阶码部分(E)(指数部分):
对于float型浮点数,指数部分8位,考虑可正可负,因此可以表示的指数范围为-127 ~ 128
对于double型浮点数,指数部分11位,考虑可正可负,因此可以表示的指数范围为-1023 ~ 1024
3、尾数部分(M):
浮点数的精度就是由尾数部分决定的,对于float型浮点数,尾数部分23位,换算成十进制就是 2^23=8388608,所以十进制精度只有6 ~ 7位;
对于double型浮点数,尾数部分52位,换算成十进制就是 2^52 = 4503599627370496,所以十进制精度只有15 ~ 16位

实验2

1.实验目的

  1. 了解运算器的组成结构

(2)掌握运算器的工作原理

2.实验背景知识与原理

本实验的原理如图1-1-1所示。

运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A和暂存器B,三个部件同时接受来自A和B的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如ARM),各部件对操作数进行何种运算由控制信号S3...S0和CN来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为ALU的输出。如果是影响进位的运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。ALU中所有模块集成在一片CPLD中。

逻辑运算部件由逻辑门构成,较为简单,而后面又有专门的算术运算部件设计实验,在此对这两个部件不再述。移位运算采用的是桶形移位器,一般采用交叉开关矩阵来实现,交叉开关的原理如图1-1-2所示。图中显示的是一个4X4的矩阵(系统中是一个8X8的矩阵)。每一个输入都通过开关与一个输出相连,把沿对角线的开关导通,就可实现移位功能,即:

  1. 对于逻辑左移或逻辑右移功能,将一条对角线的开关导通,这将所有的输入位与所使用的输出分别相连,而没有同任何输入相连的则输出连接0。

  2. 对于循环右移功能,右移对角线同互补的左移对角线一起激活。例如,在4位矩阵中便用"右1和"左3对角线来实现右循环1位。

  3. 对于未连接的输出位,移位时使用符号扩展或是0填充,具体由相应的指令控制。使用另外的逻辑进行移位总量译码和符号判别。

运算器部件由一片 CPLD 实现。ALU 的输入和输出通过三态门74LS245 连到 JCPU
内总线上,另外还有指示灯标明进位标志FC 和零标志 FZ。 请注意:
实验箱上凡丝印标注有马蹄形标记
,表示这两根排针之间是连通的。图中除T4和CLR,其余信号均来自于
ALU单元的排线座,实验箱中所有单元的T1、T2、T3、T4
都连接至控制总线单元的T1、T2、T3、T4,CLR 都连接至CON 单元的CLR 按钮。T4
由时序单元的 TS4 提供 (时序单元的介绍见附录二),其余控制信号均由CON
单元的二进制数据开关模拟给出。 控制信号中除
T4为脉冲信号外,其余均为电平信号,其中 ALUB为低有效,其余为高有效。

暂存器A和暂存器B 的数据能在LED灯上实时显示, 原理如图 1-1-3所示
(以A0为例,其它相同) 进位标志FC、 零标志FZ和数据总线D7..1
DO的显示原理也是如此

ALU和外围电路的连接如图1-1-4所示,图中的小方框代表排针座。

运算器的逻辑功能表如表1-1-1所示,其中S3S2S1S0CN为控制信号,FC为进位标志,FZ为运算器零标志,表中功能栏内的FC、FZ表示当前运算会影响到该标志。

3.实验过程与实验结果分析

  1. 按图1-1-5连接实验电路,并检查无误。图中将用户需要连接的信号用圆圈标明(其它实验相同)。

  2. 将时序与操作台单元的开关KK2置为'单拍'档,开关KK1、KK3置为'运行'档。

  3. 打开电源开关,如果听到有'嘀'报警声,说明有总线竞争现象,应立即关闭电源,重新检查接线,直到错误排除。然后按动CON单元的CLR按钮,将运算器的A、B和FC、FZ清零。

  4. 用输入开关向暂存器A置数。
    ①拨动CON单元的SD27.SD20数据开关,形成二进制数01100101(或其它数值),数据显示亮为'1',灭为'0'。
    ②置LDA=1,LDB=0,连续按动时序单元的ST按钮,产生一个T4上沿,则将二进制数01100101置入暂存器A中,暂存器A的值通过ALU单元的A7..A0八位LED灯显示。

  5. 用输入开关向暂存器B置数。
    ①拨动CON单元的SD27..SD20数据开关,形成二进制数10100111(或其它数值)。
    ②置LDA=O,LDB=1,连续按动时序单元的ST按钮,产生一个T4上沿,则将二进制数10100111置入暂存器B中,暂存器B的值通过ALU单元的B7.B0八位LED灯显示。

  6. 改变运算器的功能设置,观察运算器的输出。置ALUB=O、LDA=O、LDB=O,然后按表1-1-1置S3、S2、S1、S0和Cn的数值,并观察数据总线LED显示灯显示的结果。如置S3、S2、S1、S0为0010,运算器作逻辑与运算,置S3、S2、S1、S0为1001,运算器作加法运算。如果实验箱和P℃联机操作,则可通过软件中的数据通路图来观测实验结果(软件使用说明请看附录一),方法是:打开软件,选择联机软件的"【实验】一【运算器实验",打开运算器实验的数据通路图,如图1-1-6所示。进行上面的手动操作,每按动一次ST按钮,数据通路图会有数据的流动,反映当前运算器所做的操作,或在软件中选择"【调试】一【单节拍",其作用相当于将时序单元的状态开关KK2置为'单拍'档后按动了一次ST按钮,数据通路图也会反映当前运算器所做的操作。
    重复上述操作,并完成表1-1-2。然后改变A、B的值,验证FC、FZ的锁存功能。

    实验结果:

4.实验心得体会与建议

本实验使我更加了解运算器的组成结构,也让我掌握了运算器的工作原理。

实验3

1.实验目的

汇编语言实验

  1. 分别使用串处理指令和循环指令,完成字符串比对汇编程序,比对结果存入变量result。若两个字符串相同,result
    = 1,否则result = 0;

  2. 使用反汇编指令,显示两个程序代码段在内存中的存放方法。说明两个程序在内存的长度有何区别

  3. 程序执行完成后,显示数据段中的存储情况,并标注两个字符串与结果的存放位置。

2.实验背景知识与原理

相关知识点:汇编语言,反汇编指令。

3.实验过程与实验结果分析

;分别使用串处理指令和循环指令,完成字符串比对汇编程序
;比对结果存入变量result。若两个字符串相同,result = 1,否则result = 0;
DATAS SEGMENT
	BUF1 DB 20,?,20 DUP('$')
	BUF2 DB 20,?,20 DUP('$')

	LEN1 DW 20
	LEN2 DW 20
	RESULT DB '0'

	INPUTA DB 'PLEASE ENTER BUF1 $'
	INPUTB DB 'PLEASE ENTER BUF2 $'
DATAS ENDS

	STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:

    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX  


;-------------------------------------------- input1
 	MOV DX,OFFSET INPUTA
 	MOV AH,09H
 	INT 21H
 	
    mov dl,0ah  ;换行
    mov ah,2  
    int 21h  
    mov dl,0dh  
    mov ah,2  
    int 21h 
;-------------------------------------------- 输入
 	LEA DX,BUF1  
  	MOV AH,10  ;输入
    	INT 21H   
 
    mov dl,0ah  ;换行
    mov ah,2  
    int 21h  
    mov dl,0dh  
    mov ah,2  
    int 21h 
;-------------------------------------------- inputb
 	MOV DX,OFFSET INPUTB
 	MOV AH,09H
 	INT 21H
 	
    mov dl,0ah  ;换行
    mov ah,2  
    int 21h  
    mov dl,0dh  
    mov ah,2  
    int 21h 
 ;-------------------------------------------- 输入
 	LEA DX,BUF2  ;输入
 	MOV AH,10
	INT 21H 
 
    mov dl,0ah  ;换行
    mov ah,2  
    int 21h  
    mov dl,0dh  
    mov ah,2  
    int 21h 
    
;--------------------------------------------    
	MOV CX,LEN1 ;将长度存入CX 中
	CMP CX,LEN2 ;比较字符串长度
	JNZ NO
	MOV SI,OFFSET BUF1
	MOV DI, OFFSET BUF2
  
	REPE CMPSB ;逐个比较
	JZ YES ;CX为零时跳出循环,说明两字符串相等
 
	NO: MOV RESULT,'0' ;CX不为零时跳出循环
	JMP L
	YES:MOV RESULT,'1'
 	
;-------------------------------------------- 
	L:  
	MOV DL,RESULT;显示比较结果
	MOV AH,02
	INT 21H
;-------------------------------------------- 
MOV AH,4CH
INT 21H
CODES ENDS
END START

实验结果:

4.实验心得体会与建议

配置了实验环境,并学会了使用汇编语言软件进行运行与调试。

实验4

1.实验目的

使用两个子程序,完成进制转换实验,实验要求如下

定义一个变量a=156,一个8字节的DB型数组变量Bin_Arr,一个2字节的DB型数组Hex_Arr.

  1. 子程序1:将a转换为8位二进制数10011100,并存入Bin_Arr中(每个字节单元存1位'1'或'0')。

  2. 子程序2:将Bin_Arr中的二进制数转换为两位16进制数9CH,以ASCII码'9'与'C'的形式分别存到Hex_Arr的两个字节中

2.实验背景知识与原理

相关知识点:汇编语言

3.实验过程与实验结果分析

;使用两个子程序,完成进制转换实验,实验要求如下
;定义一个变量a=156,一个8字节的DB型数组变量Bin_Arr,一个2字节的DB型数组Hex_Arr.
;(1)子程序1:将a转换为8位二进制数10011100,并存入Bin_Arr中(每个字节单元存1位‘1’或‘0’)。
;(2)子程序2:将Bin_Arr中的二进制数转换为两位16进制数9CH,以ASCII码‘9’与‘C’的形式分别存到Hex_Arr的两个字节中

DATAS SEGMENT
A DB 156
BIN_ARR DB 8 DUP (0)
HEX_ARR DB 0,0
DATAS ENDS


CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:

MOV AX,DATAS
MOV DS,AX

MOV AL,A
CALL PRO1 ;子程序1

MOV AL,A
CALL PRO2 ;子程序B

MOV AH,4CH
INT 21H



;-------------------------------------------- 子程序1
PRO1 PROC ;入口参数AL

LEA SI,BIN_ARR		;SI指向BIN
MOV CX,8		;八次

L1:
MOV DL,0		;清零DL
SHR AL,1			;右移一次
ADC DL,30H		;DL加30H转ASCII,再加CF的值
MOV [SI],DL
INC SI
LOOP L1

RET
PRO1 ENDP
;-------------------------------------------- 子程序2
PRO2 PROC		 ;入口参数AL


MOV BL,AL		;
AND BL,0FH		;高四位清零了
CMP BL,9			;
JBE L2			;<=
ADD BL,07H		;

L2:
;"A"的ASCII码是41H,它和0AH差了37h,因此要加7,再加30h。
;小于10的数字变成字符只要加30h就行了,大于等于10h的数字要加37h
ADD BL,30H		;
MOV HEX_ARR,BL		;送数据
MOV CL,4			;
SHR AL,CL		;高四位挪入低四位
CMP AL,9			;
JBE L3			;
ADD AL,07H

L3:
ADD AL,30H
MOV HEX_ARR+1,AL


RET
PRO2 ENDP

CODES ENDS
END START
;使用两个子程序,完成进制转换实验,实验要求如下
;定义一个变量a=156,一个8字节的DB型数组变量Bin_Arr,一个2字节的DB型数组Hex_Arr.
;(1)子程序1:将a转换为8位二进制数10011100,并存入Bin_Arr中(每个字节单元存1位‘1’或‘0’)。
;(2)子程序2:将Bin_Arr中的二进制数转换为两位16进制数9CH,以ASCII码‘9’与‘C’的形式分别存到Hex_Arr的两个字节中

DATAS SEGMENT
A DB 156
BIN_ARR DB 8 DUP (0)
HEX_ARR DB 0,0
DATAS ENDS


CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:

MOV AX,DATAS
MOV DS,AX

MOV AL,A
CALL PRO1 ;子程序1

MOV AL,A
CALL PRO2 ;子程序B

MOV AH,4CH
INT 21H



;-------------------------------------------- 子程序1
PRO1 PROC ;入口参数AL

LEA SI,BIN_ARR		;SI指向BIN
MOV CX,8		;八次

L1:
MOV DL,0		;清零DL
SHR AL,1			;右移一次
ADC DL,30H		;DL加30H转ASCII,再加CF的值
MOV [SI],DL
INC SI
LOOP L1

RET
PRO1 ENDP
;-------------------------------------------- 子程序2
PRO2 PROC		 ;入口参数AL


MOV BL,AL		;
AND BL,0FH		;高四位清零了
CMP BL,9			;
JBE L2			;<=
ADD BL,07H		;

L2:
;"A"的ASCII码是41H,它和0AH差了37h,因此要加7,再加30h。
;小于10的数字变成字符只要加30h就行了,大于等于10h的数字要加37h
ADD BL,30H		;
MOV HEX_ARR,BL		;送数据
MOV CL,4			;
SHR AL,CL		;高四位挪入低四位
CMP AL,9			;
JBE L3			;
ADD AL,07H

L3:
ADD AL,30H
MOV HEX_ARR+1,AL


RET
PRO2 ENDP

CODES ENDS
END START

4.实验心得体会与建议

实验5

1.实验目的

内存由16个页组成,Cache由8个页组成4-2组相联模式(即4个组,组长为2),可用数组结构表示。通过对Cache赋值代表该cache页中存放内存某一页,如cache[0]=8代表Cache第1个页中存放内存第8个页面。初始时Cache中不包含任何内存页面。

要求:随机生成一串长度为64、范围为1~16之间的随机数,代表对内存16个页面的64个随机访问请求。每个访问请求发生时,处理如下:

  1. 检查Cache中是否有该内存页,如果有,输出"Hit",并输出该页所在的cache页号;

  2. 如果没有,将访问内存页面载入Cache中的第i个页面,输出"miss",并输出页号i。i的选择根据书上组相联映射的说明来实现。

  3. 若页面载入Cache时,发现对应组内没有空闲页面,使用最近最少使用算法(允许使用额外队列表示最近访问时间)选择一个页面将其替换出去,并输出"Perform
    LRU:"、被替换页所在的cache页号、被替换页的页号。

2.实验背景知识与原理

相关知识点:组相连模式,最近最少使用算法

3.实验过程与实验结果分析

#include<bits/stdc++.h>
#define random(a,b) (rand()%(b-a)+a)
const int CACHE_LEN = 8;
const int MEMORY_LEN = 16;
const int REQUEST_LEN = 64;
using namespace std;


/**
* cache中的页,使用结构体,因为要排序进行淘汰
*/
typedef struct page
{
	int time_index;//进入cache的时间,“最近”
	int cnt; //使用次数,“最少”
	page() { this->time_index = 0; this->cnt = 0; };
}page;
int Cache[CACHE_LEN];
page Cache_pages[CACHE_LEN];
int TIME = -1;


/**
* 对Cache初始化。
*/
void init()
{
	for (int i = 0; i < CACHE_LEN; i++)
		Cache[i] = -1;
	for (int i = 0; i < CACHE_LEN; i++)
		Cache_pages[i] = page();
}

/**
* 根据内存页数获得cache组别
*/
int get_group(int num)
{
	int index[MEMORY_LEN + 1] = { -1,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3 };
	int group = index[num];
	return group;
}

/**
* 更新cache页
*/
void updata_pages(int index, int num)
{
	Cache[index] = num;
	Cache_pages[index].cnt++;
	Cache_pages[index].time_index = TIME;
}

/**
* 获得64个访问请求
*/
void get_64number(int numbers[])
{
	for (int i = 0; i < REQUEST_LEN; i++)
		numbers[i] = random(1, MEMORY_LEN);
	printf("=================64个访问请求====================\n");
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 16; j++)
		{
			printf("%02d ", numbers[i * 16 + j]);
		}
		printf("\n");
	}
	printf("=================================================\n");
}

/**
* 检查Cahce中是否有该内存页面
*/
bool check_is_have_page(int num)
{
	for (int i = 0; i < CACHE_LEN; i++)
	{
		if (Cache[i] == num)
		{
			updata_pages(i, num);
			return true;
		}
	}
	return false;
}

/**
* 按照组相连模式将内存也载入cache
*/
int load_memory_in_cache(int num)
{
	if (num > MEMORY_LEN || num < 0)
		return -1;
	int group = get_group(num);
	int index1 = group, index2 = group + CACHE_LEN / 2;
	if (Cache[index1] == -1)
	{
		updata_pages(index1, num);
		return index1;
	}
	if (Cache[index2]==-1)
	{
		updata_pages(index2, num);
		return index2;
	}
	return -1;
}



/**
* 使用最近最少使用算法,选择cache一个页面替换出去。
*/
void replace(int num)
{
	int group = get_group(num);
	int index1 = group, index2 = group + CACHE_LEN / 2;
	int cnt1 = Cache_pages[index1].cnt, cnt2 = Cache_pages[index2].cnt;
	int time1 = Cache_pages[index1].time_index, time2 = Cache_pages[index2].time_index;
	int replace_page;
	if ( cnt1== cnt2)
	{
		replace_page = time1 > time2 ? index2 : index1;
	}
	else
	{
		replace_page =  cnt1 > cnt2 ? index2 : index1;
	}
	printf("Perform LRU: %d %d\n", replace_page, Cache[replace_page]);
	updata_pages(replace_page, num);
	Cache_pages[replace_page].cnt = 1;
}

int main()
{
	int n, i, j, k, m;
	int requests[REQUEST_LEN] = {0};
	init();
	get_64number(requests);
	for (i = 0; i < REQUEST_LEN; i++)
	{
		int request = requests[i];
		printf("REQUEST:%02d    ", request);
		TIME = i;
		if(check_is_have_page(request))
			printf("Hit!Cache页为%d\n", request);
		else
		{
			int index = load_memory_in_cache(request);
			if (index!=-1)
			{
				printf("miss %d\n", index);
			}
			else
			{
				replace(request);
			}
		}
	}
}

实验结果:

4.实验心得体会与建议

无。

实验6

1.实验目的

  1. 掌握中断原理及其响应流程。

(2)掌握8259中断控制器原理及其应用编程。

2.实验背景知识与原理

8259的引脚分配如图6-1-1所示:

8259芯片引脚说明如下。

  • D7~D0为双向三态数据线

  • CS片选信号线

  • A0用来选择芯片内部不同的寄存器,通常接至地址总线的A0.

  • RD读信号线,低电平有效,其有效时控制信息从8259读至CPU.

  • WR写信号线,低电平有效,其有效时控制信息从CPU写入至8259.

  • SP/EN从程序制允许缓冲

  • NTA中断响应输入

  • INT中断输出

  • IR0~IR78条外界中断请求输入线。

  • CAS2~CAS0级连信号线。

Cs、A0、RD、WR、D4、D3位的电平与8259操作关系如表6-1-1所示。

CPU必须有一个中断使能寄存器,并且可以通过指令对该寄存器进行操作,其原理如图

6-1-2所示。CPU开中断指令STI对其置1,而CPU关中断指令CLI对其置0。

8259的数据线D7.D0挂接到数据总线,地址线A0挂接到地址总线的A0上,片选信号CS

接控制总线的IOY3,IOY3由地址总线的高2位译码产生,其地址分配见表6-1-2,RD、WR(实

验箱上丝印为XIOR和XIOW)接CPU给出的读写信号,8259和系统的连接如图5-2-3所示。

本实验要求设计的模型计算机具备有类X86的中断功能,当外部中断请求有效、CPU允许

中断,且在一条指令执行完时,CPU将响应中断。当CPU响应中断时,将会向8259发送两个

连续的NTA信号,请注意,8259是在接收到第一个NTA信号后锁住向CPU的中断请求信号NTR(高电平有效),并且在第二个NTA信号到达后将其变为低电平(自动EOI方式),所以,中断请求信号R0应该维持一段时间,直到CPU发送出第一个NTA信号,这才是一个有效的中断请求。8259在收到第二个NTA信号后,就会将中断向量号发送到数据总线,CPU读取中断向量号,并转入相应的中断处理程序中。本系统的指令译码电路是在IR单元的NS
DEC(GAL20V8)中实现,如图6-1-4所示。和前面复杂模型机实验指令译码电路相比,主要增加了对中断的支持,当NTR(有中断请求)和EI(CPU允许中断)均为1,且P<4>测试有效,那么在T4节拍时,微程式序就会产生中断响应分支,从而使得CPU能响应中断。在中断过程中需要有现场保护,而且在编程的过程中也需要一些压栈或弹栈操作,所以还需设置一个堆栈,由R3做堆栈指针。系统的寄存器译码电路如图6-1-5所示,在R单元的REG
DEC(GAL16V8)中实现,和前面复杂模型机实验寄存器译码电路相比,增加一个或门和一个与门,用以支持堆栈操作。

3.实验过程与实验结果分析

1.按图6-1-7所示连接实验接线,仔细检查接线后打开实验箱电源。

2.写入实验程序,并进行校验,分两种方式,手动写入和联机写入。

1)手动写入和校验

  1. 手动写入微程序

①将时序与操作台单元的开关KK1置为'停止'档,KK3置为'编程'档,KK4置为'控存'档,KK5置为'置数'档。
②使用CON单元的SD05一SD00给出微地址,N单元给出低8位应写入的数据,连续两次按动时序与操作台的开关ST,将N单元的数据写到该单元的低8位。
③将时序与操作台单元的开关KK5置为'加1'档。
④N单元给出中8位应写入的数据,连续两次按动时序与操作台的开关ST,将N单元的数据写到该单元的中8位。N单元给出高8位应写入的数据,连续两次按动时序与操作台的开关ST,将N单元的数据写到该单元的高8位。
⑤重复①、②、③、④四步,将表6-1-5的微代码写入2816芯片中。

(2)手动校验微程序

①将时序与操作台单元的开关KK1置为'停止'档,KK3置为'校验'档,KK4置为'控存'档,KK5置为'置数'档。
②使用CON单元的SD05一一SDO0给出微地址,连续两次按动时序与操作台的开关ST,MC单元的指数据指示灯M7一一M0显示该单元的低8位。
③将时序与操作台单元的开关KK5置为'加1'档。
④连续两次按动时序与操作台的开关ST,MC单元的指数据指示灯M1S一一M8显示该单元的中8位,MC单元的指数据指示灯M23一一M16显示该单元的高8位。
⑤重复①、②、③、④四步,完成对微代码的校验。如果校验出微代码写入错误,重新写入、校验,直至确认微指令的输入无误为止。

(7)手动写入机器程序

①将时序与操作台单元的开关KK1置为'停止'档,KK3置为'编程'档,KK4置为'主存'档,KK5置为'置数'档。
②使用CON单元的SD07一一SD00给出地址,N单元给出该单元应写入的数据,连续两次按动时序与操作台的开关ST,将N单元的数据写到该存储器单元。
③将时序与操作台单元的开关KK5置为'加1'档。
④N单元给出下一地址(地址自动加1)应写入的数据,连续两次按动时序与操作台的开关ST,将N单元的数据写到该单元中。然后地址会又自加1,只需在N单元输入后续地址的数据,连续两次按动时序与操作台的开关ST,即可完成对该单元的写入。
⑤亦可重复①、②两步,将所有机器指令写入主存芯片中。

(8)手动校验机器程序
①将时序与操作台单元的开关KK1置为'停止'档,KK3置为'校验'档,KK4置为'主存'档,KK5置为'置数'档。
②使用CON单元的SD07一SD00给出地址,连续两次按动时序与操作台的开关ST,CPU内总线的指数据指示灯D7一一D0显示该单元的数据。
③将时序与操作台单元的开关KK5置为'加1'档。
④连续两次按动时序与操作台的开关ST,地址自动加1,CPU内总线的指数据指示灯D7一一D0显示该单元的数据。此后每两次按动时序与操作台的开关ST,地址自动加1,CPU内总线的指数据指示灯D7一D0显示该单元的数据,继续进行该操作,直至完成校验,如发现错误,则返回写入,然后校验,直至确认输入的所有指令准确无误。
⑤亦可重复①、②两步,完成对指令码的校验。如果校验出指令码写入错误,重新写入、校验,直至确认指令的输入无误为止。

2)联机写入和校验

联机软件提供了微程序和机器程序下载功能,以代替手动读写微程序和机器程序,但是微程序和机器程序得以指定的格式写入到以TXT为后缀的文件中,本次实验程序如下,程序中分号';'为注释符,分号后面的内容在下载时将被忽略掉:

实验结果:

4.实验心得体会与建议

无。

posted @ 2023-08-25 02:55  jijfurhg  阅读(551)  评论(0)    收藏  举报