数据存储区域寻找(8051单片机片内数据存储器的三个存储区域是如何划分的)
一、存储器的原理是什么
存储器讲述工作原理及作用
介绍
存储器(Memory)是现代信息技术中用于保存信息的记忆设备。其概念很广,有很多层次,在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正常工作。计算机中的存储器按用途存储器可分为主存储器(内存)和辅助存储器(外存),也有分为外部存储器和内部存储器的分类方法。外存通常是磁性介质或光盘等,能长期保存信息。内存指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。
存储器的主要功能是存储程序和各种数据,并能在计算机运行过程中高速、自动地完成程序或数据的存取。存储器是具有“记忆”功能的设备,它采用具有两种稳定状态的物理器件来存储信息。这些器件也称为记忆元件。在计算机中采用只有两个数码“0”和“1”的二进制来表示数据。
记忆元件的两种稳定状态分别表示为“0”和“1”。日常使用的十进制数必须转换成等值的二进制数才能存入存储器中。计算机中处理的各种字符,例如英文字母、运算符号等,也要转换成二进制代码才能存储和*作。
存储器:存放程序和数据的器件存储位:存放一个二进制数位的存储单元,是存储器小的存储单位,或称记忆单元存储字:一个数(n位二进制位)作为一个整体存入或取出时,称存储字存储单元:存放一个存储字的若干个记忆单元组成一个存储单元存储体:大量存储单元的**组成存储体存储单元地址:存储单元的编号字编址:对存储单元按字编址字节编址:对存储单元按字节编址寻址:由地址寻找数据,从对应地址的存储单元中访存数据。
以存储体(大量存储单元组成的阵列)为核心,加上必要的地址译码、读写控制电路,即为存储集成电路;再加上必要的I/O接口和一些额外的电路如存取策略管理,则形成存储芯片,比如手机中常用的存储芯片。得益于新的IC制造或芯片封装工艺,现在已经有能力把DRAM和FLASH存储单元集成在单芯片里。存储芯片再与控制芯片(负责复杂的存取控制、存储管理、加密、与其他器件的配合等)及时钟、电源等必要的组件集成在电路板上构成整机,就是一个存储产品,如U盘。从存储单元(晶体管阵列)到存储集成电路再到存储设备,都是为了实现信息的存储,区别是层次的不同。
构成存储器的存储介质,存储元,它可存储一个二进制代码。由若干个存储元组成一个存储单元,然后再由许多存储单元组成一个存储器。一个存储器包含许多存储单元,每个存储单元可存放一个字节(按字节编址)。每个存储单元的位置都有一个编号,即地址,一般用十六进制表示。一个存储器中所有存储单元可存放数据的总和称为它的存储容量。假设一个存储器的地址码由20位二进制数(即5位十六进制数)组成,则可表示2的20次方,即1M个存储单元地址。每个存储单元存放一个字节,则该存储器的存储容量为1MB。
工作原理
这里只介绍动态存储器(DRAM)的工作原理。
动态存储器每片只有一条输入数据线,而地址引脚只有8条。为了形成64K地址,必须在系统地址总线和芯片地址引线之间专门设计一个地址形成电路。使系统地址总线信号能分时地加到8个地址的引脚上,借助芯片内部的行锁存器、列锁存器和译码电路选定芯片内的存储单元,锁存信号也靠着外部地址电路产生。当要从DRAM芯片中读出数据时,CPU首先将行地址加在A0-A7上,而后送出RAS锁存信号,该信号的下降沿将地址锁存在芯片内部。接着将列地址加到芯片的A0-A7上,再送CAS锁存信号,也是在信号的下降沿将列地址锁存在芯片内部。然后保持WE=1,则在CAS有效期间数据输出并保持。
当需要把数据写入芯片时,行列地址先后将RAS和CAS锁存在芯片内部,然后,WE有效,加上要写入的数据,则将该数据写入选中的存贮单元。由于电容不可能长期保持电荷不变,必须定时对动态存储电路的各存储单元执行重读*作,以保持电荷稳定,这个过程称为动态存储器刷新。PC/XT机中DRAM的刷新是利用DMA实现的。首先应用可编程定时器8253的计数器1,每隔1⒌12μs产生一次DMA请求,该请求加在DMA控制器的0通道上。当DMA控制器0通道的请求得到响应时,DMA控制器送出到刷新地址信号,对动态存储器执行读*作,每读一次刷新一行。
主要作用
存储器主要是存储程序和数据。就象存放货物的仓库一样,人们在仓库中存放货物时为了便于存放和拿取,通常将货物在放的位置进行编号,并且留有存放及拿取的通路。
存储器是由存储体、地址译码器、读写控制电路、地址总线和数据总线组成。能由**处理器直接随机存取指令和数据的存储器称为主存储器,磁盘、磁带、光盘等大容量存储器称为外存储器(或辅助存储器)。存储器是计算机的记忆装置,它的主要功能是存放程序和数据。程序是计算机*作的依据,数据是计算机*作的对象。不管是程序还是数据,在存储器中都是用二进制的形式来表示的,并统称信息。在计算机中,存储器容量以字节(Byte,简写为B)为基本单位,一个字节由8个二进制位(**t)组成。存储容量的表示单位除了字节以外,还有KB、MB、GB、TB(可分别简称为K、M、G、T,例如,128MB可简称为128M)。其中:1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB。存储器一般分成主存储器(内存)和辅助存储器(外存)。存储器的组成见图。随机存取存储器(RAM)主存储器(内存)只读存储器(ROM)存储器硬盘辅助存储器(外存)软盘光盘其它图1.1.2存储器的组成主存储器与CPU直接相连,存放当前正在运行的程序和有关数据,存取速度快,但价格较贵,容量不能做得太大,目前微型计算机的内存配置一般为128MB或256MB;主存储器(内存)按工作方式又分为随机存取存储器(RAM)和只读存储器(ROM);随机存取存储器(RAM)中的数据可随机地读出或写入,是用来存放从外存调入的程序和有关数据以及从CPU送出的数据。人们通常所说的内存实际上指的是RAM。
按存储介质分类
(1)半导体存储器用半导体器件组成的存储器称为半导体存储器;特点:集成度高、容量大、体积小、存取速度快、功耗低、价格便宜、维护简单.主要分两大类:双极型存储器:TTL型和ECL型.金属氧化物半导体存储器(简称MOS存储器):静态MOS存储器和动态MOS存储器。
(2)磁表面存储器用磁性材料做成的存储器称为磁表面存储器,简称磁存储器。它包括磁盘存储器、磁带存储器等。特点:体积大、生产自动化程度低、存取速度慢,但存储容量比半导体存储器大得多且不易丢失。
(3)激光存储器信息以刻痕的形式保存在盘面上,用激光束照射盘面,靠盘面的不同反射率来读出信息。光盘可分为只读型光盘(CD-ROM)、只写一次型光盘(WORM)和磁光盘(MOD)三种。
2.按存取方式分类
(1)随机存储器(RAM):如果存储器中任何存储单元的内容都能被随机存取,且存取时间与存储单元的物理位置无关,则这种存储器称为随机存储器(RAM)。RAM主要用来存放各种输入/输出的程序、数据、中间运算结果以及存放与外界交换的信息和做堆栈用。随机存储器主要充当高速缓冲存储器和主存储器。
(2)串行访问存储器(SAS):如果存储器只能按某种顺序来存取,也就是说,存取时间与存储单元的物理位置有关,则这种存储器称为串行访问存储器。串行存储器又可分为顺序存取存储器(SAM)和直接存取存储器(DAM)。顺序存取存储器是完全的串行访问存储器,如磁带,信息以顺序的方式从存储介质的始端开始写入(或读出);直接存取存储器是部分串行访问存储器,如磁盘存储器,它介于顺序存取和随机存取之间。
(3)只读存储器(ROM):只读存储器是一种对其内容只能读不能写入的存储器,即预先一次写入的存储器。通常用来存放固定不变的信息。如经常用作微程序控制存储器。目前已有可重写的只读存储器。常见的有掩模ROM(MROM),可擦除可编程ROM(EPROM),电可擦除可编程ROM(EEPROM).ROM的电路比RAM的简单、集成度高,成本低,且是一种非易失性存储器,计算机常把一些管理、监控程序、成熟的用户程序放在ROM中。
3.按信息的可保存性分类
非永久记忆的存储器:断电后信息就消失的存储器,如半导体读/写存储器RAM。
永久性记忆的存储器:断电后仍能保存信息的存储器,如磁性材料做成的存储器以及半导体ROM。
4.按在计算机系统中的作用分
根据存储器在计算机系统中所起的作用,可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器等。为了解决对存储器要求容量大,速度快,成本低三者之间的矛盾,目前通常采用多级存储器体系结构,即使用高速缓冲存储器、主存储器和外存储器。
能力影响
从写命令转换到读命令,在某个时间访问某个地址,以及刷新数据等*作都要求数据总线在一定时间内保持休止状态,这样就不能充分利用存储器通道。此外,宽并行总线和DRAM内核预取都经常导致不必要的大数据量存取。在指定的时间段内,存储器控制器能存取的有用数据称为有效数据速率,这很大程度上取决于系统的特定应用。有效数据速率随着时间而变化,常低于峰值数据速率。在某些系统中,有效数据速率可下降到峰值速率的10%以下。
通常,这些系统受益于那些能产生更高有效数据速率的存储器技术的变化。在CPU方面存在类似的现象,近几年诸如AMD和 TRANSMETA等公司已经指出,在测量基于CPU的系统的性能时,时钟频率不是唯一的要素。存储器技术已经很成熟,峰值速率和有效数据速率或许并不比以前匹配的更好。尽管峰值速率依然是存储器技术重要的参数之一,但其他结构参数也可以极大地影响存储器系统的性能。
影响有效数据速率的参数
有几类影响有效数据速率的参数,其一是导致数据总线进入若干周期的停止状态。在这类参数中,总线转换、行周期时间、CAS延时以及RAS到CAS的延时(tRCD)引发系统结构中的大部分延迟问题。
总线转换本身会在数据通道上产生非常长的停止时间。以GDDR3系统为例,该系统对存储器的开放页不断写入数据。在这期间,存储器系统的有效数据速率与其峰值速率相当。不过,假设100个时钟周期中,存储器控制器从读转换到写。由于这个转换需要6个时钟周期,有效的数据速率下降到峰值速率的 94%。在这100个时钟周期中,如果存储器控制器将总线从写转换到读的话,将会丢失更多的时钟周期。这种存储器技术在从写转换到读时需要15个空闲周期,这会将有效数据速率进一步降低到峰值速率的79%。表1显示出针几种高性能存储器技术类似的计算结果。
显然,所有的存储器技术并不相同。需要很多总线转换的系统设计师可以选用诸如XDR、RDRAM或者DDR2这些更高效的技术来提升性能。另一方面,如果系统能将处理事务分组成非常长的读写序列,那么总线转换对有效带宽的影响小。不过,其他的增加延迟现象,例如库(bank)冲突会降低有效带宽,对性能产生负面影响。
DRAM技术要求库的页或行在存取之前开放。一旦开放,在一个小周期时间,即行周期时间(tRC)结束之前,同一个库中的不同页不能开放。对存储器开放库的不同页存取被称为分页遗漏,这会导致与任何tRC间隔未满足部分相关的延迟。对于还没有开放足够周期以满足tRC间隙的库而言,分页遗漏被称为库冲突。而tRC决定了库冲突延迟时间的长短,在给定的DRAM上可用的库数量直接影响库冲突产生的频率。
大多数存储器技术有4个或者8个库,在数十个时钟周期具有tRC值。在随机负载情况下,那些具有8个库的内核比具有4个库的内核所发生的库冲突更少。尽管tRC与库数量之间的相互影响很复杂,但是其累计影响可用多种方法量化。
存储器读事务处理
考虑三种简单的存储器读事务处理情况。第一种情况,存储器控制器发出每个事务处理,该事务处理与前一个事务处理产生一个库冲突。控制器必须在打开一个页和打开后续页之间等待一个tRC时间,这样增加了与页循环相关的大延迟时间。在这种情况下的有效数据速率很大程度上决定于I/O,并主要受限于DRAM内核电路。大的库冲突频率将有效带宽削减到当前高端存储器技术峰值的20%到30%。
在第二种情况下,每个事务处理都以随机产生的地址为目标。此时,产生库冲突的机会取决于很多因素,包括tRC和存储器内核中库数量之间的相互作用。tRC值越小,开放页循环地越快,导致库冲突的损失越小。此外,存储器技术具有的库越多,随机地址存取库冲突的机率就越小。
第三种情况,每个事务处理就是一次页命中,在开放页中寻址不同的列地址。控制器不必访问关闭页,允许完全利用总线,这样就得到一种理想的情况,即有效数据速率等于峰值速率。
第一种和第三种情况都涉及到简单的计算,随机情况受其他的特性影响,这些特性没有包括在DRAM或者存储器接口中。存储器控制器仲裁和排队会极大地改善库冲突频率,因为更有可能出现不产生冲突的事务处理,而不是那些导致库冲突的事务处理。
然而,增加存储器队列深度未必增加不同存储器技术之间的相对有效数据速率。例如,即使增加存储器控制队列深度,XDR的有效数据速率也比 GDDR3高20%。存在这种增量主要是因为XDR具有更高的库数量以及更低的tRC值。一般而言,更短的tRC间隔、更多的库数量以及更大的控制器队列能产生更高的有效带宽。
实际上,很多效率限制现象是与行存取粒度相关的问题。tRC约束本质上要求存储器控制器从新开放的行中存取一定量的数据,以确保数据管线保持充满。事实上,为保持数据总线无中断地运行,在开放一个行之后,只须读取很少量的数据,即使不需要额外的数据。
另外一种减少存储器系统有效带宽的主要特性被归类到列存取粒度范畴,它规定了每次读写*作必须传输的数据量。与之相反,行存取粒度规定每个行激活(一般指每个RAS的CAS*作)需要多少单独的读写*作。列存取粒度对有效数据速率具有不易于量化的巨大影响。因为它规定一个读或写*作中需要传输的小数据量,列存取粒度给那些一次只需要很少数据量的系统带来了问题。例如,一个需要来自两列各8字节的16字节存取粒度系统,必须读取总共32字节以存取两个位置。因为只需要32个字节中的16个字节,系统的有效数据速率降低到峰值速率的50%。总线带宽和脉冲时间长度这两个结构参数规定了存储器系统的存取粒度。
总线带宽是指连接存储器控制器和存储器件之间的数据线数量。它设定小的存取粒度,因为对于一个指定的存储器事务处理,每条数据线必须至少传递一个数据位。而脉冲时间长度则规定对于指定的事务处理,每条数据线必须传递的位数量。每个事务处理中的每条数据线只传一个数据位的存储技术,其脉冲时间长度为1。总的列存取粒度很简单:列存取粒度=总线宽度×脉冲时间长度。
很多系统架构仅仅通过增加DRAM器件和存储总线带宽就能增加存储系统的可用带宽。毕竟,如果4个400MHz数据速率的连接可实现 1.6GHz的总峰值带宽,那么8个连接将得到3.2GHz。增加一个DRAM器件,电路板上的连线以及ASIC的管脚就会增多,总峰值带宽相应地倍增。
首要的是,架构师希望完全利用峰值带宽,这已经达到他们通过物理设计存储器总线所能达到的大值。具有256位甚或512位存储总线的图形控制器已并不鲜见,这种控制器需要1,000个,甚至更多的管脚。封装设计师、ASIC底层规划工程师以及电路板设计工程师不能找到采用便宜的、商业上可行的方法来对这么多信号进行布线的硅片区域。仅仅增加总线宽度来获得更高的峰值数据速率,会导致因为列存取粒度限制而降低有效带宽。
假设某个特定存储技术的脉冲时间长度等于1,对于一个存储器处理,512位宽系统的存取粒度为512位(或者64字节)。如果控制器只需要一小段数据,那么剩下的数据就被浪费掉,这就降低了系统的有效数据速率。例如,只需要存储系统32字节数据的控制器将浪费剩余的32字节,进而导致有效的数据速率等于50%的峰值速率。这些计算都假定脉冲时间长度为1。随着存储器接口数据速率增加的趋势,大多数新技术的低脉冲时间长度都大于1。
选择技巧
存储器的类型将决定整个嵌入式系统的*作和性能,因此存储器的选择是一个非常重要的决策。无论系统是采用电池供电还是由市电供电,应用需求将决定存储器的类型(易失性或非易失性)以及使用目的(存储代码、数据或者两者兼有)。另外,在选择过程中,存储器的尺寸和成本也是需要考虑的重要因素。对于较小的系统,微控制器自带的存储器就有可能满足系统要求,而较大的系统可能要求增加外部存储器。为嵌入式系统选择存储器类型时,需要考虑一些设计参数,包括微控制器的选择、电压范围、电池寿命、读写速度、存储器尺寸、存储器的特性、擦除/写入的耐久性以及系统总成本。
选择存储器时应遵循的基本原则
1、内部存储器与外部存储器
一般情况下,当确定了存储程序代码和数据所需要的存储空间之后,设计工程师将决定是采用内部存储器还是外部存储器。通常情况下,内部存储器的性价比高但灵活性低,因此设计工程师必须确定对存储的需求将来是否会增长,以及是否有某种途径可以升级到代码空间更大的微控制器。基于成本考虑,人们通常选择能满足应用要求的存储器容量小的微控制器,因此在预测代码规模的时候要必须特别小心,因为代码规模增大可能要求更换微控制器。目前市场上存在各种规模的外部存储器器件,我们很容易通过增加存储器来适应代码规模的增加。有时这意味着以封装尺寸相同但容量更大的存储器替代现有的存储器,或者在总线上增加存储器。即使微控制器带有内部存储器,也可以通过增加外部串行EEPROM或闪存来满足系统对非易失性存储器的需求。
2、引导存储器
在较大的微控制器系统或基于处理器的系统中,设计工程师可以利用引导代码进行初始化。应用本身通常决定了是否需要引导代码,以及是否需要专门的引导存储器。例如,如果没有外部的寻址总线或串行引导接口,通常使用内部存储器,而不需要专门的引导器件。但在一些没有内部程序存储器的系统中,初始化是*作代码的一部分,因此所有代码都将驻留在同一个外部程序存储器中。某些微控制器既有内部存储器也有外部寻址总线,在这种情况下,引导代码将驻留在内部存储器中,而*作代码在外部存储器中。这很可能是安全的方法,因为改变*作代码时不会出现意外地修改引导代码。在所有情况下,引导存储器都必须是非易失性存储器。
可以使用任何类型的存储器来满足嵌入式系统的要求,但终端应用和总成本要求通常是影响我们做出决策的主要因素。有时,把几个类型的存储器结合起来使用能更好地满足应用系统的要求。例如,一些PDA设计同时使用易失性存储器和非易失性存储器作为程序存储器和数据存储器。把永久的程序保存在非易失性ROM中,而把由用户**的程序和数据存储在有电池支持的易失性DRAM中。不管选择哪种存储器类型,在确定将被用于终应用系统的存储器之前,设计工程师必须仔细折中考虑各种设计因素。
二、8051单片机片内数据存储器的三个存储区域是如何划分的
8051内部数据RAM区,包括有工作寄存器组区、可直接位寻址区和数据缓冲区。
(1)00H~1FH为工作寄存器组区,共分4组,每组占用8个RAM字节单元,每个单元作为一个工作寄存器,每组的8个单元分别定义为8个工作寄存器R0~R7。
(2)20H~2FH为可位寻址区域,这16个字节的每一位都有一个地址,编址为00H~7FH。
(3)30H~7FH为堆栈、数据缓冲区。
三、...设在数据段中以BLOCK为首地址的存储区域中存...
你好,我来为你解答:
第一章
1.1
CPU分析、控制并执行指令的部件
IP指示下一条将要执行的指令的地址
SP保存当前栈顶地址的寄存器
状态标志指出指令*作结果的标志,如ZF,CF等。
控制标志控制*作的标志,只有DF,IF,TF三个。
ALU进行算术和逻辑运算的单元
存储器存储程序、数据等信息的的记忆装置。
物理地址 CPU发出的访问存储器的地址信息。
偏移地址相对于段起始地址的偏移量。
段地址是逻辑段的起始地址。
1.2下列*作可使用哪些寄存器
·存放各种运算*作的数据:AX,BX,CX,DX,SP,BP,SI,DI
(我的辅导书上没有SP,BP;why?)
·存放数据串*作时的计数值:CX
·查看程序已执行到哪条指令的地址:IP
·查看堆栈中当前正要进行入出栈的存储单元的地址:SP
·查年运算结果是否等于零:PSW的ZF
·查年程序中的数据存放段区是从哪个地址开始的:DS,ES
·查看程序中的指令存放的段区是从哪个地址开始的:CS
1.3段地址和偏移地址为1000:117A的存储单元的物理地址是什么?而1109:00EA或1025:0F2A的存储单元的物理地址又是什么:这说明了什么问题?
1000:117A物理地址为:1117A;1109:00EA的物理地址为:1117A;1025:0F2A的物理地址为:1117A.说明物理地址不变,段地址改变,偏移地址也随之变化.
1.存储器地址对应的数据(图略)
75422H(字节):9CH
75424H(字节):5DH
75422H(字):249CH
75424H(字):E65DH
第二章
2.1写出相应的汇编语言指令:
(1)以寄存器BX和SI作为基址变址寻址方式把存储器中的一个字传送到CX寄存器。
MOV CX,[BX][SI(注:寄存器寻址只能使用:BX,BP,SI,DI;且BX、BP或SI,DI不能同时使用,可能我说的不太对,请版主确认一下)
(2)以寄存器BX和偏移量value作寄存器相对寻址方式把存储器的一个字和AX相加,把结果(即和)送回那个字单元中。
ADD value[BX],AX
(3)将一个字节立即数0B6H与符号的地址为NUM的存储器字节单元内容相比较。
CMP BYTE PTR 0B6H,NUM(如果前面不加BYTE RTR,默认的也是字节比较吧?还有双字比较,应该怎么写?)
(4)测试从寄存器BP和DI、偏移量COUNT作为相对基址变址寻址方式寻址的存储器字节单元内容高位B7的值,字节单元的内容不能改变。
TEST COUNT[BP][DI],80H
(5)将AH寄存中的高4位和低4位数据互换。
MOV CL,4
ROL(或ROR) AH,CL
(6)清除以寄存器SI间接寻址的存储器字单元,同时清除CF标志位.
XOR AX,AX;使AX=00000000,CF=0
MOV [SI],AX
2.2设DS=1000H,BX=2865H,SI=0120H,偏移量D=47A8H,试计算下列各种寻址方式下的有效地址.
1)使用D的直接寻址 47A8H(这道指令怎么写?如何定义D的值)
2)使用BX的寄存器间接寻址 2865H
3)使用BX和D的寄存器相对寻址 700DH
4)使用BX、SI和F的相对基址变址寻址 712DH
5)使用BX、SI的基址变址寻址 2985
2.3假设DS=1000H,BX=2A80H,CX=3142H,SI=0050H,(10050H)=3BH,(10051H)=86H,(11200H)=7AH,(11101H)=64H,(12ADOH)=0A3H,每小题的括号中分别填入指令执行后的结果:
1)MOV AX,1200H;AX=1200H
2)MOV AX,[1200H];AX=1200H(书上的答案是647A,但是我用DEBUG试了一下是1200,可能是因为我的PII的原因吧,希望有8088的朋友能试一下,版主,考起试来应该怎么写呀?)
3)ADD [SI],CX;(10050H)=7DH,9100510=B7H,ZF=0,CF=0,SF=1,OF=1
4)OR BYTE PTR [BX][SI],54;(12AD0H)=F7,CF=0,OF=0
5)MOV 150H[BX],CH;[12BD0H]=31,CH=31
2.4指出下列指令的错误原因
1)MOV AX,CL两*作数的长度不一样.
2)MOV CS,AX不能给CS赋值
3)INC BETA[BP]书上说:没有数据类型说明,但我认为它应该自动默认为字节*作,版主再来看看吧
4)MOV ES,1850H立即数不能直接送段寄存器
5)ADD BX,DS段寄存器不能做为加法*作数使用
6)AND AX,[CX]寄存器寻址只能使用BX,SI,DI,BP
2.5说明下列指令执行的*作,说明原始数据和结果数据的存储地点
贴子相关图片:
作者: 218.27.73.* 2005-9-3 09:21回复此发言
--------------------------------------------------------------------------------
2汇编语言程序设计课后习题答案
[原始数据](结果数据)
1)mov [2700h],cx这条指令在我的P4试了一下,是错误的;如果考试时出只好说是:把[CX]中的内容送到(数据段中偏移地址为2700h字单元)中;
2)MOV DH,50[SI]将[数据段中有效地址为SI+50的字节单元]中的数据送入(DH)中;
3)LEA SI,ARRAY将ARRAY的偏移地址送入(SI),结果数据在[代码段对相应指令字节中]
4)DAS将AL中的压缩的十六进制数调整为十进制数,结果数据在AL中,原始数据也在AL中
5)ADC CL,[BX]将BX和CL的和加上CF的值后,存放在CL中,结果在CL中,原始在BX,CL,CF中
6)ROR WORD PTR ALPHA[SI],CL将偏移地址为ALPHA+SI字单元中的数据循环移,结果和原始都在哪个字单元中.
2.6指出下列无条件转移指令的转移地址中的偏移地址是什么,存放在何处.
1)JMP BX偏移地址是BX中的值,存放在BX中
2)JMP WORD PTR [BX]偏移地址是以BX中的值为偏移地址的一个字单元中的数值,存放在以BX中的值为偏移地址的一个字单元中
3)JMP NEAR PTR PROA偏移地址为PROA的偏移地址,存放在CS段的相应指令处(书上说的不一样,请版主做下这道题)
4)JMP FAR PTR FAR_PRO偏移地址为FAR_PRO的偏移地址,,存放在CS段的相应指令处
5)JMP SHORT AGAIN偏移地址为AGAIN的偏移地址,存放在CS段的相应指令处(书上说的不一样,请版主做下这道题)
6)JMP DWORD PTR [BX][DI]偏移地址是以BX,DI为基址变址寻址的两个字单元的内容,存放在以BX,DI为基址变址寻址的两个字单元中
2.7写出把道址为BLOCK的字数组的第六个字送到CX寄器的指令序列,要发别使用以下几种寻址方式
1)以BX寄存器的间接寻址
LEA BX,BLOCK+0AH
MOV CX,[BX]
2)以BX寄存器的相对寻址
LEA BX,BLOCK
MOV CX,0AH[BX]
3)以BX,SI的基址变址寻址
LEA BX,BLOCK
MOV CX,[BX][SI]
2.8指出下列指令的源和目的*作数的寻址方式
(目地*作数寻址方式;原*作数寻址方式)
1)MOV ARRAY,BX
直接寻址;寄存器寻址
2)ADC CX,ALPHA[BX][SI]
寄存器寻址;相对基址变址寻址,寄存器寻址
3)AND BYTE PTR GAMMA [DI],11011001B
寄存器相对寻址;立即寻址,寄存器相对寻址
4)INC WORD PTR [BX]
寄存器间接寻址;寄存器间接寻址
5)TEST EX:[IS],DX
(目的*作数?在哪?只改变标志位,算寄存器寻址吗?书上写的寄存器间接寻址,不明白);寄存器间接寻址,寄存器寻址
6)SBB SI,[SI]
寄存器寻址;寄存器寻址,寄存器间接寻址
2.9分别说明下列每组指令中的两条指令的区别:
1) MOV AX,TABLE
LEA AX,TABLE
前者是将变量TABLE的内容传递给AX;后者是将TABLE和偏移地址传递给AX
2) AND BL,0FH
OR BL,0FH
前者是BL的内容与0F相与;后者是BL与0FH相或
3) JMP SHORT L1
JMP NEAR PTR L1
前者为短跳转,后者为近跳转
4) MOV AX,[BX]
第三章
3.1
1)使计算机执行某种*作的命令;指令
2)表示计算机执行什么*作的符号;助记符
3)存放指令机器码的存储器段区;代码段
4)指出指令在程序中位置的符号地址;标号
5)将汇编语言程序翻译成机器码程序的实用程序;汇编程序
3.2试写出完成下列*作的指示性语句:
1)将56H,78,0B3H,100存放在定义为字节变量ARRAY的存储单元中.
ARRAY DB 56H,78,0B3H,100
2)将字数据2965H,45H,2965,0A6H存放在定义为字节变量DATA的存储单元中.
ARRAY DB 65H,29H,45H,95H,0BH,0A6H;书上在0B和0A6H后面有个0,不什么是什么.
3)将字节数据56H,0C6H,78H,12H存放在字变量ALPHA的存储单元中.并且不改变数据按字节存储的次序
ALPHA DW 0C656H,1278H
4)在BETA为道址的存储单元中连续存放字节数据:2个23,5个'A',10个(1,2),20个空单元。
BETA DB 2 DUP(23),5 DUP('A'),10 DUP(1,2), 20 DUP(?)
5)在STRING为首址的存储单元中存放字符串'THIS IS A EXAMPE'
STRING DB'THIS IS A EXAMPE'
3.3下列伪指令序列中,BASUB的值为多少?它表示什么意义?
作者: 218.27.73.* 2005-9-3 09:21回复此发言
--------------------------------------------------------------------------------
3汇编语言程序设计课后习题答案
BUFF DB 7,6,'56',?
ARRAY DW 0,67H,7
BASUB EQU ARRAY-BUFF
BASUB的值是5,它表示ARRAY与BUFF的首地址的差.
3.4假设程序中的数据定义如下:
BUF1 DB 100 DUP('a')
BUF2 DW 1275H,567,0C5H
BUF3 DB 20 DUP(?)
BUF4 DB 7,4,6,9,8
1)用一条指令将BUF1的谝移地址送入BX.
LEA BX,BUF1
2)将BUF2的第三字节数据送入CL
MOV BYTE PTR CL,[BUF2+2]
3)将0A6H送入BUF3的第10个字节单元中
MOV BYTE PTR [BUF3+9],0A6H
4)用伪指令写出BUF1和BUF2二者的总长度(字节数)
L1_2 EQU BUF3-BUF1
5)用一组指令写出BUF2的第二个数据567和BUF4的第三个数据6相加,结果(和)送入BUF3
MOV AL,BUF4+2
MOV AH,0
ADD AX,BUF2+2
MOV BUF3,AX
3.5指出下列第一对伪指令语句的区别:
1)X1 DB 76; X2 EQU 76
前者是向X1的字节单元存入76,后者是将X2的值定义为76.
2)X1 DW 3548H; X2 EQU BYTE PTR X1
前者是定义X1的字单元值为3548,后者是定义X2的值为X1的第一个字节单元的值48.
3)X1 EQU 3; X2= 3
两者都是赋值语句,但前者只能定义一次,后者可以重复定义.
4)X1 DW 3678H; X2 DB 36H,78H
前者的字节单元内容依次为78,36;后者的字节单元内容依次为36,78.
5)X1 DW 6341H; X2 DW 6341
前者为十六进制的6341;后者为十进制的6341
3.6设置一个数据段DATA_SEC,其中连续存放下列的8个变量,用段定义语句和数据定义语句写出数据段:
1)DATA1为字符串变量:'DATA SEGMENT'
2)DATA2为十进制数字节变量:72,65,-10
3)DATA3为十六进制数字字节变量:109,98,21,40
4)DATA4为10个零的字节变量.
5)DATA5为数字的ASCII字符字节变量:12345
6)DATA6为十进制的字变量:7,9,298,1967
7)DATA7为十六进制的数的字变量:785,13475
8)DATA8为本段中字变量和字节变量之间的字节单元数之差
DATA_SEC SEGMENT
DATA1 DB'DATA SEGMENT'
DATA2 DB 72,65,-10
DATA3 DB 6DH,62H,15H,28H
DATA4 DB 10 DUP(0)
DATA5 DB'12345'
DATA6 DW 7,9,298,1967
DATA7 DW 0311H,34A3H
D1 EQU DATA6-DATA1
D2 EQU$-DATA6
DATA8 EQU D2-D1
3.7设程序中的数据定义如下:
DATA1 DW?
DATA2 DB 32 DUP(?)
DATA3 DD?
DLENGTH EQU$-DATA1
问DLENGTH的值为多少?它表示什么意义?
DLENGTH的值为38,表示DATA1,DATA2,DATA3所占用的字节数之和
3.8指出下列第一小题中的伪指令表达的*作哪些是错误的?错误在哪时?
1)
ALPHA EQU 78H
BETA EQU ALPHA+1
没错.
2)
DATA DB 395
1个字节多能够表示256
3)
X1 SEG
.
.
.
X1 ENDS
SEG应该写成SEGMENT
4)
ALPHA EQU BETA
BETA没有赋值
5)
COUNT EQU 100
COUNT EQU 78
不可以用EQU给一个变量重复赋值
6)
MAIN PROC
.
.
.
ENDP
过程结束标志,应该有个MAIN
7)ARRAY DW 10 DUP(?)
.
.
.
JMP ARRAY
ARRAY是变量,JMP不能跳到ARRAY处
8)
SEGMENT CODE_SEG
.
.
.
ENDS CODE_SEG
书写格式错误,应写为
CODE_SEG SEGMENT
CODE_SEG ENDS
3.9对于下面的数据定义,写出各条指令执行的结果:
FLDB DW 0A24FH
TABLE DB 32H,52,0C2H,213
TEA EQU WORD PTR TABLE
ARRAY DB'ABCD'
COUNT EQU$-ARRAY
1)MOV AX,FLDB AL=(4FH)
2)MOV BX,TEA BH=(52H)