在fc1程序中,第4条指令l w [ar1,p#0.0],后面注释是取指针第1个字内的数据块编号,第9条指令l d [ar1,p#2.0],后面的注释是取指针内数据区的起始地址。这2条指令格式一样,怎么一个是取地址内的内容(数据块编号),一个是取起始地址?
答:下图是参数类型pointer的结构:
下面是书中的程序:
参数类型为pointer的输入参数start_addr占6个字节,p##start_addr是第1个字节的地址。执行第二条指令后,ar1中是输入参数start_addr(指针)的首地址,所以第4条指令装入累加器的是指针第1个字内的数据块编号,第9条指令“l d [ar1,p#2.0]”装入的是指针第2个字节开始的双字,即指针内数据区的起始地址。
如果start_addr的实参为db2.dbx4.0,第9条指令装入的就是dbx4.0的地址(即db4的地址)。