Take a look at this short example (P18) :
Code: Select all
program test_pt;
var addr1,addr2,addr3 : word;
val1 : string[10]; absolute 300;
val2 : string[10]; absolute 400;
val3 : string[10]; absolute 500;
procedure get_addr(var dat1 : string[10]; var dat2 : string[10]; var dat3 : string[10]);
begin
addr1 := @dat1;
addr2 := @dat2;
addr3 := @dat3;
end;
begin
get_addr(val1,val2,val3); // addr1 = 300; addr2 = 400; addr3 = 500; OK !
get_addr('123','456','789'); // addr1 = 27; addr2 = 27; addr3 = 27; Wrong values addr2 and addr3
end.
Code: Select all
get_addr('123','456','789');
Code: Select all
;test_pointer.ppas,17 :: get_addr('123','456','789'); // addr1 = 27; addr2 = 27; addr3 = 27;
$003E $0E31 MOVLW 49
$0040 $6E1B MOVWF ?main_Local_Text+0, 0
$0042 $0E32 MOVLW 50
$0044 $6E1C MOVWF ?main_Local_Text+1, 0
$0046 $0E33 MOVLW 51
$0048 $6E1D MOVWF ?main_Local_Text+2, 0
$004A $6A1E CLRF ?main_Local_Text+3, 0
$004C $0E1B MOVLW ?main_Local_Text
$004E $6E1F MOVWF FARG_get_addr, 0
$0050 $0E00 MOVLW @?main_Local_Text
$0052 $6E20 MOVWF FARG_get_addr+1, 0
$0054 $0E34 MOVLW 52
$0056 $6E1B MOVWF ?main_Local_Text+0, 0
$0058 $0E35 MOVLW 53
$005A $6E1C MOVWF ?main_Local_Text+1, 0
$005C $0E36 MOVLW 54
$005E $6E1D MOVWF ?main_Local_Text+2, 0
$0060 $6A1E CLRF ?main_Local_Text+3, 0
$0062 $C01F F021 MOVFF FARG_get_addr, FARG_get_addr+2
$0066 $C020 F022 MOVFF FARG_get_addr+1, FARG_get_addr+3
$006A $0E37 MOVLW 55
$006C $6E1B MOVWF ?main_Local_Text+0, 0
$006E $0E38 MOVLW 56
$0070 $6E1C MOVWF ?main_Local_Text+1, 0
$0072 $0E39 MOVLW 57
$0074 $6E1D MOVWF ?main_Local_Text+2, 0
$0076 $6A1E CLRF ?main_Local_Text+3, 0
$0078 $C01F F023 MOVFF FARG_get_addr, FARG_get_addr+4
$007C $C020 F024 MOVFF FARG_get_addr+1, FARG_get_addr+5
$0080 $EC04 F000 CALL _get_addr