#include <stdio.h>
/* define union reg */
typedef union __register {
unsigned long value;
struct {
short l, h; /* l must be first, h must be last */
} side;
} reg;
int main() {
reg eax = {0};
eax.side.h = 10;
printf("%d, %d, %d\n", eax.value, (int)eax.side.h, (int)eax.side.l);
return 0;
}
2) bit 연산을 이용해 0 and 연산을 하고 대입하려는 값으로 or 해주면 됩니다.
#include <stdio.h>
typedef unsigned long reg;
int main() {
reg eax;
int value = 0x0000000a;
eax &= 0x0000FFFF; /* set ah 0 */
eax |= (value << 16); /* set ah value */
printf("%08x %08x\n", value, (int)eax);
return 0;
}
3) 어셈블리를 이용하지 않고 EAX 레지스터에 값을 넣어야 한다면, eax가 누산 레지스터인 점을 이용해서 하면 될 것 같습니다. 그런데 값을 유지할 수 있을지는.. 글쎄요.
인라인 어셈블리를 쓰면 됩니다. asm {
인라인 어셈블리를 쓰면 됩니다.
asm {
...
};
ㅠㅠ
인라인 어셈말고 C언어 상에서 할수있는 방법을 알고싶습니다 ㅠㅠ
떠오르는 것.
변수를 선언하고 데이터를 넣고 싶다면.
1) 공용체를 이용하는 방법이 가장 먼저 떠오릅니다.
2) bit 연산을 이용해 0 and 연산을 하고 대입하려는 값으로 or 해주면 됩니다.
3) 어셈블리를 이용하지 않고 EAX 레지스터에 값을 넣어야 한다면, eax가 누산 레지스터인 점을 이용해서 하면 될 것 같습니다. 그런데 값을 유지할 수 있을지는.. 글쎄요.
저는 이렇게 생각했습니다.
감사합니다.
원하던 방법입니다~
질문의 제목과 본문이 다른 내용임에 주목해
질문의 제목과 본문이 다른 내용임에 주목해 봅니다.
제목 : C언어 변수의 특정부분에 데이터삽입
본문 : CPU 에서 EAX 레지스터의 AH 부분에 데이터를 넣을때를 C언어에서는 어떻게하죠?
둘은 전혀 다른 주제인데 함께 적은 걸 보면, 질문자께서 뭔가 특이한 모델을 가지고 계신가 아닐까 생각됩니다.
질문의 의도를 명확히 하고, 왜 그런 것이 필요로 하는지 설명한다면 좀더 명확한 답변을 얻을 수 있을 겁니다.
C언어가 아닌 것을 C언어라고 질문하는 것인데요.
질문을 바꿔보죠.
예를들어 CPU 에서 EAX 레지스터의 AH 부분에 데이터를 넣을때를 포트란언어에서는 어떻게하죠 ?
어셈을 물어보니 어셈을 가르쳐 줬는데, C언어로 대답해주라고 하는 요구가 모순이라는 것을 질문자가 아시면 될 듯.
!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.
댓글 달기