C언어 변수의 특정부분에 데이터삽입

qkrwncks593의 이미지

예를들어 CPU 에서 EAX 레지스터의 AH 부분에 데이터를 넣을때를 C언어에서는 어떻게하죠 ?

제가 하고 싶은 방식은

unsigned int EAX;

이렇게 변수를 선언하고 EAX 의 AH 부분에 데이터를 넣고싶습니다.

라스코니의 이미지

인라인 어셈블리를 쓰면 됩니다.

asm {
...
};

qkrwncks593의 이미지

인라인 어셈말고 C언어 상에서 할수있는 방법을 알고싶습니다 ㅠㅠ

HDNua의 이미지

변수를 선언하고 데이터를 넣고 싶다면.

1) 공용체를 이용하는 방법이 가장 먼저 떠오릅니다.

#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가 누산 레지스터인 점을 이용해서 하면 될 것 같습니다. 그런데 값을 유지할 수 있을지는.. 글쎄요.

저는 이렇게 생각했습니다.

qkrwncks593의 이미지

원하던 방법입니다~

익명 사용자의 이미지

질문의 제목과 본문이 다른 내용임에 주목해 봅니다.

제목 : C언어 변수의 특정부분에 데이터삽입
본문 : CPU 에서 EAX 레지스터의 AH 부분에 데이터를 넣을때를 C언어에서는 어떻게하죠?

둘은 전혀 다른 주제인데 함께 적은 걸 보면, 질문자께서 뭔가 특이한 모델을 가지고 계신가 아닐까 생각됩니다.

질문의 의도를 명확히 하고, 왜 그런 것이 필요로 하는지 설명한다면 좀더 명확한 답변을 얻을 수 있을 겁니다.

yeonpil_net의 이미지


질문을 바꿔보죠.

예를들어 CPU 에서 EAX 레지스터의 AH 부분에 데이터를 넣을때를 포트란언어에서는 어떻게하죠 ?

어셈을 물어보니 어셈을 가르쳐 줬는데, C언어로 대답해주라고 하는 요구가 모순이라는 것을 질문자가 아시면 될 듯.

!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.