인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

한울님의 프로필 이미지
한울

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

변수와 레지스터

강의 관련...

해결된 질문

작성

·

199

1

안녕하세요 이번 강의를 듣다가 궁금한 점이 있습니다
 
1. section .bss에서 변수를 선언할 때는
변수이름 크기 개수로 해야 한다고 하셨었는데
그렇다면 e resb 8과 e resq 1은 동일한 의미인가요?
 
2. mov [a], byte 0x55에서 byte를 써줘야되는 이유는 상수를 넣을 때 크기를 맞춰줘야하기 때문이라고 하셨는데
mov [a] byte 0x0055
mov [a] word 0x66
으로 고쳐서 실행했는데도 정상적으로 작동이 되었는데
크기를 맞춰줘야 한다는 게 정확히 어떤 의미인지가 궁금합니다
 
3. 마지막으로 16진수 숫자 2개를 합하면 1바이트를 쓰게 된다고 하셨었는데 무슨 뜻인지 이해가 잘 가지 않습니다
 
항상 좋은 강의 감사합니다!
 

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

 
1. section .bss에서 변수를 선언할 때는
변수이름 크기 개수로 해야 한다고 하셨었는데
그렇다면 e resb 8과 e resq 1은 동일한 의미인가요?
 
할당되는 메모리 크기는 동일합니다.
작은 바구니 8개나, 큰 바구니 1개 정도의 차이겠죠.
 
2. mov [a], byte 0x55에서 byte를 써줘야되는 이유는 상수를 넣을 때 크기를 맞춰줘야하기 때문이라고 하셨는데
mov [a] byte 0x0055
mov [a] word 0x66
으로 고쳐서 실행했는데도 정상적으로 작동이 되었는데
크기를 맞춰줘야 한다는 게 정확히 어떤 의미인지가 궁금합니다
 
0x55는 사실상 0x0055나 0x00000055나 0x000000000000000000000055로 볼 수 있는데요.
move [a], ??? 0x55에서 ???은 데이터 크기가 얼마 짜리인지를 알려주는데
1바이트 라는 것을 암시하기 위해 byte를 쓴겁니다.
(0x0055나 0x55나 동일하기 때문에 숫자 몇개를 써야 하는지는 무관합니다)
 
ㄴ3. 마지막으로 16진수 숫자 2개를 합하면 1바이트를 쓰게 된다고 하셨었는데 무슨 뜻인지 이해가 잘 가지 않습니다
 
16진수 숫자 한개 (ex. 0x0~0xF)는 2진수로 표현하면 0b0000~0b1111이고
계산해보면 4비트를 차지합니다.
따라서 16진수 2개 (ex. 0xFE)는 2배인 8비트이고, 8비트 = 1바이트입니다.
 
 
한울님의 프로필 이미지
한울
질문자

그렇다면 1번에서 변수 e를 resb 8로 선언해야 하는 상황과 resq 1로 선언해야 하는 상황에 차이가 있는지, 차이가 있다면 어떤 상황에 resb 8이라고 선언해야 하고 어떤 상황에서 resq 1이라고 선언해야 하는지 궁금합니다!

 

그리고 2번에서는  byte 0x0055나 word 0x66으로 작성하더라도 byte 0x0055에서는 데이터를 byte라 선언했기 때문에 0x55로 인식하고 word 0x66에서는 데이터를 word라 선언했기 때문에 0x0066으로 인식하게 되는 것인가요? 그리고 그렇기에 byte 0x5555로 바꾼 채 실행하게 되면 실행오류가 생기게 되는 것인지 궁금합니다!(어떻게 하더라도 1바이트 크기로 되는 게 불가능한 상황)

Rookiss님의 프로필 이미지
Rookiss
지식공유자

그렇다면 1번에서 변수 e를 resb 8로 선언해야 하는 상황과 resq 1로 선언해야 하는 상황에 차이가 있는지, 차이가 있다면 어떤 상황에 resb 8이라고 선언해야 하고 어떤 상황에서 resq 1이라고 선언해야 하는지 궁금합니다!

코딩이 처음이라면 이 부분은 나중에 차차 알게 되십니다.
C++로 치면 char 변수 8개 만드는거랑
long long 변수 1개를 만드는 정도의 차이입니다.

 그리고 2번에서는  byte 0x0055나 word 0x66으로 작성하더라도 byte 0x0055에서는 데이터를 byte라 선언했기 때문에 0x55로 인식하고 word 0x66에서는 데이터를 word라 선언했기 때문에 0x0066으로 인식하게 되는 것인가요?

네 그렇습니다.

그리고 그렇기에 byte 0x5555로 바꾼 채 실행하게 되면 실행오류가 생기게 되는 것인지 궁금합니다!(어떻게 하더라도 1바이트 크기로 되는 게 불가능한 상황)

이런건 실험을 통해 학습 하시는게 좋습니다.
안될 것 같네요.

한울님의 프로필 이미지
한울
질문자

앗 3번째 항목은 이미 실험을 통해 실행오류가 나는 것을 확인한 상태에서, 오류의 원인이 2번째 항목에서 제가 이해한 내용과 동일한 것인지 여쭤보는 것이었는데

중의적으로 작성되어서 오해가 생겼던 것 같습니다;;

그래도 궁금했던 부분이 모두 해결된 것 같습니다 정말 감사합니다!

한울님의 프로필 이미지
한울

작성한 질문수

질문하기