[질문] nop 를 왜 쓰는지 궁금합니다??

fat81의 이미지

안녕하세요~

임베디드를 공부하는 학생입니다.

부트로더 쪽 코드를 보다가 궁금한 것이 있어 질문을 올립니다.

.align 4
 
undefined_instruction:
	b undefined_instruction
 
software_interrupt:
	b software_interrupt
 
abort_prefetch:
	b abort_prefetch
 
abort_data:
	b abort_data
 
not_used:
	b not_used
 
interrupt_request:
	ldr pc , =0xa0000004
 
fast_interrupt_request:
	ldr pc , =0xa0000008	
 
coldstart:
    /*
     * MMU, Icache, Dcache,write buffer 를 disable한다.
     * ARM CORE의 CPSR를 통해 IRQ,FIRQ를 disable한다.
     * SVC (supervisory mode)로 동작모드를 설정한다.
     * reset이 되면 직접 이 위치로 PC가 옮겨진다.     
     *
     */
 
	ldr r0, =0x2001					/* 모든 coprocessors에 접근을 허용한다 */
	mcr 	p15,0,r0,c15,c1,0
	nop
	nop
	nop
 
	ldr 	r0, =0x00000078				/* Disable MMU, caches, write buffer */
	mcr 	p15,0,r0,c1,c0,0		
	nop
	nop
	nop
 
	ldr 	r0, =0x00000000
	mcr     p15,0,r0,c8,c7,0   		/* flush TLB's */
	mcr     p15,0,r0,c7,c7,0   		/* flush Caches */
	mcr	p15,0,r0,c7,c10,4		/* Flush Write Buffer */
	nop
	nop
	nop

위의 코드를 보면, nop 가 있는 데요. 왜 nop 를 쓰는지 모르겠습니다.
제가 얼핏 듣기로는 명령어의 길이를 맞춰주기 위해서 사용한다고 들었는데요(정확한 것은 아닙니다).
위의 .align 4 과 관련 있다고 들었습니다.

혹시 nop 에 대해서 아시는 분의 답변 기다립니다.

chadr의 이미지

이쪽에 자세히 아는건 아니라서 딱히 말씀드리기는 어렵지만..
nop를 쓰는 경우에는 아무일도 안하고 그냥 시간을 보내기 위해 사용하기도 합니다..
즉.. 몇클럭을 그냥 보내버리고 어떤것에 대해서 기다리기 위해서 사용하기도 합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

익명사용자의 이미지

느리게 동작하는 io에게 주어진 명령이 완료되기를 기다리기 위해
이전 명령어가 적용된 후에 파이프라인에 들어가게 하기 위해서일지도..

대략추측해봤습니다. 임베디드를 안해봐서리 ㅎㅎ

Hyun의 이미지

혹시 CPU의 파이프라인을 비우거나...
mcr의 명령어가 완전히 실행될 때까지 기다리게 하려는 의도가 아닐까요???

puaxx의 이미지

요즘 Hacker Disassembling Uncovered 라는 책을 읽고 있는데 어제 읽은 페이지에서 나온 내용이네요.
32비트 cpu 같은 경우 4바이트 단위로 명령어를 처리하게 되면 속도의 이득을 본다고 하더라구요.nop자체는 아무일도 하지 않습니다.

경의 이미지

http://www.arm.com/pdfs/DUI0204GK_rvct_assembler_guide.pdf
에서 4.10.8 을 보시기 바랍니다.(pdf 붙여넣기가 깨져서)

이렇게 한글 문서가 잘 돼 있을 줄이야!

그리고, .align 4는 coprocessor에 접근할 때 exception을 방지하기 위해서임은 확실하고요:)
아마도 ldr r0, =0x2001 같은 명령어를 4바이트 얼라인하기 위한 것이 아닐까 생각합니다.
제가 한 번 훑어 보고 남기는 거라 그냥 참고하시길.

경의 이미지

http://www.arm.com/pdfs/DUI0204GK_rvct_assembler_guide.pdf
에서 4.10.8 을 보시기 바랍니다.(pdf 붙여넣기가 깨져서)

이렇게 한글 문서가 잘 돼 있을 줄이야!

.align 4는 coprocessor에 접근할 때 exception을 방지하기 위해서임은 확실하고요:)
아마도 ldr r0, =0x2001 같은 명령어를 4바이트 얼라인하기 위한 것이 아닐까 생각합니다.
그리니까 nop는 mcr이 성공적으로 실행되도록 시간을 벌어주는 역할이 주 목적이겠네요.
이 것을 확인하시려면 nop를 빼거나 넣어서 테스트 해 보면 될 것입니다.
제가 한 번 훑어 보고 남기는 거라 그냥 참고하시길.

경의 이미지

http://www.arm.com/pdfs/DUI0204GK_rvct_assembler_guide.pdf
에서 4.10.8 을 보시기 바랍니다.(pdf 붙여넣기가 깨져서)

이렇게 한글 문서가 잘 돼 있을 줄이야!

.align 4는 coprocessor에 접근할 때 exception을 방지하기 위해서임은 확실하고요:)
아마도 ldr r0, =0x2001 같은 명령어를 4바이트 얼라인하기 위한 것이 아닐까 생각합니다.
그리니까 nop는 mcr이 성공적으로 실행되도록 시간을 벌어주는 역할이 주 목적이겠네요.
이 것을 확인하시려면 nop를 빼거나 넣어서 테스트 해 보면 될 것입니다.
제가 한 번 훑어 보고 남기는 거라 그냥 참고하시길.

 경의 이미지

우쉬 왜 이렇게 올라갔죠?
계속 안 나와서 안 올라간 줄 알았는데......
맥오스엑스 + 파이어폭스 에서 문제가 있어 보이네요.
이전 글 좀 지워주세요.

prether의 이미지

text alignment를 위해서 쓰이기도 합니다.

컴파일러 옵션으로 각 함수들의 align이 128바이트 간격이라고 주면
간격을 메꾸기 위해 nop instruction을 사용합니다.

/***************************************
Being the one is just like being in love.
***************************************/

/***************************************
Being the one is just like being in love.
***************************************/

댓글 달기

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