2011-01-26 6 views
3

HW 할당을 위해 리눅스 부트 프로그램을 프로그래밍 중이며 메모리에서 워드를 읽거나 쓰는 기능을 만들어야한다는 것을 알고 있습니다. 나는 올바른 길을 가고 있는지 아닌지를 결정하는 데 어려움을 겪고 있으며 도움이된다면 큰 도움이 될 것입니다. 필자는이 함수들을 테스트 할 것이지만, 모든 것을 함께 집어 넣기 전에 핵심 함수를 만드는 작업을해야하므로이 시점에서는 불가능합니다. 나는 내가 위의 경우 확실하지 않다 어셈블리에서 코드와 CC 리눅스에서 메모리 읽기/쓰기 워드 (세그먼트, 오프셋)

unsigned short get_word(unsigned short segment, unsigned short offset) 
{ 
unsigned short word, low, hi; 
    low = get_byte(segment, offset); 
    high = get_byte(segment, offset+1); 
    word = low+hi; 
    return word; 
} 

에 수출 선생님에 의해 작동하는 검증 get_byte (세그먼트, 오프셋)/put_byte는 (문자는, 세그먼트, 오프셋)를 받았다 옳은. 안녕과 낮은 조합이 필요하다는 것을 알고 있습니다. 추가하기가 좋을까요 아니면 단순히 낮은 것을해야합니까 & 안녕하세요? 그 결과를 돌려 주시겠습니까? 내가 완전히 기지에서 멀어 졌다면 알려주세요. unsigned short가되도록 오프셋이 맞습니까? 아니면 int 여야합니까?

int put_word(unsigned short word, unsigned short segment, unsigned short offset) 
{ 
    unsigned short low, hi; 
    low = word | offset; 
    hi = word | offset+1 
    put_byte(segment, low); 
    put_byte(segment, hi); 
    return 0; 
} 

위의 코드가 옳은 것에 가까운 것이지만 내 추측에 맞는지는 잘 모르겠다.

누구나 해결책을 알고 있거나 조언을 구할 수 있습니까? 이 함수들은 꽤 기초적인 것이어야하지만 막혀 있고 내 임무의 실제 부분을 따라갈 필요가 있습니다.

UPDATE (12:46) : 고정 된 put_byte()는 아래에 명시된 것처럼 고정 된 두 개의 인수 만 허용하는 것이 바람직하지 않습니다. 실수로 사과드립니다.

+0

남자 나는 리눅스에서 작동하는 get_byte와 put_byte를보고 싶다. – Joshua

답변

3

get_word()에서 :

word = (high << 8) | low 

put_word()에서 : 당신이 언급 한 바와 같이

low = word & 0xff; 
hi = word >> 8; 
put_byte(low, segment, offset); 
put_byte(hi, segment, offset+1; 

나는 put_byte는 2 개 개의 인수를 취하는 것을 의심한다. 그것은 말이되지 않습니다.

+0

몇 초에 맞춰서 ..;) – BlackBear

+0

예 - 사실, 엔디안은 get_byte/put_byte에 의해 처리되므로, 그 엔디안을 정렬했습니다. 저/고를 계산할 때는 작동하지 않습니다. –

+0

도움 주셔서 감사합니다. – user591162

2

잘못된 것입니다.

word = (byte2 << 8) | byte1 

가정 바이트 2는 메모리에 바이트 1 다음 당신은 리틀 엔디안 "형식"에 단어를 원하는 : 2 바이트로 시작하는 단어를 만들기 위해 당신은해야합니다. 위의 고려 사항으로

byte1 = word & 0xff 
byte2 = word >> 8 

: 는 당신이이 2 바이트 단어를 분할합니다.

+0

죄송합니다. 정답을 두 개 선택할 수 없습니다. 지난 몇 시간 동안이 문제를 해결해 주셔서 대단히 감사합니다. – user591162