작성
·
209
1
안녕하세요 항상 좋은 강의를 해주셔서 감사합니다
1.
다름이 아니라, push,pop 관련 연습을 하던 중
push 378
pop rax
PRINT_DEC 1, ax를 시도하였습니다.
378을 프로그래머용 계산기로 비트 전환을 하면 1 0111 1010으로 되어서 1바이트 크기를 초과하게 되어버리기 때문에
ax를 1바이트 크기로 출력하라는 해당 명령이 오류가 날 줄 알았지만 정상적으로 378 출력이 되었습니다....왜 이런 것인지 궁금합니다
2.
push 1 push 2 push 3 pop rax pop rbx pop rcx를 디버그할 때
memory 항목의 변수를 8 간격으로(38,30,28,20) 나누신 이유와
그리고 push 1을 할 때 스택 메모리가 1을 8바이트로 인식한다고 하신 이유가 궁금합니다
감사합니다!
답변 1
1
1.
PRINT_DEC는 공식 어셈 명령어가 아니라 단순히
툴에서 제공하는 헬퍼 매크로라 이해할 필요가 없습니다.
2.
64비트 운영체제 환경에선 모든 기본 단위가 64비트(8바이트)입니다.
레지스터도 64비트로 설계 되었고 주소 체계도 64비트 체계고, etc..
너무 디테일 한 부분에 궁금하신 것이 많으십니다.
사소한 부분들과 에러와 관련된 부분은 무조건 구글링을 하시는 습관을 들이셔야 합니다.
사실 인프런에 올라오는 질문들의 90%는 구글링을 하면 1분 내로 답이 나옵니다.
결론적으로 그냥 칩 제조사들이 그렇게 만들었기 때문이고
64비트 환경 칩셋에서 pop은 64비트랑만 사용 가능합니다.
앗 사실...세부적이고 간단한 내용들도 최대한 이해를 해놔야 나중에 코딩할 때 헷갈리는 일이 줄어들 것이라고 개인적으로 판단해서 궁금증이 많이 생겼던 것 같습니다
p.s.
굉장히 간단한 질문이라 오히려 관련 내용이 없을 줄 알고 검색 시도를 안 했던 건데 아니었군요 난이도가 일정 수준 이상 되는 질문들만 있는 줄 알고 있었습니다;;
정말 감사합니다!
1. 그렇다면 헬퍼 매크로들의 경우에는 어느 정도 범위가 초과한다고 해도 그냥 실행을 해주는 것인지 정도만 알려주실 수 있으신가요?
2. 만약 32비트 운영체제의 컴퓨터에서 실행하게 된다면 memory 항목의 변수도 4로 나누고, 스택 메모리도 1을 4바이트로 인식을 하게 되는 것인가요?
3. 64비트 운영체제의 컴퓨터에서 push 378, pop eax를 실행하자
instruction not supported in 64-bit mode라는 내용이 나왔는데
eax도 rax의 일부분인데 왜 해당 내용이 출력되었는지 궁금합니다