2012-07-02 3 views
2

64 비트 값과 함께 작동하는 C99 컴파일러를 작성하고 있습니다.32 비트 모드에서 64 비트 값 계산

처음에는 32 비트 및 64 비트 코드를 컴파일합니다. 64 비트 운영 체제에서는 r[]x 레지스터를 사용할 수 있음을 알고 있습니다. 그러나 32 비트 코드의 경우 어떻게해야합니까?

두 개의 레지스터에 값을로드하려고 시도했습니다. 각각 (총 4 개)이지만 큰 계산에서는 작동하지 않습니다. GCC/LLVM이 어떻게 작동하는지 검색하는 것은 쓰레기를 가져오고, 나는 그들의 소스 코드를 훑어보고 싶지 않다.

여러분이 여기 도움이 될 수 있기를 바랍니다.

+0

일부 정보는 http://eli.thegreenplace.net/2010/10/21/64bit-types-and-arithmetic-on-32-bit-cpus/ 곱셈 : http://stackoverflow.com/questions/3190143/how-is-64-bit-m-a-32-bit-machine "32 비트에서 64 비트 산술"에 대해 구글 수 있습니다 – nhahtdh

답변

1

r64 레지스터는 64 비트 전용입니다. 32 비트 프로그램에서 (심지어 64 비트 프로세서에서도) 액세스 할 수있는 합법적 인 방법은 없습니다. 부하

당신이 : 아마 것 곱셈에 대한

; allocate unused reg r1:r2 
mov r1, LO_1 
mov r2, HI_1 
sub r1, LO_1 
sbb r2, HI_1 
jb _int64_sub_underflow 
; result is r2:r1 

, 모드, 분할 당신을 이동 :

mov r1, LO 
mov r2, HI 

를 들어

; allocate unused reg r1:r2 
mov r1, LO_1 
mov r2, HI_1 
add r1, LO_2 
adc r2, HI_2 
jc _int64_add_overflow 
; result is r2:r1 

빼기가 대칭 당신이 추가 런타임에 함수를 호출하여 연산을 수행하고 EDX : EAX에서 결과를 반환합니다.

+0

64 비트 코드와 32 비트 코드. 그래서 64 비트 컴퓨터에서 사용할 수 있습니다. –

+0

그러나. 이것이 내가 원했던 것이다. 고맙습니다! –

관련 문제