Ⅰ 定义数据段如下,画出数据存储示意图,并说明该数据段共有多少个字节单元。
所谓内部数据存储器就是集成在单片机内部的数据存储器,因为单片机的内部的数据总线是8位的,所以其寻址范围只有00H~FFH。而这段内存也分为两部分:00H~7FH:直接寻址区: 也叫DATA区。C语言中在定义变量的时候,加上data这个关键字修饰的话,那么这个变量就存在这个区域。这个区域可以进行直接寻址。例如 MOV A, 30H;把30H单元里面的内容复制到A中。 这段区域比较复杂,00H~1FH这段区域是通用寄存器(R0~R7)组所占的区域。你可能觉得很奇怪,R0~R7只有八个字节,而这段区域有32个字节。其实这个段区域是分为四组,每组8个字节。而程序在同一时刻所用到的R0~R7只是占这四组中的一组。其他的24个字节是当作普通内存在使用的。而使用那一组是由PSW寄存器中的RS0和RS1两位来决定的。 可能你会觉得设计这单片机的人不是找抽吗,没事搞的那么复杂干什么。其实设计者这样设计是有目的的。在中断的时候,这个设计就非常方便了。在进中断的时候,要做现场的保护,就是把一些在主程序中用到的寄存器同时又在中断中用到,这样的寄存器就必须保护,防止数据丢失。例如在主程序中用到了R0~R7,在中断中也用到了R0~R7,不这样设计的话就得一个一个寄存器去入栈,然后再一个一个的出栈。麻烦的很。而有这样的分组设计,只需在进中断的时候,把PSW入栈,再改变PSW的RS0和RS1两位的值,用不同的寄存器组。然后在中断结束的时候,把PSW出栈就可以了。这样就方便很多。 20H~2FH,叫位寻址区,这个区域的16个字节可以进行位寻址。C语言中定义的位变量就分配在这个区域。 30H~7FH:普通 的内存。80H~FFH:这段地址也纠结。如果单片机是51的话还好理解,因为51单片机内存只有128个字节,而这段地址是特殊功能寄存器的地址。如果是52单片机的话就纠结啦,52单片机内部数据存储器有256个字节,00H~7FH只有128个啊,而80H~FFH是特殊功能器的地址啊,那么还有128个字节的地址怎么编排呢?和特殊功能器共用地址?那会不会在访问内存的时候改变了特殊功能器的值啊,改变了的话程序会出问题的?这是每个初学者都有这样的疑问。其实特殊功能寄存器的确和后面128个字节的内存是共用相同的地址的。但是他们都有自己的物理地址,就像两个人同名样的,虽然名字相同,但不是同一个人。而区分的方法就是利用不同的寻址方式,特殊功能寄存器有直接寻址,内存用间接寻址。例如:MOV R0, 0E0H;直接寻址,把累加器A中的值复制到R0中。MOV R1,#0E0HMOV R0,@R1间接寻址,把地址为E0H的内存单元里面数复制到R0中。间接寻址只能用R0或R1作为地址指针。 外部数据存储器,也就是外部扩展的寄存器。以前的外部存储器都是挂在单片机外面的(现在的外部存储器都集成在单片机内部了,但是访问的方式还是没改变。只是不占用IO口了),用单片机的P0口和P2口来连接外部存储器。P0口作为访问外部存储器地址的低八位和数据口,P2口作为地址的高八位。程序访问外部数据存储器,必须用DPTR或者R0和R1做为地址指针,用MOVX指令。在外部存储器的地址小于100H的时候,可以用R0和R1作为地址指针来访问外部存储器。例如:MOV R0,#30HMOVX A,@R0这段程序就是把地址为30H 的外部存储器的数据复制到A中。 所以外部存储器的00H~FFH也叫pdata区。同样在C语言中,用pdata关键字修饰的变量存在该区域。外部存储器所有的区域都可以用DPTR作为指针来访问。例如:;地址小于8位MOV DPTR,#0030HMOVX A,@DPTR;地址大于8位MOV DPTR,#3000HMOVX A,@DPTR所以外部存储器所有区域叫xdata区,在C语言中,有xdata修饰的变量就存在该区域。内部数存和外部数存有些地址是重叠的,但是它们在空间上不重叠。也就是有自己独立的物理空间。利用不同的寻址方式从而来区分他们。程序存储器也就是只读存储器。在程序运行过程中只能对它进行读,但是不能写。对它的写只能利用一些特殊的方式,例如把你在电脑里面写好程序,通过下载器下载到单片机里面。而在程序中对它的读也得用DPTR做为指针来访问,并且用MOVC指令。由于老的51单片机内部集成的程序存储器空间比较小,所以有时候需要外扩程序存储器。但是内部程序存储器和外部程序存储器不能共存,只能用其中的一个。有单片机的EA管教来决定,EA为高时,内部。EA为低时,外部。
Ⅱ 有两个16位字31DAH和5E7FH 他们在8086系统存储器中的地址分别为00130H和00134H ,试画出他们的存储示意图
16位微处理器80886共有二十根地址线,按字寻址,每个字为16位(16bit=2B),其中31DAH,5E7FH为存储单元中的数据,00130H、00134H为内存地址,两个地址相隔4个字,示意图如下
Ⅲ 汇编语言程序设计 画出下列数据段定义的内存储单元分配图。要求: (1)指出各变量的偏移地址
DAT1 1000h:0 1,2,18h,34h,35h,36h,45h,0f0h
DAT2 1000h:8 0ch,0,0dh,0,0fbh,0ffh
COUNT=7
1000h:0eh 12h,0,78h,56h
DAT3 1000h:12h 0,3,0,0,8,0,0,0
Ⅳ 若有两个16位的字31DAH和5E7FH,它们在8086系统存储器中的地址分别是00130H和00134H,画出存储示意图
微机原理?
唉,没好好学
Ⅳ cpu与存储器的连接图怎么画
第一步:将16进制的地址码转换为2进制地址码,确定其总容量
系统程序区:6000H~67FFH
6000:0110 0000 0000 0000
67FF:0110 0111 1111 1111
因为有16根地址线,所以排列为A0~A15
A15
A14
A13
A12
A11
A10
A9
A8
0 1 1 0 0 0 0 0
0 1 1 0 0 1 1 1
(后面的用不到了,做题的时候表格要体现<最好是全部都写出>)
同理用户程序区:6800H~6BFFH
A15
A14
A13
A12
A11
A10
A9
A8
0 1 1 0 1 0 0 0
0 1 1 0 1 0 1 1
第二步:选择合适的芯片
RAM用来存储当前运行的程序和数据,并可以在程序运行中反复的更改其内容,所以用户程序一般选用RAM芯片,而ROM基本上存储不变或基本不变的程序和数据,所以系统程序一般选用ROM芯片。
接下来就是选择芯片大小的问题
系统程序区:A0~A10编码从全0变为全1,一共11根地址线,也就是2k,8根数据线,系统程序区总容量2k x 8位,所以我们就选取一片2k x 8位的ROM芯片
用户程序区:A0~A9编码从全0变为全1,一共10根地址线,也就是1k,8根数据线,用户程序区总容量为1k x 8位,但根据题干未给出1k x 8位的RAM芯片,此时我们需要进行位扩展(如果对于字扩展和位扩展不熟悉,就去找一下其他博客了解一下吧,或者评论我也可以),我们就选取2片1k x 4位的RAM芯片。
第三步:分配地址线画图
说明:
A0~A10接2k x 8位的ROM
A0~A9分别接1k x 4位的RAM
A11~A15作为片选线
38译码器:A11、A12、A13分别连接A、B、C
G1 高电平(A14根据那个表可以看到始终为1->高电平)
G2A、G2B需要高电平工作(A15始终为高电平,但是连接的位置注意有个小圈圈哦–取反的是意思MREQ低电平有效)
输出Y4、Y5(这个需要看连接A、B、C的A11、A12、A13的编码,将其三位二进制转换为十进制就是其下标)
就像这样,当然你需要去看大量的题来看不同的38译码器的连接情况。
Ⅵ 存储器分段示意图
代码段首地址:31FF0H 当前指令地址:320F0H 数据段首地址:10E40H
堆栈段首地址:21F00H 堆栈段栈顶地址:31EEEH 附加段首地址:10F40H
Ⅶ 一个存储器有 13根地址线,8条数据线,画出该存储器的系统连接图
2的10次方=1KB,注意这里的B是大写,也就是字节,所以存储容量是1K字节,注意这里的8根数据线实际上刚好是传输1个字节。
Ⅷ 定义数据段如下,画出数据存储示意图,并说明变量X1和X2所对应的逻辑地址是多少
数据存储示意图
10A0:0010 16H
21H
-
-
10A0:0032 41H
42H
31H
32H
43H
44H
x1的逻辑地址为:10A0:0010
X2的逻辑地址为:10A0:0032