c언어 문법 질문하겠습니다..

익명 사용자의 이미지

안녕하세요. 소스를 보고 해석해야 하는데 문법적인 부분을 모두 찾아서 하는 중 자료를 못찾겠어서.. 이렇게 질문을 올립니다.

1. 아래 문법에서 extern은 외부 변수를 가져오는 것은 알겠는데 그 뒤에 MESSAGE는 외부 파일 명이라 생각하는 것인가요? 또한, 그 변수를 사용해서 값을 넣는거 같은데 a뒤에 점을 찍고 b라고 치는건 a가 구조체로서 그 안에 있는 b값에 0x00을 넣는다는 의미인건가요?

extern MESSAGE a;

a.b = 0x00;

2. a &= b은 a = a&b와 같은 의미인거죠?

3. asm("NOP")는 데이터 시트에 나와있는 명령어 하나 처리하는 시간만큼 딜레이를 한다는데
– 135 Powerful Instructions – Most Single Clock Cycle Execution
이 부분을 통해 1cycle이라는 것을 알 수 있는건가요? 그러면 1cycle이 몇s인건 어떻게 계산하는 건가요?

긴 글 읽어주셔서 감사합니다.

세벌의 이미지

컴파일 해보니

extern MESSAGE a;

에서 에러나네요.

질문은 하나씩.

글쓴이의 이미지

네..저도 다른 사람의 소스를 해석하는 중이라서.. extern하고 MESSAGE의 의미가 궁금합니닷..

익명 사용자의 이미지

1. 일반적으로, MESSAGE가 들어간 자리에는 타입 이름이 나와야 합니다. 해당 선언이 나오기 전에 MESSAGE라는 이름이 무엇을 의미하는지가 코드 상에 명확하게 선언이 되어 있어야 합니다만, 이름으로 미루어 볼 때(그리고 뒤에 a.b와 같이 참조한 것으로 볼 때) 십중팔구 어떤 구조체겠지요.

2. 네 맞습니다.

3. 어셈블리를 쓰실 때는 어떤 CPU 아키텍처인지 명시해 주셔야 됩니다. 주어진 어셈블리 코드가 길면 유추할 수 있는 경우도 있지만 NOP 한 단어만 가지고는 알 수가 없습니다. 일단 x86이라고 가정하지요.

이건 복잡한 문제입니다. NOP은 이름 그대로 No operation으로서, 아무 것도 안 하는 명령어입니다. 가뜩이나 요즘 CPU들은 복잡해서 어셈블리 명령 하나하나에 소요되는 시간을 명확하게 분리해서 측정하기 어려운데, NOP은 그 자체로 유의미한 일을 하는 게 전혀 없어서 되려 훨씬 더 어렵습니다.

그래도 1 cyc은 걸리지 않겠느냐고 생각할 수야 있겠지만.. 요즘 CPU에서 실질적으로 NOP을 거의 공짜로 실행해 버리거나, 되려 NOP을 적절히 삽입함으로써 성능이 더 좋아지는 경우도 있을 수 있으니 말이지요.

1 cycle이 몇 초인지는 또 다른 문제인데, 이건 해당 CPU의 clock frequency의 역수입니다. 1GHz이면 1ns 하는 식으로. 문제는 요즘 CPU는 보통 clock frequency도 필요에 따라 조금씩 바뀌거든요. 그래도 대충 감을 잡을 수는 있을 겁니다.

글쓴이의 이미지

감사합니다.! 코드해석하는 것도 무슨이유로 이렇게 작성했는지 생각하기가 정말 어렵굼요!!
도움주셔서 감사합니다 ㅎㅎㅎ

세벌의 이미지

typedef struct {
char a;
int b;
} MESSAGE;
 
extern MESSAGE  a;
 
int main()
{
a.b=0x00;
}

이런 코드를 추측해 볼 수는 있겠죠. 말 그대로 추측입니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.