예전에 8비트에서 16비트, 32비트로 넘어간지는 오래되어서 무슨 이야기인지 알고 싶습니다.
1. 모든 MPU(CPU)에서는 char, unsigned char, int, unsigned int, long, unsigned long, double 변수의 최대값을 우선 파악해야 합니다.
아니면 중간 데이터의 값들이 없어지고 개판됩니다.
2. 그리고 나서 최대, 최소값이 얼마인가를 알고 변수 선언를 해주고 사용합니다.
예전부터 변수이름이 해깔리지 않도록
char s08temp;
unsigned char u08temp;
int s16temp;
unsigned int u16temp;
...
이런식으로 변수이름 앞에 붙여서 선언하고 사용합니다.
3. 연산이라고 하면 MPU(CPU)가 알아서 해주는데 이것은 실행파일을 만들고 debugging tool로 하나하나 트레이 해봐야 MPU에 대하여 정확한 이해가 됩니다.
제 기억으로는 예전 8086/8088의 레지스터가 여러개 있는데 각각의 사용법이 조금씩 다른 것으로 기억됩니다.
AX : AH + AL (연산
BX : BH + BL
CX : CH + CL
DX : DH + DL
SI
DI
SP(STACK POINTER)
IP
기타 ...
잘못
저장이아니라 연산입니다... 연산방식이궁금합니다
약간 어셈블하고 C하고 정리가 안됀 것 같은데
예전에 8비트에서 16비트, 32비트로 넘어간지는 오래되어서 무슨 이야기인지 알고 싶습니다.
1. 모든 MPU(CPU)에서는 char, unsigned char, int, unsigned int, long, unsigned long, double 변수의 최대값을 우선 파악해야 합니다.
아니면 중간 데이터의 값들이 없어지고 개판됩니다.
2. 그리고 나서 최대, 최소값이 얼마인가를 알고 변수 선언를 해주고 사용합니다.
예전부터 변수이름이 해깔리지 않도록
char s08temp;
unsigned char u08temp;
int s16temp;
unsigned int u16temp;
...
이런식으로 변수이름 앞에 붙여서 선언하고 사용합니다.
3. 연산이라고 하면 MPU(CPU)가 알아서 해주는데 이것은 실행파일을 만들고 debugging tool로 하나하나 트레이 해봐야 MPU에 대하여 정확한 이해가 됩니다.
수고하세요.
두개의 레지스터를 사용해 연산합니다. 예를 들어
두개의 레지스터를 사용해 연산합니다.
예를 들어 16비트 CPU의 레시스터 AX 는 두개의 8비트 레지스터 AH 와 AL로 구성되 있어서 두 레지스터를 동시에 연산에 사용하기도 하고, 곱셈 나눗셈 시에는 AX와 DX 등과 같은 완전히 별개의 레지스터가 사용되기도 하죠.
이것은 8086/8088 어셈블러인데?
제 기억으로는 예전 8086/8088의 레지스터가 여러개 있는데 각각의 사용법이 조금씩 다른 것으로 기억됩니다.
AX : AH + AL (연산
BX : BH + BL
CX : CH + CL
DX : DH + DL
SI
DI
SP(STACK POINTER)
IP
기타 ...
참조: http://web.unbc.ca/~compnetlab/cpsc231/T4-8088.pdhttp://web.unbc.ca/~compnetlab/cpsc231/T4-8088.pdf 이문서를 참조 하기 바랍니다.
이제야 질문을 파악했네요.
AX 연산을 할때 LSB부터 더하기를 시작해서 AL레지스터의 Overflow가 발생하면 carry bit가 세트되어 ah 연산시 carry bit와 같이 더해집니다.
수고하세요.
요즘에도 볼 수 있어요.
32bit 환경에서 64비트 변수 사용해서 연산되는 과정을 디버깅해보세요.
어떻게 동작하는지 직접 확인할 수 있습니다.
http://kese111.tistory.com/117
귀찮으시면 요기서 확인
부스알고리즘....
20년전 전산기구조시간에 배운게 아마 부스알고리즘인것 같은데.... 기억이 가물거립니다.
댓글 달기