在存儲(chǔ)器中,操作數(shù)或指令字寫入或讀出的方式,有地址指定方式、相聯(lián)存儲(chǔ)方式和堆棧存取方式。幾乎所有的計(jì)算機(jī),在內(nèi)存中都采用地址指定方式。當(dāng)采用地址指定方式時(shí),形成操作數(shù)或指令地址的方式稱為尋址方式。尋址方式分為兩類,即指令尋址方式和數(shù)據(jù)尋址方式,前者比較簡(jiǎn)單,后者比較復(fù)雜。值得注意的是,在傳統(tǒng)方式設(shè)計(jì)的計(jì)算機(jī)中,內(nèi)存中指令的尋址與數(shù)據(jù)的尋址是交替進(jìn)行的。
指令的尋址方式有以下兩種。
順序?qū)ぶ贩绞接捎谥噶畹刂吩趦?nèi)存中按順序安排,當(dāng)執(zhí)行一段程序時(shí),通常是一條指令接一條指令地順序進(jìn)行。也就是說(shuō),從存儲(chǔ)器取出第1條指令,然后執(zhí)行這條指令;接著從存儲(chǔ)器取出第2條指令,再執(zhí)行第二條指令;接著再取出第3條指令。這種程序順序執(zhí)行的過(guò)程,稱為指令的順序?qū)ぶ贩绞健榇耍仨毷褂贸绦蛴?jì)數(shù)器(又稱指令計(jì)數(shù)器)PC來(lái)計(jì)數(shù)指令的順序號(hào),該順序號(hào)就是指令在內(nèi)存中的地址。
跳躍尋址方式當(dāng)程序轉(zhuǎn)移執(zhí)行的順序時(shí),指令的尋址就采取跳躍尋址方式。所謂跳躍,是指下條指令的地址碼不是由程序計(jì)數(shù)器給出,而是由本條指令給出。注意,程序跳躍后,按新的指令地址開始順序執(zhí)行。因此,程序計(jì)數(shù)器的內(nèi)容也必須相應(yīng)改變,以便及時(shí)跟蹤新的指令地址。采用指令跳躍尋址方式,可以實(shí)現(xiàn)程序轉(zhuǎn)移或構(gòu)成循環(huán)程序,從而能縮短程序長(zhǎng)度,或?qū)⒛承┏绦蜃鳛楣渤绦蛞?。指令系統(tǒng)中的各種條件轉(zhuǎn)移或無(wú)條件轉(zhuǎn)移指令,就是為了實(shí)現(xiàn)指令的跳躍尋址而設(shè)置的。注意是否跳躍可能受到狀態(tài)寄存器的操作數(shù)的控制,而跳躍到的地址分為絕對(duì)地址(由標(biāo)記符直接得到)和相對(duì)地址(對(duì)于當(dāng)前指令地址的偏移量),跳躍的結(jié)果是當(dāng)前指令修改PC程序計(jì)數(shù)器的值,所以下一條指令仍是通過(guò)程序計(jì)數(shù)器PC給出。
形成操作數(shù)的有效地址的方法稱為操作數(shù)的尋址方式。由于大型機(jī)、小型機(jī)、微型機(jī)和單片機(jī)結(jié)構(gòu)不同,從而形成了各種不同的操作數(shù)尋址方式。下面介紹一些比較典型又常用的操作數(shù)尋址方式。
隱含尋址這種類型的指令,不是明顯地給出操作數(shù)的地址。而是在指令中隱含著操作數(shù)的地址。例如,單地址的指令格式,就不明顯地在地址字段中指出第2操作數(shù)的地址,而是規(guī)定累加寄存器AC作為第2操作數(shù)地址。指令格式明顯指出的僅是第1操作數(shù)的地址D。因此,累加寄存器AC對(duì)單地址指令格式來(lái)說(shuō)是隱含地址。如:DAA ;
立即尋址指令的地址字段指出的不是操作數(shù)的地址,而是操作數(shù)本身,這種尋址方式稱為立即尋址。立即尋址方式的特點(diǎn)是指令執(zhí)行時(shí)間很短,因?yàn)樗恍枰L問內(nèi)存取數(shù),從而節(jié)省了訪問內(nèi)存的時(shí)間。 如:MOV AX,#5678H 注意:立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。
直接尋址直接尋址是一種基本的尋址方法,其特點(diǎn)是:在指令格式的地址的字段中直接指出操作數(shù)在內(nèi)存的地址。由于操作數(shù)的地址直接給出而不需要經(jīng)過(guò)某種變換,所以稱這種尋址方式為直接尋址方式。在指令中直接給出參與運(yùn)算的操作數(shù)及運(yùn)算結(jié)果所存放的主存地址,即在指令中直接給出有效地址