在fc1程序中,第4條指令l w [ar1,p#0.0],后面注釋是取指針第1個字內(nèi)的數(shù)據(jù)塊編號,第9條指令l d [ar1,p#2.0],后面的注釋是取指針內(nèi)數(shù)據(jù)區(qū)的起始地址。這2條指令格式一樣,怎么一個是取地址內(nèi)的內(nèi)容(數(shù)據(jù)塊編號),一個是取起始地址?
答:下圖是參數(shù)類型pointer的結(jié)構(gòu):
下面是書中的程序:
參數(shù)類型為pointer的輸入?yún)?shù)start_addr占6個字節(jié),p##start_addr是第1個字節(jié)的地址。執(zhí)行第二條指令后,ar1中是輸入?yún)?shù)start_addr(指針)的首地址,所以第4條指令裝入累加器的是指針第1個字內(nèi)的數(shù)據(jù)塊編號,第9條指令“l(fā) d [ar1,p#2.0]”裝入的是指針第2個字節(jié)開始的雙字,即指針內(nèi)數(shù)據(jù)區(qū)的起始地址。
如果start_addr的實參為db2.dbx4.0,第9條指令裝入的就是dbx4.0的地址(即db4的地址)。