2014-02-13 1 views
-1

다음 코드NASM 어셈블러에서 메모리 참조를 추가하기위한 다음 바이트 지정자는 무엇을합니까?

section .data 

Snippet db "KANGAROO" 

section .text 

global_start 

_start: 

mov ebx, Snippet 
add byte [ebx], 32 

은 BX에 메모리 어드레스를 지칭되는 번호 32를 첨가한다. 그러나 추가 후 바이트 지정자는 무엇입니까? 내 책은 EBX의 메모리 주소에 싱글 바이트 만 쓰고 있음을 의미합니다. 하지만 그게 무슨 뜻인지 이해가 안갑니다 (저는 어셈블러에서 초보자입니다). 메모리 주소에 바이트를 쓰는 것은 무엇을 의미합니까? 두 개 이상의 바이트를 쓰는 것은 무슨 뜻입니까?

답변

3

바이트 [EBX] 또는 Microsoft 어셈블러의 경우 바이트 ptr [EBX]는 EBX가 바이트 크기의 변수에 대한 포인터임을 어셈블러에 알립니다. 이와 같이 포인터 타입을 정의하는 것은 즉치 값을 피연산자로 사용할 때만 필요합니다. 레지스터를 피연산자로 사용하는 경우 어셈블러는 크기가 레지스터와 동일하다고 가정합니다 (예 : mov [ebx], al 또는 mov [ebx], ax 또는 mov [ebx], eax).

1

모두 add이 동일한 opcode입니다. Nasm은 방출 할 것을 알아야합니다. add word [ebx], 32이라고 말하면 [ebx][ebx + 1]에 16 비트 32를 추가합니다. add dword [ebx], 32에 대해서도 마찬가지입니다. 16 또는 32 비트 32의 상위 비트가 0이기 때문에이 경우에는 실제로 차이가 없습니다 (32를 저장하는 데 더 많은 바이트가 필요함).하지만 Nasm은 여전히 ​​어떤 opcode를 내보낼 지 알아야합니다 .

관련 문제