ms11011 计算机组成原理

绝对高分50 计算机组成原理实验答案

第一章
1. 模拟计算机的特点是数值由连续量来表示,运算过程也是连续的。数字计算机的主要特点是按位运算,并且不连续地跳动计算。模拟计算机用电压表示数据,采用电压组合和测量值的计算方式,盘上连线的控制方式,而数字计算机用数字0和1表示数据,采用数字计数的计算方式,程序控制的控制方式。数字计算机与模拟计算机相比,精度高,数据存储量大,逻辑判断能力强。
2. 数字计算机可分为专用计算机和通用计算机,是根据计算机的效率、速度、价格、运行的经济性和适应性来划分的。
3. 科学计算、自动控制、测量和测试、信息处理、教育和卫生、家用电器、人工智能。
4. 主要设计思想是:存储程序通用电子计算机方案,主要组成部分有:运算器、逻辑控制装置、存储器、输入和输出设备
5. 存储器所有存储单元的总数称为存储器的存储容量。每个存储单元都有编号,称为单元地址。如果某字代表要处理的数据,称为数据字。如果某字为一条指令,称为指令字。
6. 每一个基本操作称为一条指令,而解算某一问题的一串指令序列,称为程序。
7. 取指周期中从内存读出的信息流是指令流,而在执行器周期中从内存读出的信息流是指令流。
8. 半导体存储器称为内存,存储容量更大的磁盘存储器和光盘存储器称为外存,内存和外存共同用来保存二进制数据。运算器和控制器合在一起称为中央处理器,简称CPU,它用来控制计算机及进行算术逻辑运算。适配器是外围设备与主机联系的桥梁,它的作用相当于一个转换器,使主机和外围设备并行协调地工作。
9. 计算机的系统软件包括系统程序和应用程序。系统程序用来简化程序设计,简化使用方法,提高计算机的使用效率,发挥和扩大计算机的功能用用途;应用程序是用户利用计算机来解决某些问题而编制的程序。
10. 在早期的计算机中,人们是直接用机器语言来编写程序的,这种程序称为手编程序或目的程序;后来,为了编写程序方便和提高使用效率,人们使用汇编语言来编写程序,称为汇编程序;为了进一步实现程序自动化和便于程序交流,使不熟悉具体计算机的人也能很方便地使用计算机,人们又创造了算法语言,用算法语言编写的程序称为源程序,源程序通过编译系统产生编译程序,也可通过解释系统进行解释执行;随着计算机技术的日益发展,人们又创造出操作系统;随着计算机在信息处理、情报检索及各种管理系统中应用的发展,要求大量处理某些数据,建立和检索大量的表格,于是产生了数据库管理系统。
11. 从第一至五级分别为微程序设计级、一般机器级、操作系统级、汇编语言级、高级语言级。采用这种用一系列的级来组成计算机的概念和技术,对了解计算机如何组成提供了一种好的结构和体制。而且用这种分级的观点来设计计算机,对保证产生一个良好的系统结构也是很有帮助的。
12. 因为任何操作可以由软件来实现,也可以由硬件来实现;任何指令的执行可以由硬件完成,也可以由软件来完成。实现这种转化的媒介是软件与硬件的逻辑等价性。
13. ( 略 )
第二章
1.(1)
(2)
(3)-127
-127 = -7F = -1111111
原 = 11111111
补 = 10000001
反 = 10000000
移 = 00000001
(4)原 = 1000 0000
补 = 1000 0000
反 = 1111 1111
移 = 0000 0000
(5)-1 = -00000001
原 = 1000 0001
补 = 1111 1111
反 = 1111 1110
移 = 0111 1111
2.[x]补 = a0. a1a2…a6
解法一、
(1) 若a0 = 0, 则x 》 0, 也满足x 》 -0.5
此时a1→a6可任意
(2) 若a0 = 1, 则x 《= 0, 要满足x 》 -0.5, 需a1 = 1
即a0 = 1, a1 = 1, a2→a6有一个不为0
解法二、
-0.5 = -0.1(2) = -0.100000 = 1, 100000
(1) 若x 》= 0, 则a0 = 0, a1→a6任意即可
[x]补 = x = a0. a1a2…a6
(2) 若x 《 0, 则x 》 -0.5
只需-x 《 0.5, -x 》 0
[x]补 = -x, [0.5]补 = 01000000
即[-x]补 《 01000000
即a0a1 = 11, a2→a6不全为0或至少有一个为1(但不是“其余取0”)
3.字长32位浮点数,阶码10位,用移码表示,尾数22位,用补码表示,基为2
(1) 最大的数的二进制表示
E = 111111111
Ms = 0, M = 11…1(全1)
表示为: 11…1 011…1
10个 21个
即:
(2) 最小的二进制数
E = 111111111
Ms = 1, M = 00…0(全0)(注意:用10….0来表示尾数-1)
表示为: 11…1 100…0
10个 21个
即:
(3) 规格化范围
正最大 E = 11…1, M = 11…1, Ms = 0
10个 21个
即:
正最小 E = 00…0, M = 100…0, Ms = 0
10个 20个
即:
负最大 E = 00…0, M = 011…1, Ms = 1
10个 20个
(最接近0的负数)即:
负最小 E = 11…1, M = 00…0, Ms =1
10个 21个
即:
规格化所表示的范围用集合表示为:
[ , ] [ , ]
(4) 最接近于0的正规格化数、负规格化数(由上题可得出)
正规格化数 E = 00…0, M = 100…0, Ms = 0
10个 20个

负规格化数 E = 00…0, M = 011…1, Ms = 1
10个 20个
4.假设浮点数格式如下:
(1)
阶补码: 1 11
尾数补码: 0 1101 1000
机器数: 1110 1101 1000
(2)
阶补码: 1 11
尾数补码: 1 0010 1000
机器数: 1110 0010 1000
5.(1)x = 0.11011, y = 0.00011
x+y = 0.11110
无溢出
(2) x = 0.11011, y = -0.10101
x+y = 0.00110
无溢出
(3)x = -0.10110
y = -0.00001
x+y = -0.10111
无溢出
6.(1)x = 0.11011
y = -0.11111
溢出
(2)x = 0.10111
y = 0.11011
x-y = -0.00100
无溢出
(3)x = 0.11011
y = -0.10011
溢出
7.(1)原码阵列
x = 0.11011, y = -0.11111
符号位: x0⊕y0 = 0⊕1 = 1
[x]原 = 11011, [y]原 = 11111
[x*y]原 = 1, 11 0100 0101
直接补码阵列
[x]补 = (0)11011, [y]补 = (1)00001
[x*y]补 = 1,00101,11011(直接补码阵列不要求)
带求补器的补码阵列
[x]补 = 0 11011, [y]补 = 1 00001
乘积符号位单独运算0⊕1=1
尾数部分算前求补输出│X│=11011,│y│=11111
X×Y=-0.1101000101
(2) 原码阵列
x = -0.11111, y = -0.11011
符号位: x0⊕y0 = 1⊕1 = 0
[x]补 = 11111, [y]补 = 11011
[x*y]补 = 0,11010,00101
直接补码阵列
[x]补 = (1)00001, [y]补 = (1)00101
[x*y]补 = 0,11010,00101(直接补码阵列不要求)
带求补器的补码阵列
[x]补 = 1 00001, [y]补 = 1 00101
乘积符号位单独运算1⊕1=0
尾数部分算前求补输出│X│=11111,│y│=11011

如何编写一段程序,单片机是51系列的,要求编写8个LED灯有三种以上的闪烁方式,灯闪烁时间0.5S

给你最简单的,看得清楚易懂的,P1口接8位LED,有多种闪烁方式。P2(扫描端在P2口,P3为位选端,注意看代码)口接上两位数码管的话还可以显示00-99的数字:
ZHUCX: MOV A,#11111110B
MOV P1,A
ACALL YANSHI
MOV A,#11111100B
MOV P1,A
ACALL YANSHI
MOV A,#11111000B
MOV P1,A
ACALL YANSHI
MOV A,#11110000B
MOV P1,A
ACALL YANSHI
MOV A,#11100000B
MOV P1,A
ACALL YANSHI
MOV A,#11000000B
MOV P1,A
ACALL YANSHI
MOV A,#10000000B
MOV P1,A
ACALL YANSHI
MOV A,#00000000B
MOV P1,A
ACALL YANSHI
MOV A,#10000000B
MOV P1,A
ACALL YANSHI
MOV A,#11000000B
MOV P1,A
ACALL YANSHI
MOV A,#11100000B
MOV P1,A
ACALL YANSHI
MOV A,#11110000B
MOV P1,A
ACALL YANSHI
MOV A,#11111000B
MOV P1,A
ACALL YANSHI
MOV A,#11111100B
MOV P1,A
ACALL YANSHI
MOV A,#11111110B
MOV P1,A
ACALL YANSHI
MOV A,#11111111B
MOV P1,A
ACALL YANSHI
MOV R4,#5
D5 : MOV A,#01111110B
MOV P1,A
ACALL YANSHI
MOV A,#10111101B
MOV P1,A
ACALL YANSHI
MOV A,#11011011B
MOV P1,A
ACALL YANSHI
MOV A,#11100111B
MOV P1,A
ACALL YANSHI
MOV A,#11011011B
MOV P1,A
ACALL YANSHI
MOV A,#10111101B
MOV P1,A
ACALL YANSHI
MOV A,#01111110B
MOV P1,A
ACALL YANSHI
DJNZ R4,D5
ACALL YANSHI
MOV R0,#3
LOOP: MOV A,#01010101B
MOV P1,A
ACALL YANSHI
MOV A,#10101010B
MOV P1,A
ACALL YANSHI
DJNZ R0,LOOP
MOV A,#11111110B
MOV P1,A
ACALL YANSHI
MOV A,#11111101B
MOV P1,A
ACALL YANSHI
MOV A,#11111011B
MOV P1,A
ACALL YANSHI
MOV A,#11110111B
MOV P1,A
ACALL YANSHI
MOV A,#11101111B
MOV P1,A
ACALL YANSHI
MOV A,#11011111B
MOV P1,A
ACALL YANSHI
MOV A,#10111111B
MOV P1,A
ACALL YANSHI
MOV A,#01111111B
MOV P1,A
ACALL YANSHI
MOV A,#10111111B
MOV P1,A
ACALL YANSHI
MOV A,#11011111B
MOV P1,A
ACALL YANSHI
MOV A,#11101111B
MOV P1,A
ACALL YANSHI
MOV A,#11110111B
MOV P1,A
ACALL YANSHI
MOV A,#11111011B
MOV P1,A
ACALL YANSHI
MOV A,#11111101B
MOV P1,A
ACALL YANSHI
MOV A,#11111110B
MOV P1,A
ACALL YANSHI
START:MOV R0,#0
MOV DPTR,#TABLE
LOOP1:ACALL DISPLAY
INC R0
CJNE R0,#100,LOOP1
JMP ZHUCX
DISPLAY:MOV A,R0
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
MOV R3,#50
LOOP2:MOV A,R2
ACALL CHANG
CLR P3.6
ACALL DLY10MS
SETB P3.6
SETB P3.5
MOV A,R1
ACALL CHANG
CLR P3.7
ACALL DLY10MS
SETB P3.7
SETB P3.4
DJNZ R3,LOOP2
RET
CHANG:MOVC A,@A+DPTR
MOV P2,A
RET
DLY10MS:MOV R6,#10
D1: MOV R7,#200
DJNZ R7,$
DJNZ R6,D1
RET
YANSHI :MOV R5,#30
D3:MOV R6,#50
D4:MOV R7,#50
DJNZ R7,$
DJNZ R6,D4
DJNZ R5,D3
RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
END

单片机数字时钟课程设计

这个 我正在学单片机,也刚刚做过了这个实验没多久,不过我的是8098单片机,确实是汇编语言。不过我做的仅仅是个电子钟,你可以随时改变你输入的时间然后它就会按时分秒跳动,我做的是24小时制的。不过我没有弄闹钟额……不过也简单,可以弄一个中断申请就ok。话说你的闹钟要求是什么?我记得8098是不能响的,只有一个发光二极管可以亮一亮……
话说能请你把问题补充一下么?我的程序写在纸上,然后我们还要求是要把程序翻译出机器码然后在单片机上实验出结果的。所以我连机器码都翻译了的……实在不知道你们的要求。
原理可以先和你说一下:主程序先是一系列的初始化(中断悬挂的清零和寄存器的设置,堆栈的设置等),然后开启中断,写显示程序(显示程序前要弄好你显示的寄存器以及扫描子程序的地址,还要对十六进制数进行转换变成十进制数,只要做一个除法就行,用十六进制数除以A就能够得出相应的十进制数。)
然后就是你的中断程序了,比如你的中断申请是每10ms申请一次,那你就计数,如果到了100次中断了,那就秒加一,再查看秒是否到60,是则清零让分加一,否则跳到中断程序末端;然后再依次查分和时。最后中断程序的末端还要用一次计时器软件中断申请。再跳回主程序反复运行。可能比较麻烦,我记得我打的草稿就好多张纸呢,后来在16进制向10进制转换的时候还出了个寄存器的问题。
不知道和你程序的要求是否相同= =。

期待你能够补充一下你的问题。

关于STC单片机定时器问题

–代码有误,没计算精确,如果精确计算的话,在短时间内是感觉不出来误差的.下面代码供参考..
—-
;========================================================start
; MOV 8EH,#0C0H ;T0,T1=12倍速C51(STC2501)
CHA DATA 10H
CHS DATA 11H ;秒单元
CHM DATA 12H ;分单元
CHH DATA 13H ;时单元
NG DATA 14H
NS DATA 15H
;—————-BEGIN
ORG 0000H
LJMP main
ORG 000BH
LJMP CLOCK
ORG 030H
main: MOV P1,#0FFH
MOV P3,#0FFH
MOV CHA,#00H
MOV CHS,#00H
MOV CHM,#00H
MOV CHH,#00H
MOV NG,#00H
MOV NS,#00H
;===========
MOV TMOD,#01H ;定时器0控制字
MOV TL0,#0B0H ;{TL0=B0H,TH=3C}=1S
MOV TH0,#3CH
SETB ET0
SETB TR0
SETB EA
MOV DPTR,#LED
;——-DisplayProgram
;——-第一、二位
F1: MOV A,CHS ;将H中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV NS,A
MOV NG,B
MOV A,NG
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
MOV P3,#11111110B
CALL DEL1MS ;显示1ms
MOV A,NS ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P1,A ;送出十位的7段代码
MOV P3,#11111101B
CALL DEL1MS ;显示1ms
;——-第三、四位
MOV A,CHM ;将H中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV NS,A
MOV NG,B
MOV A,NG
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
MOV P3,#11111011B
CALL DEL1MS ;显示1ms
MOV A,NS ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P1,A ;送出十位的7段代码
MOV P3,#11110111B
CALL DEL1MS ;显示1ms
;——-第五、六位
MOV A,CHH ;将H中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV NS,A
MOV NG,B
MOV A,NG
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
MOV P3,#11101111B
CALL DEL1MS ;显示1ms
MOV A,NS ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P1,A ;送出十位的7段代码
MOV P3,#11011111B
CALL DEL1MS ;显示1ms
JMP F1
;———————-interrupt
CLOCK: MOV P1,#0FFH
MOV TL0,#0B0H ;0B0H
MOV TH0,#3CH ;3CH
PUSH ACC
PUSH PSW
;——-
INC CHA
MOV A,CHA
CJNE A,#1,EXT ;C51=20,STC=240//8EH.2=1
MOV CHA,#00H
INC CHS
MOV A,CHS
CJNE A,#60,EXT
MOV CHS,#00H
INC CHM
MOV A,CHM
CJNE A,#60,EXT
MOV CHM,#00H
INC CHH
MOV A,CHH
CJNE A,#24,EXT
MOV CHH,#00H
;———–
EXT: POP PSW
POP ACC
RETI
;——————————————————
LED: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH
;—————————————delay_program
DEL1MS: MOV R4,#2 ;延时程序3,精确延时1000微秒
D1: MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
END
C例子:
//——————初始化函数
int_ini()
{

TH0=0X3C;TL0=0XB0;
TMOD=0X01;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;
}
//—————-中断处理函数
void time_intt0(void) interrupt 1
{
ET0=0;TR0=0;TH0=0X3C;TL0=0XB0;TR0=1;
con1s++;
if(con1s==20)
{
con1s=0x00;
timedata++;
if(timedata》=10)
{timedata=0;timedata++;}

if(timedata》=6)
{timedata=0;timedata++;}

if(timedata》=10)
{timedata=0;timedata++;}

if(timedata》=6)
{timedata=0;timedata++;}

if(timedata》=10)
{timedata=0;timedata++;}

if(timedata==2&&timedata==4)
{timedata=0;timedata=0;}
}
dis=timedata; //相当于汇编 MOV DIS0,TDATA0]]DIS0为显示扫描时的数值[秒位]~~~~~~
dis=timedata;
dis=timedata;
dis=timedata;
dis=timedata;
dis=timedata;
ET0=1;

}