2012-08-05 3 views
1

나는 워드 프로세서 읽은 후 다음 코드를 시도했다 :gforth의 stdin에서 읽은 것을 변수에 저장하려면 어떻게해야합니까?

create buff 128 allot 
    buff 128 stdin read-line throw 

나는이 나에게 버프의 각 연속 주소에 대한 문자를 얻을 것이라고 기대했다,하지만 난 거기에 이상한 번호를 받고 있어요 :

buff @ ok 
. 3689349013085184353 ok 

무엇이 여기에 있습니까?

+0

표준 입력에서 무엇을했다 : 마찬가지로

buff 1+ [email protected] . 

, 이것은 당신에게 여섯 번째 문자의 코드를받을 수 있습니까? "aaaaa333"으로 시작 했나요? –

+0

'buff count type'과 같은 것을 시도해 보셨습니까? –

+0

나는 그것이 aaaaa라고 생각한다. 나는 여기서 무엇을 놓치고있다? – ivarec

답변

1

buffbuff 변수의 주소를 (데이터) 스택에 넣으십시오. 그 주소로 정수 값으로 buff 남긴 주소 변환

Address Value 
------- ----- 
N+0  0x61 
N+1  0x61 
N+2  0x61 
N+3  0x61 
N+4  0x61 
N+5  0x33 
N+6  0x33 
N+7  0x33 
...  ... 

@ 단어 : 해당 메모리 주소로이 같은 stdin로부터 입력 것을 포함 하였다. 그러나 분명히 64 비트 gforth 버전을 가지고 있기 때문에 @은 주어진 주소에서 시작하는 64 비트, 즉 8 바이트 값을 반환합니다. 즉 0x3333336161616161인데, 이는 3689349013085184353이며 10 진수입니다. . 단어가 그 번호를 보여줬습니다.

특정 바이트를 가져하려면

@ 대신 [email protected]를 사용

buff [email protected] . 

은 즉, 버퍼 (0x61 또는 97) 당신에게 첫 번째 문자의 코드를 제공합니다. 두 번째 항목을 얻고 싶다면, 다음과 같이 [email protected]을 실행하기 전에 주소를 증가 :

buff 5 + [email protected] .