文档库 最新最全的文档下载
当前位置:文档库 › 磁盘寻址(CHS寻址方式、LBA寻址方式)

磁盘寻址(CHS寻址方式、LBA寻址方式)

磁盘寻址(CHS寻址方式、LBA寻址方式)
磁盘寻址(CHS寻址方式、LBA寻址方式)

1、磁盘寻址

1.1、磁盘驱动器

磁盘物理结构图如下:

磁盘逻辑组成图如下:

1.2、什么是CHS(cylinder head sector)

通过上面材料,我们了解到磁盘通常由多个盘片、多个磁头组成。

每个盘片对应一个磁头(head),每个盘片被化成多个同心圆(track/cylinder),每个同心圆被切断成多个段(sector)。磁盘存储最小单位是sector,那么如何对sector进行定位?

CHS是早期在IBM PC架构上面用来进行磁盘寻址的办法。

CHS是一个三元组,组成如下:

1. 一共24个 bit位。

2. 其中前10位表示cylinder,中间8位表示head,后面6位表示sector。

3. 最大寻址空间

随着科技大发展,磁盘容量大幅提升。远远超过了8GB寻址范围,如何对8GB之外空间进行寻址?历史上曾经CHS从24位扩展到多28位,实现寻址128GB,但是面对现在磁盘2TB容量还是无能为力,下面我们请出最终解决方案LBA。

1.3、什么是LBA(logical block addressing)

正如上文所说,LBA是用来取代CHS。那么LBA是怎么实现磁盘寻址?

1. LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址。

2. LBA采用48个bit位寻址,最大寻址空间128PB。

LBA与CHS转换规则是怎么样的?

CHS->LBA

LBA->CHS

小结:

不管CHS(寻址方式)也好,还是LBA(寻址方式)也好。磁盘存储寻址都需要通过cylinder、head、sector 这三个变量来实现;CHS、LBA都是一个数字,CHS按照固定格式把24个bit位分成cylinder、head、sector;LBA则需要通过求模运算得出cylinder、head、sector。即由chs值可以直接获得cylinder、head、sector这三个变量的值,而由LBA值则需要通过运算间接得出cylinder、head、sector这三个变量的值。

补充一下:

a、CHS方式寻址是在传统的扇区分布下进行的,即过盘片中心画直线来分扇区,具体如下图所示:

而LBA转换为CHS寻址则使用的ZBR(Zone Bit Recording)方式分配扇区,即圆周上的扇区长短都一样。

b、磁盘在经过磁盘低级格式化程序格式化后,才出现有扇区、磁道这些对象(一个柱面是由各个盘面上的同一位置的磁道组成的,所以柱面不是磁盘低级格式化程序直接产生出来的对象,而是由磁道这个对象引申出来的一个概念)的。

(不同的)磁盘低级格式化程序采用不同的寻址方式算法时,盘面划分后的图像也不一样(如上图)。

一个磁盘,比如,原先使用的CHS寻址方式,后来可以修改为LBA寻址方式,当然这样盘面划分后的图像也变了,总之,一个磁盘可以修改它的寻址方式。

c、还有,由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式。

137GB、2.1TB硬盘容量限制和CHS、LBA寻址及GPT分区表、UEFI/EFI 引言:各种寻址方式的所能寻址的寻址空间收到限制跟各个层次上寻址方式所能使用的寄存器个数(CPU 的寄存器个数对应能支持的操作系统的位数,BIOS的各个层次的寄存器个数对应能支持的寻址空间大小)有关。

目前市场上的硬盘价格越来越低,相比以前同样价格买的硬盘容量越来越大。但是更换硬盘时,也要注意你的PC主板是否支持目前的大容量硬盘。计算机的发展一直受着硬盘容量限制或BIOS(软件系统,主板是其硬件载体)访问容量限制的制约。

要明白这个原因我们需要对IDE接口硬盘的工作方式做一个介绍,即使到现在我们今天的IDE硬盘驱动依旧使用早先的DOS-BIOS(磁盘操作系统-基本输入/输出系统)的分层结构上。它的基本工作模式就是:程序调用->DOS功能调用->文件管理设备->INT 13中断管理(读/写)->BIOS磁盘服务->IDE(ATA)界面->磁盘控制器。也就是说我们如果需要对硬盘进行操作必须通过以上的一系列步骤才能完成,那么我们以下一起来看看这一系列步骤的作用。

文件管理设备

其负责文件及其在磁盘上存储位置之间的映射关系,不过需要通过磁盘读写中断INT13执行读写命令来存储、调入文件。当新文件被保存时,文件管理器决定它在当前目录里的存储位置,在文件分配表中为这个新文件添加文件目录项,并把文件写入磁盘。当读文件时,文件管理器在FAT中找到文件在磁盘上的位置,接着就调入文件。

IDE(ATA) 界面

在介绍IDE(ATA)界面前,简单说说硬盘的结构:硬盘分为一定数量的柱面(以硬盘中心为圆心的同心圆磁迹),每个柱面都需要磁头来读写数据。另外,硬盘上的数据都是以每扇区512字节的格式存储的,所有的数据传输都是以扇区(柱面被等分的园弧磁迹)为单位的。IDE(ATA)界面是寄存器驱动式的并口总线。要传输数据,BIOS 首先往IDE(ATA)里特定的寄存器写入数据的开始地址和数据传输的长度,再把有关的读/写命令往特定的寄存器里发送从而开始数据传输。

现在的硬盘一般都支持逻辑块寻址(LBA)和柱面磁头扇区寻址(CHS),我们以CHS寻址方式来举例:数据传输的开始地址是写到4个8位寄存器里的,分别是:

柱面低位寄存器

柱面高位寄存器

扇区寄存器

设备/磁头寄存器

柱面地址是16位[柱面低位寄存器(8位),柱面高位寄存器(8位)],扇区地址是8位(注意:扇区寄存器里第一个扇区是1扇区,而不是0扇区),而磁头地址是4位(没有完全占用8位)。因此,硬盘柱面的最大数是65,536(2的16次方),磁头的最大数是16(2的4次方),扇区的最大数是255(2的8次方-1,注意刚刚我们提到的扇区寄存器问题)。

所以,能寻址的最大扇区数是267,386,880 (65,536x16x255)。一扇区又是512字节,也就是说如果以CHS 寻址方式,IDE硬盘的最大容量为136.9GB。LBA寻址方式,上述的总共28位可用的寄存器空间(16+8+4)被看作一个完整的LBA地址,因为包括位0(CHS里扇区不能从0开始计算),其能寻址的扇区数是268,435,456 (65,536x16x256),这时IDE硬盘的最大容量为137.4GB。

INT 13管理

INT 13管理其实也是按照寄存器的模式来设计的,它的高层即文件管理器层发布数据读写命令和有关的参数给CPU,然后触发INT 13中断的进行,激活BIOS的磁盘服务来执行数据传输。数据的开始地址被写到3个8位寄存器里,分别是:

柱面低位寄存器

柱面高位/扇区寄存器

磁头寄存器

柱面地址是10位(柱面低位寄存器占用8位、柱面高位寄存器占用2位),扇区地址为6位(8位-已经被计算过的高位寄存器的2位)。磁头寄存器为8位。因此如果这样的话:柱面的最大数是1024(2的10次方) ,磁头的最大数是256(2的8次方),扇区的最大数是63(2的6次方-1)。所以,通过INT 13管理能寻址的扇区数是16,515,072 (1,024x256x63)。一扇区是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为8.456GB。LBA寻址方式能寻址的扇区数是16,777,216(1024x256x64),这时IDE硬盘的最大容量为8.601GB。

看到这里,我们应该感到硬盘容量限制的成因有了一些“眉目”了吧,那么我们具体来到底是什么让硬盘出现了所谓的限制:

528MB硬盘容量限制

由于早先的硬盘容量比较小,因此设计的BIOS的时候当把地址从Int 13的地址寄存器转换为IDE(ATA)的地址寄存器时,仅仅把INT 13管理中10位的柱面地址用来对应IDE(ATA)界面中的16位柱面寄存器,而把没有用到的6位(高位寄存器)地址都设定为0。并且也仅把6位的扇区地址来对应IDE(ATA)界面的8位扇区寄存器,其中没有用到的2位设置为0。并且INT 13管理的磁头寄存器4位(又去掉了4位)来对应IDE(ATA)。因此,此时的磁盘柱面最大数为1024(2的10次方),磁头的最大数是16(2的4次方),扇区的最大数是63(2的6次方-1)。因此能寻址的扇区数就成了1,032,192 (1,024x16x63)。一个扇区的容量是512字节,也就是说如果以CHS 寻址方式,IDE硬盘的最大容量为528.4MB。因此528MB的硬盘容量限制就出现了。

2.1GB硬盘容量限制

这里分为两个部分,一部分是由磁盘服务的限制造成的,另外一个是由于磁盘格式造成的,通常我们把前者称为2.1GB的硬件容量限制,后一种称为2.1GB的软件容量限制。

硬件容量硬件:为了528MB容量限制的问题,人们提出一些不同的办法,其中一个办法就是INT 13服务的磁头寄存器没有用到的4位中的2位(确切的说是高2位)保留给柱面数的第11、12位使用。这样,最大的磁头数就是64(2的6次方)。但是,当时的操作系统不使用这种转换方法,其认为磁头寄存器的所有位数只可能记录磁头数。比如,为了正确地转换柱面数为2,048、磁头数为64的硬盘,就需要操作系统把柱面数除以4(512个逻辑柱面数),磁头数乘以4(256个逻辑磁头数)。不过由于BIOS中并没有开放所有的磁头数寄存器,当然无法记录这样的磁头数。因此遇到这种运行机制的BIOS,在系统自检的时候就会造成系统当机。

软件容量限制:当时DOS分区的限制是由文件分配表(FAT)决定的。FAT处理存储空间是以簇为单位的,它处理一簇的最大长度是32,768字节,最多能处理65,536个簇,如果将两个数字相乘,就会得到DOS的最大分区界限值是2,147,483,648字节或2,048MB (2,147,483,648 / 1,0242)。因此超过这个容量的硬盘,如果使用FAT格式,就最大只能识别2.048GB的硬盘容量。

3.2GB的容量限制

一些版本的BIOS不能识别超过6322柱面的硬盘,不过这种BIOS比较少见,由于柱面有限制,其最高支持扇区数为6,372,576 (6,322x16x63),如果乘以512扇区容量的话,其最高支持容量为

6,372,576x512=3,262,758,912/1024=3.18GB。

4.2GB的容量限制

当时一些操作系统使用8位寄存器来存储磁头数,这样当BIOS报告硬盘的磁头数等于256(最高容量)时,只有磁头数的最先一位(即0)被系统保存,从而导致硬盘配置错误。一旦硬盘的磁头数是16,柱面数大于8,192(2的13次方,由于后三位寄存器已经被磁头寄存器借用,其实这里牵涉到一个突破528MB容量限制的转换做法的问题,由于这一段比较复杂,在这里就不详细介绍了,我们只要明白有这个限制就够了),系统就无法正常识别了,因此其最大的容量就被限制在了4.2GB=8,192x16x63x512/1024。

8.4GB硬盘容量限制

我们已经知道INT 13服务的寻址方式最高可以支持8.4GB以下的容量(柱面数、磁头数、扇区数的最大值分别是16,383、16和63,而三者相乘就是8.456GB)。因此,这个容量限制出现是迟早的问题了。所以,这个限制是我们目前最常遇到的容量限制。

33.8GB的容量限制

在CHS寻址中,由于IDE(ATA)界面的限制,柱面数最高支持65,535(2的16次方-1),所以,当遇到柱面数大于65,535的时候,系统就无法识别这种硬盘了,不过LBA由于独特的寻址模式就不存在这个问题,这个容量限制具体为:65,535x16x63x512/1024=33.8GB。

137GB硬盘容量限制

目前的磁盘工作方式就注定IDE硬盘存在这个问题,前面介绍IDE(ATA)界面的时候,这个问题就已经出现了。为了解决INT 138.4G限制,一些厂商定义了新的扩展INT 13服务扩展标准。新的INT 13服务扩展标准不使用操作系统的寄存器传递硬盘的寻址参数,它使用存储在操作系统内存里的地址包。地址包里保存的是64位LBA地址,如果硬盘支持LBA寻址,就把低28位直接传递给ATA界面,如果不支持,操作系统就先把LBA地址转换为CHS地址,再传递给ATA界面。通过这种方式,能实现在ATA总线基础上CHS寻址最大容量是136.9 GB,而LBA寻址最大容量是137.4GB。

因为137GB容量限制正是我们刚刚面临的问题,因此变得十分有名,我也是因为遇到了这个问题才学习了下硬盘容量限制这些知识。目前已经使用了新的方法解决了此问题,因此,我们的电脑上已经用上了500GB、1TB的硬盘了。但是,我们目前使用的电脑依然存在这种容量限制:

2.1TB系统访问容量限制

目前的主流电脑大多无法运行2.1TB以上容量的硬盘。也就是说采用普通32位Windows7、Windows Vista 等系统的电脑目前最大也只能识别到2.1TB的硬盘。那么到底是什么原因造成了这一问题呢?答案就是传统的LBA(Ligical Block Address,逻辑块寻址)寻址方式以及现有系统的限制。

硬盘容量限制,最著名的当数137GB硬盘容量限制。当时不少人认为100GB的硬盘已经足够了,所以工程师们便推出了28bit LBA寻址模式,137GB由此而来。为了消除28bit LBA寻址模式的限制、解除137GB容量的限制,Technical Committee T13组织对ATA/ATAPI-6标准进行了一些修改,通过48bit LBA来支持更多的扇区。后来由Compaq(康柏)、Microsoft(微软)、Maxtor(迈拓)联合推出的Big Drives规范就是以T13组织提出

的48bit方案为基础,这种规范的中心思想就是增加CHS(C:柱面,H:磁头,S:扇区)的位数,而柱面寄存器不变,这样就将原来LBA寻址中可用的寄存器空间从28bit提高到了48bit,可以寻址的扇区数就为

281,474,976,710,655,这样可支持的硬盘容量就达到了281,474,976,710,655×512=144,115,188,075,855,872字节,大致相当于144PB(相当于144000GB)的容量,即使从现在的眼光来看,如此大容量的硬盘也足够我们用上很久了。(当然,可能以后还会遇到144PB容量限制。)

既然48bit LBA支持144PB容量的硬盘,那现在的系统怎么识别不到2.1TB以上的硬盘呢?要真正实现144PB,除了硬件存储系统及其接口芯片方面的改造外,还需要操作系统的支持。目前只有专业领域才支持64bit 运算,而主流操作系统仍停留在32bit的编码模式,所以对硬盘的寻址自然最大也只有32位。现有32位系统的硬盘容量限制大小可以根据32bit LBA来计算,最后得出结论是最大只能支持2.1 TB的硬盘容量。这有点类似于当年“528MB、2.1GB”时所遇到的问题,因此,要让硬盘突破2.1TB的限制,用户必须先将系统升级到64位操作系统。目前的Windows7或者Windows Vista的64位系统和修改版的Linux系统都可以支持48bit这种长字节寻址模式。

* GPT分区表

除了彻底解放48bit LBA寻址模式以外,我们还要考虑到另外一个关键因素,即分区表。目前的硬盘都采用MBR分区方式,而这种方式也是限制硬盘容量的关键因素。MBR位于硬盘的第一个扇区,它所记录的便是硬盘的分区信息。如果使用Fdisk、Partition Magic或者直接在Windows安装过程中对硬盘进行分区,分区的信息都将被写入硬盘的MBR中,硬盘就根据MBR的内容来确定自己的逻辑分区情况。

MBR最多可支持四个主分区或三个主分区、一个扩展分区的组合。这一方案采用4个字节来存储分区的总扇区数,最大能表示4,294,967,296 (2的32次方)个扇区,按每扇区512字节计算,分区最大容量不能超过

2.1TB(2,199,023,255,552)。而当磁盘容量超过2.1TB以后,分区的起始位置也就无法表示了,当然也就无法进行分区。在硬盘还未进入TB时代时,这种分区方式没有什么问题,但是当硬盘容量达到2TB同时还有向上的趋势时,MBR分区方案显然就无法满足需要了。(编注:谈到MBR所支持的最大分区,也许有不少朋友说我目前的电脑分区就有七八个,这是咋回事?这里是说MBR 只支持4个主分区表项。要获得更多分区,则需要次级结构――扩展分区。扩展分区可以再次让一个磁盘被分成一个或多个逻辑磁盘,打个比喻:MBR 就像是一本书的结构,目录、页码,而扩展分区则为这本书划分出了具体章节,这就是MBR 分区方法。) 要解决MBR所存在的容量限制,还需要使用GUID(Globally Unique Identifier,全局唯一标志符)分区模式,即采用GPT(GUID 分区表)。与MBR最大4个主分区表项的限制相比,GPT对分区数量没有限制(目前Windows 系统最大仅支持128个GPT分区),每个分区都拥有唯一的ID标志码,可管理的存储资源范围远远超过MBR。而在分区容量方面,因为它使用64位的整数表示扇区号,所以理论上允许用户使用最高18EB容量(1EB=100万TB)进行分区,这绝对是一个高得令人匪夷所思的数字。GPT的分区信息是在分区中,而不像MBR一样在主引导扇区,为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区(Protective MBR)的MBR分区表,这种分区的类型标志为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X

下为200MB,在Windows磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。

既然GPT分区方案具有如此多的优点,在分区时是不是可以全部采用这种方案呢?答案是否定的。并不是所有的Windows系统都支持这种分区方案,至少Windows XP/2000/NT/98这些系统就无法支持GPT分区方案,所以在希捷的声明中,也说明了遇到3TB的硬盘,Windows XP最多只能认出990MB的容量。

* UEFI/EFI助硬盘容量腾飞

不过光是系统支持GPT还不行,那样用户只能在GPT分区上存储资料而不能在分区上启动电脑。如果要电脑支持GPT磁盘启动,还需要配合UEFI/EFI此类新一代BIOS。正如我们之前所言,由于目前主流的主板都采用BIOS系统,也就是说只支持MBR的分区方式,那么即使我们拥有了64位的操作系统,拥有了GPT磁盘,也无法享受到2.1TB以上的大容量硬盘。要想使用2.1TB硬盘,我们还必须要保证自己的主板采用的是EFI/UEFI,而非传统的BIOS,这样才能支持GPT磁盘启动电脑。

Intel在制定EFI方案时就将GPT列为其中的一部分内容,后来的UEFI也延续了这一点。由于现有的BIOS 不可能将MBR分区方式立刻进化为GPT分区方式,所以要让主板识别到2.1TB以上容量的硬盘,那么只能使用UEFI/EFI。因此,如果用户的主板支持UEFI/EFI,那么可以从GPT分区直接启动Windows Vista/7系统,操作系统加载程序和启动分区均驻留在GPT磁盘上。与基于x86的计算机上的系统卷相同,EFI/UEFI系统分区包含操作系统加载程序、驱动程序和启动Windows Vista/7需要的其他文件。在仅包含一个GPT磁盘的计算机上,UEFI/EFI系统分区是磁盘上的第一个分区。如果用户的电脑没有EFI/UEFI支持,GPT实际上并不能被真正的支持,仅仅能作为MBR/GPT混合磁盘来启动。也就是说,原本GPT的标准中,存在一个保护性质的MBR(Protective MBR),在不支持EFI/UEFI的芯片组主板下,BIOS会继续使用该MBR来引导。

可以说,目前用户要突破硬盘所面临的2.1TB容量限制,首先要升级操作系统,其次还要有一定的硬件支持。目前的硬盘、BIOS和操作系统制造商均将2.1TB的最大容量视为制造标准,主流配置的主板基本不会配备UEFI系统,尽管微星等少数主板制造商在一些主板中装载了UEFI系统,但它仍未成为真正的标准配置,个人电脑里也许只有苹果在使用EFI/UEFI,因此大家要真正使用单个容量超过2.1TB的硬盘,还需要UEFI普及开来才行,这想必还需要一段时间。但我们相信,随着未来硬件规格的升级,容量在2.1TB以上的超级硬盘的巨大优越性(特别是速度)仍然会很快让不少玩家毫不犹豫地投怀送抱……

内存操作数及寻址方式的使用

武汉工程大学 电气信息学院 《面向对象程序设计》实验报告[ 1 ] 专业班级过程装备与控制工程1 班 实验时间 2015 年 5 月 日 学生学号实验地点机电工程学院205 学生姓名指导教师华夏 实验项目内存操作数及寻址方式的使用 实验类别设计实验实验学时3学时 实验目的及要求通过实验掌握下列知识。 (1)DEBUG命令:G、N、W、L及Q。 (2)8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 (3)8088指令:INC、DEC、LOOP、INT3、INT20H,寄存器SI、DI。 (4)8088汇编语言伪操作:BYTE PTR,WORD PTR. (5)求累加和程序和多字节加减法程序。 成绩评定表 类别评分标准分值得分合计 上机表现 按时出勤、遵守纪律 认真完成各项实验内容 30分

《电子线路CAD设计》实验报告 报告质量程序代码规范、功能正确 填写内容完整、体现收获70分 评阅教师: 日期:年月日

实验内容 (说明:此部分应包含:实验内容、实验步骤、实验数据与分析过程等) 1.一、实验内容、实验方法与步骤、实验数据与结果分析 1)内存操作数及各种寻址方式使用 (1)先输入程序内容,用A命令输入上述程序,运行如下: (2)并用T命令逐条运行,运行如下:

(3)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。程序运行如下:

(4)注意D命令显示结果中右边的ASCII字符及双字节数存放法。 (5)思考有关指令中的BYTE PTR及WORD PTR伪操作不加行不行,试一试。 2)求累加和程序 (1)用A命令将程序输入到100H开始的内存中,在输入时记下标号LOP和J的实际地址,在输入LOOP指令时LOP用实际地址代替。 (2)用命令NAA将此程序命名为文件AA (3)用R命令将BX:CX改为程序长度值 (4)用命令W100将此程序存放到AA命名的磁盘文件中

寻址方式及指令系统习题与解答

寻址方式及指令系统习题与解答 计算机科学与工程学院黄洪波2012年3月 一、单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为()。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为()。 A.13000H B.23000H C.33000H D.3000H 3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为()。 A.20200H B.30200H C.50200H D.200H 4.指令MOV MEM[BX],AX中的MEM是()。 A.原码B.反码C.补码D.移码 5.用来作为寄存器间接寻址的寄存器有()个。 A.8 B.6 C.5 D.4 6.指令MOV [BX+SI],AL中的目的操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 7.指令MOV BX,[BP+5]中的源操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 8.段内间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 9.段间间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 10.下述指令中不改变PSW的指令是()。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 11.下述指令中不影响CF的指令是()。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX 12.两个整数补码9CH和7AH相加运算后,会产生()。 A.无溢出且无进位B.无溢出但有进位

汇编语言内存操作数及寻址

实验一内存操作数及寻址 通过实验掌握下列知识: 80x86系统中数据在内存中的存放方式和内存操作数寻址方式。 80x86指令: MOV, ADD, SUB, ADC,SBB,INC, DEC, LOOP,CLC 伪指令与操作符: BYTE PTR, WORD PTR,OFFSET,SIZEOF。 简单字符串处理、多字节加减法。 一、内存操作数及各种寻址方式: 阅读下列程序段: ... ... .data wds WORD 1111h, 2222h, 3333h dwds DWORD 6 dup (0CDCDCDCDh) ... ... MOV AX, 1234h MOV EBX, OFFSET wds MOV [EBX], AX MOV BYTE PTR[EBX+2], 20h MOV DL, 39h MOV [EBX+4], DL ADD EBX, SIZEOF wds MOV ESI, 2 DEC DL MOV [EBX+ESI], DL DEC DL MOV [EBX+ESI+1], DL MOV WORD PTR[EBX+ESI+2], 1068h MOV DWORD PTR[EBX+ESI*4], 2846h 1)分析并写出每条指令执行的结果。 2)将程序补充完整,编译、连接后,单步执行,验证分析结果。 3) 说明程序中访问内存操作数的指令所使用的寻址方式,访问的内存地址,以及所访问的内存存储单元位数。 4)有关指令中BYTE PTR、WORD PTR、DWORD PTR伪指令不加会有何结果? 试一试。 二、阅读下列程序段: (指令CLC,Clear Carry Flag :清除进位标志) ...... MOV ECX,4 CLC L1:

微机原理第二次作业(1)

1. 分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。 (1)MOV AX,2408H (2)MOV CL,0FFH (3)MOV BX,[SI] (4)MOV 5[BX],BL (5)MOV [BP+100H],AX (6)MOV [BX+DI],’$’ (7)MOV DX,ES:[BX+SI] (8)MOV VAL[BP+DI],DX (9)IN AL,05H (10)MOV DS,AX (1)立即数寻址;寄存器寻址 (2)立即数寻址;寄存器寻址 (3)寄存器间寻址;寄存器寻址 (4)寄存器寻址;寄存器相对寻址 (5)寄存器寻址;寄存器相对寻址 (6)立即数寻址;基址变址寻址 (7)基址变址寻址;寄存器寻址 (8)寄存器寻址;相对基址变址寻址 (9)直接寻址;寄存器寻址 (10)寄存器寻址;寄存器寻址 2 已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H 单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX 寄存器的内容各是什么? (1)MOV AX,0200H (2)MOV AX,[200H] (3)MOV AX,BX (4)MOV AX,3[BX] (5)MOV AX,[BX+SI] (6)MOV AX,2[BX+SI] (1)AX=0200H (2)AX=2A10H (3)AX=0200H (4)AX=5946H (5)AX=463CH (6)AX=6B59H

3. 设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H, BP=0200H, 数据段中变量名为VAL 的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什 么?物理地址值是多少? 1)MOV AX,[100H] (2)MOV AX,VAL (3)MOV AX,[BX] (4)MOV AX,ES:[BX] (5)MOV AX,[SI] (6)MOV AX,[BX+10H] (7)MOV AX,[BP] (8)MOV AX,VAL[BP][SI] (9)MOV AX,VAL[BX][DI] (10)MOV AX,[BP][DI] (1)直接,10100H (2)直接,10030H (3)寄存器间接,10100H (4)寄存器间接,20100H (5)寄存器间接,100A0H (6)寄存器相对,10110H (7)寄存器间接,35200H (8)相对基址变址,352D0H (9)相对基址变址,10154H (10)基址变址,35224H 4 若AL=0FFH,BL=13H,指出下列指令执行后标志AF、OF、ZF、SF、PF、CF的状态。 (1) ADD BL, AL (2) SUB BL, AL (3) INC BL (4) NEG BL (5) AND AL, BL (6) MUL BL (1)AF= 1 , OF= 1 , ZF= 0 , SF= 0 , PF= 1 , CF= 1 (2)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 1 , CF= 0 (3)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 1 , CF= 0 (4)AF= 0 , OF= 0 , ZF= 0 , SF= 1 ,PF= 1 , CF= 0 (5)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 0 , CF= 0 (6)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 0 , CF= 0

【VIP专享】汇编程序设计--内存操作数及寻址方法 实验报告

《汇编语言程序设计》 实验报告

实验二内存操作数及寻址方法 实验目的 通过实验掌握下列知识: 1、DEBUG命令:A,T,D,F,G; 2、数据在内存中的存放方式和内存操作数的几种寻址方式; 3、汇编指令:INC,DEC,LOOP,INT 3的应用; 4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。 实验内容和步骤 一、内存操作数及各种寻址方式使用 程序内容:寻址方式: MOV AX,2000 MOV [200],AX ;直接寻址 MOV BX,210 MOV BYTE PTR[BX],50 ;寄存器间接寻址 MOV CL,40 INC BX MOV [BX],CL ;寄存器间接寻址 DEC CL MOV SI,5 MOV [BX+SI],CL ;基址加变址寻址 MOV [BX+SI+1],CL ;基址变址相对寻址 MOV WORD PTR[BX+SI+2],1234 ;基址变址相对寻址 操作步骤 1)用A命令键入上述程序,并用T命令逐条运行。 2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意是什么寻址方式。 注:D命令显示结果时,双字节数在内存的存放是高地址对应高数据位; 指令中出现的BYTE PTR及WORD PTR是因为操作数的宽度必须一致。

图 2-1 键入程序 图2-2 U命令查看程序

图2-3 T命令逐条运行,用D命令检查有关内存单元的内容相对应的寻址方式见程序处标注。 二、求累加和程序 程序内容: MOV BX,200 MOV CX,9 XOR AX,AX ADD AL,[BX] ;按字节相加 ADC AH,0 ;若有进位则到AH中 INC BX LOOP 108 INT3 操作步骤: 1)进入DEBUG环境。 2)用命令F 200 L10 40 在内存200H-20FH地址处填入一系列值40H。

寻址方式教案(1)

§3.1MCS-51单片机寻址教案 授课人:章谋学习目标:1、了解汇编指令的结构组成 2、掌握7种指令寻址方式的结构和特点 3、熟练运用汇编指令编写程序 计划课时:2学时 教学重点:掌握4种类型的寻址方式 教学难点:7种寻址方式在程序中的应用 教学方法:实例演示、小组讨论、软件仿真、当堂练习 第一课时 〖本节课的教学目标〗 1、学生能了解汇编指令语句格式 2、学生能区分出立即寻址、直接寻址、间接寻址的异同 教学过程 课前预习情况检查(预习卡1--3题的完成情况的检查) 一、课堂引入: 1、学生利用老师写好的程序载入下图进行运行并记录运行现象。 2、观察单片机系统中有硬件但没有程序运行所出现的现象。 3、观察单片机系统中有程序但硬件有故障所出现的现象。 循环彩灯效果图

彩灯实验箱实物连结图 org 0000h start:mov r0,#08 delay: mov r1,#10 mov r4,#08 de0: mov r2,#127 mov a,#0feh de1: mov r3,#200 loop1:mov p1,a de2: djnz r3,de2 acall delay djnz r2,de1 rr a djnz r1,de0 djnz r0,loop1 ret loop2:mov p1,a rl a acall delay djnz r4,loop2 循环彩灯应用程序 ajmp start

二、课堂自学: 1、学生自学,了解汇编指令的组成 Start : mov a, #30h ; (A) ←30H 标号( );指令助记符( );目的操作数( ); 源操作数( ) 释( ) 注:指令操作数可能有2个或3个,也可能只有1个或1个也没有。 2、小组讨论,完成寻址方式的分类 (小组学生举手作答与老师提问相结合,注重从最后一名学生开始抓起) ①、立即数寻址:②、直接寻址方式 ③、寄存器寻址 ④、寄存器间接寻址: 例如:MOV A ,3AH ;(3AH )→A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,#3AH ;3AH →A 目的操作数( ),源操作数( ),寻址方式( ) MOV DPTR ,#2000H ;2000H →DPTR ;DPH=20H ;DPL=00H 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,3AH ;(3AH) →A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,P1;P1口→A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,R0;R0→A 目的操作数( ),源操作数( ),寻址方式( ) MOV P1,A ;A →P1口 目的操作数( ),源操作数( ),寻址方式( ) ADD A ,R0;A+R0→A 目的操作数( ),源操作数( ),寻址方式( ) 65H 47H R0 A 47H 数据存储器 地址 ┋ ┋ 65H ① ② 将片内RAM 65H 单元内容47H 送A

第六章_寻址方式和指令系统

1

第 6章 寻址方式和汇编指令 第6章
6.1、寻址方式 6.2、汇编语言指令集 6.3、汇编源程序

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
▲ 汇编指令是可执行指令,每条指令对应一条机器 码,用以控制处理器中的执行部件进行各种操 作。 ▲ TMS320F281X系列的汇编指令有150多条。 ▲ 它们支持各种信号处理运算,同时也提供了应用 中所需要的多级处理和过程控制功能。 ▲ 寻址方式是指寻找指令中操作数地址的方式。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
TMS320C28x指令集采用7种存储器寻址方式: ▲ 直接寻址方式 ▲ 堆栈寻址方式 ▲ 间接寻址方式 ▲ 寄存器寻址方式 ▲ 数据/程序/IO空间立即寻址方式 ▲ 程序空间间接寻址 ▲ 字节寻址方式

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
F2812 的大多数指令利用操作码中的8位字段来选择寻 址方式和对寻址方式进行修改.在 F2812 指令系统中,这个8 位字段用于以下寻址方式: (1)loc16 。 为16位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
(2)loc32 。 为32位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
以上7种寻址方式都与“loc16/loc32”组合起来使用。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
寻址方式选择位
由 于 F2812 提 供 了 多 种 寻 址 方 式 , 因 此 用 寻 址 方 式 选 择 位 ( AMODE )来选择8位字段( loc16/loc32 )的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下: ▲ AMODE=0——该方式是复位后的默认方式,也是F2812的C/C++编译
器使用的方式。这种方式与C2xLP CPU的寻址方式不完全兼容。数据页指针 偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1——该方式包括的寻址方式完全与C2xLP 器件的寻址方式
兼容。数据页指针的偏移量是7位并支持所有C2xLP 支持的间接寻址方式。
对与loc16或者loc32字段,其可用的寻址方式总结如P375所示

8086微型计算机原理与应用(吴宁)习题答案(第三章)

8086微型计算机原理与应用(吴宁)习题答案(第二章)第三章 3-3 (1) 源操作数为立即寻址方式;目的操作数为寄存器寻址方式 (2) 源操作数为基址寻址方式;目的操作数为寄存器寻址方式 EA=BX+DISP , PA= DS*16+EA (3) 源操作数为寄存器寻址方式;目的操作数为寄存器间接寻址方式 EA=SI , PA= DS*16+EA (4) 源操作数为基址加变址寻址方式;目的操作数为寄存器寻址方式 EA=BX+SI , PA= DS*16+EA (5) 源操作数为寄存器寻址方式;目的操作数为寄存器寻址方式 (6) 源操作数为基址寻址方式;目的操作数为寄存器寻址方式 EA=BX+10H , PA= DS*16+EA (7) 源操作数为寄存器间接寻址方式;目的操作数为寄存器寻址方式 EA=SI , PA= ES*16+EA (8) 源操作数为带位移量的基址加变址寻址方式;目的操作数为寄存器寻址方式 EA=BX+SI+20H , PA= DS*16+EA 3-7 (1)AX=3355H , SP=1FFEH (2) AX= 3355H , DX= 4466H , SP =1FFEH 3-8 BX= 4154H , [2F246H]= 6F30H 3-9 SI=0180H , DS = 2000H 3-10 求执行指令后的结果 (1) CL=F6H (2) [1E4F6H]=5678H (3) BX=0056H AX=1E40H (4) SI=00F6H , [SI]= [1E4F6H]= 0024H (5) AX=5678H [09226H]=1234H 3-12 (1) 端口580H 的内容为60H (2) 端口580H 的内容为60H, 端口581H 的内容为80H (3) 端口40H 的内容4FH 送至AL中 (4) 端口40H 的内容4FH 送至AL中, 端口41H 的内容送至AH中 (5) 端口45H 的内容为60H (6) 端口45H 的内容为60H, 端口46H 的内容为80H 3-13 (1) 寄存器间址 LEA SI, BLOCK ADD SI, 0AH MOV AX , [SI] (2) 基址寻址 LEA BX, BLOCK MOV AX, [BX+0AH]

寻址方式和指令系统

《微机原理》复习思考题第3章 8086的寻址方式和指令系统 3.1 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 3.2 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段 寄存器指出段地址,指令中应如何表示? 3.3 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定? 3.4 用寄存器间接寻址方式时,BX,BP,SI,DI分别针对什么情况来使用?这四个寄存器组合 间接寻址时,地址是怎样计算的?举例进行说明。 3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOV BYTE PTR [BP], 2000 MOV WORD PTR [BX], 2000 3.6 使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注 意什么问题? 3.7 下面这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。 XCHG CS, AX MOV [BX], [1000] XCHG BX, IP PUSH CS POP CS IN BX, DX MOV BYTE[BX], 1000 MOV CS, [1000] 3.8 8086系统中,当对SS和SP寄存器的值进行修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行之后,又自动恢复对SS寄存器赋值前的中断开放情况。这样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。 3.9 以下是格雷码的编码表 0——0000 1——0001 2——0011 3——0010 4——0110 5——0111 6——0101 7——0100 8——1100 9——1101 请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。 3.10 用加法指令设计一个简单程序,实现两个16位十进制数的加法,结果放在被加数单元。 3.11 为什么用增量指令或减量指令设计程序时,在这类指令后面不用进位标志CF作为判断依 据?

8086汇编各种寻址方式大全

各种寻址方式 1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。 例:MOV AL,50H MOV DS, 1250H 错误 2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。 例:MOV AL,BL MOV CL, BX 错误 以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储 器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存 储器操作数,如BUF DB 10H,20H。 3. 存储器寻址 (1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。 例:MOV AL,[1000H] 约定由DS提供段地址 MOV AL,CS:[1000H] ;段超越,由CS提供段地址 MOV AL,SS:[1000H] ;段超越,由SS提供段地址 例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000 (2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。 例:MOV AX,[SI] ;AX←DS:[SI] MOV [BX],AX ;DS:[BX]←AX 例:MOV AX, [BX] 如果(DS)= 2000H, (BX)= 1000H, 则物理地址 = 20000H + 1000H = 21000H (3)寄存器相对寻址 这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。 例:MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI]) 其中COUNT为16位位移量的符号地址。 如果(DS)= 3000H,(SI)= 2000H,COUNT = 3000H 则物理地址 = 30000H + 2000H + 3000H = 35000H (4)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。 例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH] MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX (5)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS 中,允许段超越。 例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX

实验2 内存操作数及寻址方法

实验2 内存操作数及寻址方法 2.1 实验目的 通过实验掌握下列知识: ①DEBUG命令:G,N,W,L及Q。 ②8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 ③8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。 ④8088汇编语言伪操作:BYTE PTR,WORD PTR。 ⑤求累加和程序和多字节加减法程序。 2.2 实验类型 验证型实验 2.3 实验内容及步骤 2.3.1 内存操作数及各种寻址方式使用 1. 实验程序 MOV AX,1234 MOV [1000],AX MOV BX,1002 MOV BYTE PTR [BX],20 MOV DL,39 INC BX MOV [BX],DL DEC DL MOV SI,3 MOV [BX+SI],DL MOV [BX+SI+1],DL MOV WORD PTR [BX+SI+2],2846 2. 实验步骤 1)用A命令键入上述程序,并用T命令逐条运行。 2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。 3. 注意 D命令显示结果中右边的ASCII字符及双字节数存放法。

4. 思考 有关指令中BYTE PTR及WORD PTR伪操作不加行不行? 试一试。 2.3.2 求累加和程序 1. 实验程序 MOV BX,1000 MOV CX,10 SUB AX,AX LOP:ADD AL,[BX] ADC AH,0 INC BX J:LOOP LOP INT3 2. 实验步骤 1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。 2)用命令N AA将此程序命名为文件AA(文件名可任取)。 3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址)。 4)用命令W100将此程序存到AA命名的磁盘文件中。 5)用命令Q退出DEBUG。 6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。 7)用E命令在内存地址1000H处键入16个数字 8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。 9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。 10)重复GJ与T,再检查AX是否正确。 11)用G命令使程序运行到结束,检查AX值是否正确。 2.3.3 多字节加法程序 1. 实验程序 MOV DI,1000 MOV CX,8 MOV SI,2000

习题及参考解答

第3章习题及参考解答 1.指出下列各指令中源操作数和目的操作数的寻址方式。 (1)MOV DI,100 (2)MOV CX.100[SI] (3)MOV [SI],AX (4)ADD AX,[BX+DI] (5)AND AX,BX (6)MOV DX,[1000] (7)MOV BX,[BP+DI+100] (8)PUSHF (9)SUB [1050],CX (10)AND DH,[BP+4] 解 源操作数目的操作数 (1)立即寻址寄存器寻址 (2)变址寻址寄存器寻址 (3)寄存器寻址寄存器间接寻址 (4)基址加变址寻址寄存器寻址 (5)寄存器寻址寄存器寻址 (6)直接寻址寄存器寻址 (7)基址加变址寻址寄存器寻址 (8)寄存器寻址寄存器间接寻址 (9)寄存器寻址直接寻址 (10)变址寻址寄存器寻址 2.试述指令MOV AX,2000H和MOV AX,DS:[2000H]的区别 解区别有三条: (1)MOV AX,2000H对源操作数是立即寻址,而MOV AX.[2000H]对源操作数是直接寻址; (2)前者功能是把立即数2000H送入AX中,而后者是把内存2000H单元与2001H单元的内容取出送 入AX 中; (3)两者的机器代码不同,执行速度也不同,前者执行时间快,后者执行时间慢。 4.若DS=4000H,BX=0800H,[40800H]=05AOH,[40802H]=2000H,求执行指令LDS SI,[BX]后,DS与SI中的内容。若上题中的DS换成ES,其他条件不变,求执行指令LES DI,[BX]后,ES与DI中的内容。 解 SI=05AOH,DS=2000H DI=05AOH,ES=2000H 5.若AX=98ABH,BX=A8BCH。求执行指令ADD AX,BX后,AX与BX中的内容,并指出SF,ZF,AF,PF,CF和OF的状态。 解AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。 6.若CX=6700H,DX=78FFH,CF=1。求分别执行指令 (1)ADD CX,DX (2)ADC CX,DX (3)SUB CX,DX (5)AND CX,DX

寻址方式

寻址方式:1.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。4,直接寻址:指令中直接给出操作数所在的存储器地址。5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。 数据传送类指令:一、以累加器为目的操作数的指令 MOV A, Rn ; (Rn)→A,n=0~7 MOV A, @Ri ; ((Ri))→A,i=0,1 MOV A, direct ;(dir ect)→A MOV A, #data ; #data→A 二、以Rn为目的操作数的指令 MOV Rn, A ; (A)→Rn, n=0~7 MOV Rn, direct ;(direct)→Rn, n=0~7 MOV Rn, #data ; #data→Rn, n=0~7 三、以直接地址direct为目的操作数的指令 MOV direct, A ; (A)→direct MOV direct, Rn ;(Rn)→direct, n=0~7 MOV direct1, direct2; MOV direct, @Ri ;((Ri))→direct MOV direct, #data ; #data→direct 四、以寄存器间接地址为目的操作数的指令 MOV @Ri, A ;(A)→((Ri)),i=0,1 MOV @Ri, direct ;(direct)→((Ri)) MOV @Ri, #data ; #data→((Ri)) 五、16位数传送指令 MOV DPTR, #data16 ; #data16→DPTR 唯一的16位数据的传送指令, 立即数的高8位送入DPH, 立即数的低8位送入DPL。 六、堆栈操作指令 内部RAM中可以设定一个后进先出(LIFO-Last In First Out)的区域称作堆栈,堆栈指针SP始终指向堆栈的 栈顶位置。 1、进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中 2、出栈指令 POP direct SP指示的栈顶(内部RAM单元)内容送入direct字节单元 中,栈指针SP减1 七、累加器A与外部数据存储器传送指令 MOVX A, @DPTR ;((DPTR))→A,读外部RAM/IO

作业-3

1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。 源目的 (1)MOV AX, 2048H 立即寻址寄存器寻址 (2) MOV CL, 0FFH 立即寻址寄存器寻址 (3) MOV BX, [SI] 寄存器间接寻址寄存器寻址 (4) MOV 5[BX], BL 寄存器寻址寄存器相对寻址 (5) MOV [BP+100H], AX 寄存器寻址寄存器相对寻址 (6) MOV [BX+DI], ‘$’立即寻址基址变址寻址 (7) MOV DX, ES:[BX+SI] 基址变址寻址寄存器寻址 (8) MOV V AL[BP+DI], DX 寄存器寻址相对基址加变址寻址 (9) IN AL, 05H 直接寻址寄存器寻址 (10) MOV DS, AX 寄存器寻址寄存器寻址 2.已知:DS=1000H, BX=0200H, SI=02H, 内存10200H~10205H单元的内容分别为10H, 2AH, 3CH, 46H, 59H, 6BH。下列每条指令执行完后AX寄存器的内容各是什么? AX 内容 (1)MOV AX, 0200H (AX)=0200H (2) MOV AX, [200H] (AX)=2A10H (3) MOV AX, BX (AX)=0200H (4) MOV AX, 3[BX] (AX)=5946H (5) MOV AX, [BX+SI] (AX)=463CH (6) MOV AX, 2[BX+SI] (AX)=6B59H 6.指出下列指令中哪些是错误的,错在什么地方 (1)MOV DL, AX 错误,源和目的操作数类型不匹配,DL是8位寄存器, AX是16位寄存器。 (2)MOV 8650H, AX 错误,立即数不能作为目的操作数。 (3)MOV DS, 0200H 错误,不能用立即数直接给段寄存器赋值。 (4)MOV [BX], [1200H] 错误,不能在两个存储单元之间直接传送数据 (5)MOV IP, 0FFH 错误,IP不能作目的操作数或不能用立即数直接给IP 寄存器赋值。 (6)MOV [BX+SI+3], IP错误,IP不能作源操作数。 (7) MOV AX, [BX][BP] 错误,基址变址寻址方式必须是一个基址寄存器与一个 变址寄存器,不能两个同时为基址寄存器(BX、 BP均为基址寄存器)。 (8)MOV AL, ES:[BP] 正确。 (9)MOV DL, [SI][DI] 错误,基址变址寻址方式必须是一个基址寄存器与一个 变址寄存器,不能两个同时为变址寄存器(SI、 DI均为变址寄存器)。 (10)MOV AX, OFFSET 0A20H 错误,OFFSET后必须是标号地址,不能是立即数。 (11) MOV AL, OFFSET TABLE 错误,操作数类型不匹配,AL为8位,TABLE为16位。(12)XCHG AL, 50H 错误,交换指令XCHG的操作数不能是立即数。(13)IN BL, 05H 错误,IN指令的目的操作数必须是累加器 (14)OUT AL, 0FFEH 错误,OUT指令的源操作数必须是累加器,目的操作 数为I/O端口地址。

MCS-51单片机的寻址方式和指令系统

MCS-51单片机指令系统与汇编语言程序设计 伪指令............................................. (2) MCS-51单片机的寻址方式 (4) MCS-51单片机的指令系统 (7) 数据传送指令 (8) 算数运算指令 (10) 逻辑运算及移位指令 (12) 控制转移指令 (13) 位操作指令 (18)

指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下: [标号:] 操作码 [操作数] [,操作数] [;注释] 标号: 代表指令的具体地址 操作码: 又称助记符,英文缩写 操作数: 操作数中常数可以用二、八、十、十六进制表示,如果用十六进制表示,最高位用A以上的数开头时,前面须加0,否则机器不识别 注释:增加程序的可读性 伪指令 (1)定位伪指令ORG 格式:ORG n 其中:n通常为绝对地址,可以是十六进制数、标号或表达式。 功能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。 例如程序:ORG 1000H START:MOV A,#20H MOV B,#30H ┇ (2)结束汇编伪指令END 格式:[标号:] END [表达式] 功能:放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬。 (3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。 “字符名称”与“标号”的区别是“字符名称”后无冒号,而“标号”后面有冒号。 (4)定义字节伪指令DB

8086寻址方式

成绩评定 教师签名 嘉应学院计算机学院 实验报告 课程名称:汇编语言程序设计 开课学期:2017-2018学年第1学期班级: 指导老师: 实验题目:80x86的寻址方式 学号: 姓名:

一、实验目的: 通过debug实验理解80x86的寻址方式 二、实验内容 实例实验7种重要的寻址方式 三、实验过程描述3 1.立即寻址方式(immediate addressing) 操作数直接存放在指令中 2.寄存器寻址方式(register addressing) 操作数在寄存器中,指令指定寄存器号 3.直接寻址方式(direct addressing) 操作数的有效地址只包含位移量,段地址带DS中 4.寄存器间接寻址方式(register indirect addressing) 操作数的有效地址只包含基址寄存器或变址寄存器内容一种成分

5.寄存器相对寻址方式(register relative addressing) 操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和 6.基址变址寻址方式(based indexed addressing) 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和 7.相对基址变址寻址方式(relative based indexed addressing)操作数的有效地址是一个基址寄存器和变址寄存器的内容和指令中指定的位移量之和 四、实验小结 本实验实现了7种与数据有关的寻址方式,立即寻址与寄存器寻

址方式的操作数都在代码段中,剩下五种的操作数都在代码段外,通过取得操作数的偏移地址即有效地址与DS中的段基址运算得物理地址取得操作数。

第三章寻址方式与指令系统

第三章寻址方式与指令系统 一:选择题 1:下列指令中正确的是() A:MOV BX,AL B:MOV BL,AX C:MOV BL,AL D:MOV BL,BP 2:下列指令不合法的指令是() A:IN AX,03F8H B:MOV AX,BX C:REP CMPSB D:SHR BX,CL 3:下列指令中正确的是() A:MOV 100,CL B:MOV CL,100H C:MOV CL,1000 D:MOV CL,100 4:下列指令中正确的是() A:MOV SS,2400H B:MOV 2400H,SS C:MOV SS,DS D:MOV SS,SP 5:下列指令中正确的是() A:XCHG AH,AL B:XCHG AL,20H C:XCHG AX,DS D:XCHG[BX],[20H] 6:执行完下列程序后,BX寄存器的内容是() MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL A:002DH B:00EDH C:C02DH D:000DH 7:在程序运行过程中,确定下一条指令的物理地址的计算表达式是() A:CS×16+IP B:BX×16+DI C:SS×16+SP D:ES×16+SI 8:寄存器间接寻址方式中,操作数在()中 A:通用寄存器B:堆栈C:主存单元D:段寄存器 9:下列指令,指令()先执行CX-1赋给CX操作,然后再根据CX的值决定是否转移、循环或进行重复操作。 A:JNC B:REP C:JCXZ D:LOOP 10:运算型指令的寻址和控制转移型指令的寻址,其不同点在于() A:前者取操作数,后者决定程序的转移地址B:后者取操作数,前者决定程序的转移地址 C:两者都是取操作数D:两者都是决定程序的转移地址 11:在PC系列机中调试汇编语言程序的工具是DEBUG。用DEBUG调试程序时,可以在目标程序中设断点,或用单步跟踪来找出程序中的毛病。断点只能在RAM中设置,不能在ROM中设置,这是因为() A:ROM不能存放汇编程序B:ROM中数据不能修改 C:ROM不能放入断点中断指令D:ROM不能保护断点 12:DEBUG调试工具是汇编语言最有力的调试手段,当用D命令时显示的结果如下: 0000:0080 72 10 A7 00 7C 10 A7 00—4F 03 62 06 8A 03 62 06 0000:0090 17 03 62 06 86 10 A7 00—90 10 A7 00 9A 10 A7 00 INT 21H是最常用的DOS中断,试确定INT 21H的中断向量为 A:1072H:00A7H B:7C10H:A700H C:00A7H:107CH D;107CH:00A7H 13:设AL和BL是带符号数,当AL≤BL时转至NEXT处,在CMP AL,BL指令后应选择正确的条件指令是 A:JBE B:JNG C:JNA D:JNLE 二:填空题 1:若累加器AX中的内容为4142H,执行指令CMP AX,4041H后,(AX)= 。执行SUB AX,4041H 后,(AX)= 。 2:用CBW指令生成双倍长度的被除数存放在。用CWD指令生成双倍长度的被除数存放在。

指令与寻址方式习题

指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:(1)AND AX,0FFH (2)AND BL,[OFFH] (3)MOV DS,AX (4)CMP [SI],CX (5)MOV DS:[0FFH],CL (6)SUB [BP][SI],AH (7)ADC AX,0ABH[BX] (8)OR DX,-35[BX][DI] (9)PUSH DS (10)CMC 答:目的操作数源操作数 (1)寄存器直接寻址立即数寻址 (2)寄存器直接寻址直接寻址 (3)寄存器直接寻址寄存器直接寻址 (4)寄存器间接寻址寄存器直接寻址 (5)直接寻址寄存器直接寻址 (6)基址变址寻址寄存器直接寻址 (7)寄存器直接寻址寄存器相对寻址 (8)寄存器直接寻址基址变址相对寻址 (9)无寄存器直接寻址 (10)隐含寻址 2.试分别指出下列各指令语句的语法是否有错,如有错,指明是什么错误。 (1)MOV [BX][BP],AX (2)TEST [BP],BL (3)ADD SI,ABH (4)AND DH,DL (5)CMP CL,1234H (6)SHR [BX][DI],3 (7)NOT CX,AX (8)LEA DS,35[SI] (9)INC CX,1 (10)P USH 45[DI] 答:(1)应将BP,BX其中之一该为SI或DI (2)正确 (3)ABH改为0ABH (4) (5)是字操作,CL改为CX (6)移位数大于1时,应用CL (7)NOT指令只有一个操作数 (8)LEA指令的源操作数应为一内存单元地址

(9)此指令不用指出1 (10)45改为45H 3.下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态? MOV DL,86 ADD DL,0AAH 答: 0101,0110 + 1010,1010 = 1,0000,0000 CF=1 AF=1 ZF=1 SF=1 OF=1 4.在8086/8088CPU中可用于作地址指针的寄存器有哪些? 答:有BX,CX,DX,BP,SI,DI (IP,SP,) 5.已知(DS)=09lDH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。下列各指令或程序段分别执行后的结果如何? (1)MOV CL,20H[BX][SI] (2)MOV [BP][DI],CX (3)LEA BX,20H[BX][SI] MOV AX,2[BX] (4)LDS SI,[BX][DI] MOV [SI],BX (5)XCHG CX,32H[BX] XCHG 20H[BX][SI],AX 答(1) (CX)=56F6H; (2) (09226H)=5678H; (3) (AX)=1E40H; (4) (1E4F6H)=0024H; (5) (09226H)=1234H,(AX)=5678H. 6.已知(SS)=09l 5H,(DS)=0930H,(SI)=0A0H,(DI)=1C0H,(BX)=80H,(BP)=470H。现有一指令“MOV AX,OPRD”,如源操作数的物理地址为095C0H,试用四种不同寻址方式改写此指令(要求上述每个已知条件至少要使用一次)。 答:(1)MOV AX,[BP] (2)MOV AX,[BP+DI+80H] (3)MOV AX,[DI+0100H] MOV AX,[SI+0220H] (4)MOV AX,[02C0H] 7.试按下列要求分别编制程序段: (1)把标志寄存器中符号位SF置‘1’。 (2)寄存器AL中高低四位互换。 (3)由寄存器AX,BX组成一个32位带符号数(AX中存放高十六位),试求这个数的负数。 (4)现有三个字节存储单元A,B,C。在不使用ADD和ADC指令的情况下,实现(A)+(B)=>C。 (5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1形成奇数)。 答:(1)MOV AH, 80H SAHF

相关文档
相关文档 最新文档