GAS 질문입니다.

lacovnk의 이미지

 8048e78:       55                      push   %ebp
 8048e79:       89 e5                   mov    %esp,%ebp
 8048e7b:       8b 55 08                mov    0x8(%ebp),%edx
 8048e7e:       b8 00 00 00 00          mov    $0x0,%eax
 8048e83:       80 3a 00                cmpb   $0x0,(%edx)
 8048e86:       74 07                   je     8048e8f <string_length+0x17>
 8048e88:       42                      inc    %edx
 8048e89:       40                      inc    %eax
 8048e8a:       80 3a 00                cmpb   $0x0,(%edx)
 8048e8d:       75 f9                   jne    8048e88 <string_length+0x10>
 8048e8f:       c9                      leave
 8048e90:       c3                      ret
 8048e91:       90                      nop

글자의 길이를 구하는 부분이라고 gdb 돌려서 알아내긴 했는데요,

8048e8a: 80 3a 00 cmpb $0x0,(%edx)

요 부분이 이해가 안갑니다. (%edx)가 0의 값을 가지는 것도 아닌데..

저 부분은 $0x0이란 값과 %edx의 내용이 가리키는 내용을
byte 단위로 비교하는 것 아닌가요?

으음..ㅠㅠ

참, 그리고 masm은 매뉴얼 있던데, gas는 명령어 매뉴얼 없나요?
열심히 뒤져봐도 안나오던데 ㅠㅠ

ps. gas라고 말하면 gas 문법도 말하나요? 아니면 어셈블러 프로그램만 말하는건가요? :(

vacancy의 이미지

(%edx)가 0인지 byte단위로 비교하는 것 맞습니다.
널문자를 만나면 종료해야할테니까요.

그리고, 인라인 어셈블리로 코딩하시는게 아니면
( 어차피 그런 경우엔 gas 돌리진 않겠지만요 -_-; )
어셈블리 코딩하신 걸 어셈블하실 때
gas 쓰시는걸 별로 권해드리고 싶지 않습니다.

사실 gas는 gcc의 back-end 수준이라,
프로그램이 거의 정상적으로 들어온다고 가정하고 짜여져 있어서
에러 처리 등이 다른 어셈블러들에 비해 그다지 좋지 않답니다.

명령어는 어차피 cpu에 dependent한 것이니,
어떤 메뉴얼을 보시나 상관 없을것 같고요.
AT&T 문법에 대해 궁금하신 것이라면
제 기억엔 kldp에서 검색하면 나올 것 같네요. -_-a

lacovnk의 이미지

gcc로 덤프?한 어셈코드를 분석중이에요 :)

근데 명령어들의 자세한 내용들을 찾아볼 곳이 없어서..
(교재가 있긴 하지만 -_-; java api처럼 정리되어있는 곳이 없을까해서..ㅠㅠ)

재밌긴한데..시간 참 빨리가는군요 -_-;
이따 놀러나가야 되는데 ㅠㅠ

halite의 이미지

문법에 관한건 at&t assemply에 관련된 문서를 찾아 읽어보시고
인스트럭션에 대한 공부를 원하신다면 intel site에서 IA32 architecture 등에 관한 문서를 찾아 읽어 보시기 바랍니다.
제가 가장 추천하는 것은 intel의 문서 입니다.

cinsk의 이미지

advanced의 이미지

http://savannah.nongnu.org/projects/pgubook/

이 문서도 AT&T 문법이 배우기 쉽게 잘 설명되어있습니다