지적했듯이 값은 dword를 초과합니다.
x86의 경우 8086이 16 비트 마이크로 프로세서이기 때문에 "단어"는 16 비트입니다. 이 문맥에서 "2 바이트"를 의미합니다. "더블 워드"는 2 워드 또는 4 바이트이고 "쿼드 워드"는 4 워드 또는 8 바이트입니다. x86은 "리틀 엔디 언 (little endian)"프로세서이므로 레지스터 끝에 작은 부분부터 메모리에 쓰기 시작합니다.
당신이 뭔가를 할 경우 (인텔 구문과 GCC 스타일의 진수 숫자) : 다음
#Load the lowest 8 bits of the rax register (al) with 0x54
#This is loading a BYTE (1 byte)
mov al,0x54
#Load the lowest 16 bits of the rbx register (bx) with 0x5400
#This is loading a WORD (2 bytes)
mov bx,0x5400
#Load the lowest 32 bits of the rcx register (ecx) with 0x540087D1
#This is loading a DWORD (4 bytes)
mov ecx,0x540087D1
#Load the entire 64 bit register rdx with 0x540087D1495AAF56
#This is loading a QWORD (8 bytes)
mov rdx,0x540087D1495AAF56
당신이 레지스터 RSI에서 개최 된 주소로이 이동한다면, 당신은 얻을 것이다 :
#Put the value of al (0x54) into address at [rsi+0]
mov [rsi],al
#Put the value of bx (0x5400) starting at the address at rsi+0,
# such that [rsi+0] will be 0x00 and [rsi+1] will be 0x54
mov [rsi],bx
#Put the value of ecx (0x540087D1) starting at the address of rsi+0,
# such that [rsi+0] will be 0xD1, [rsi+1] will be 0x87,
# [rsi+3] will be 0x00, and [rsi+4] will be 0x54
mov [rsi],ecx
#Put the value of rdx (0x540087D1495AAF56) starting at the address of rsi+0,
#such that [rsi++0] will be 0x56, [rsi+1] will be 0xAF,
# [rsi+2] will be 0x5A, [rsi+3] will be 0x49,
# [rsi+4] will be 0xD1, [rsi+5] will be 0x87,
# [rsi+6] will be 0x00, and [rsi+7] will be 0x54
mov [rsi],rdx
예제 값은 9 바이트로 레지스터에 들어 가지 않으며 시스템 유형이 아닙니다. (예 : 86로, 리틀 엔디안)
0x540087D1 :
그래서 더블 워드에 대한 결과 램과 같을 것이다
먼저 어드레싱 0xD1
둘째 어드레싱에는 0x87
셋째 어드레싱 × 00
(예 : SPARC과 같은 빅 엔디안) 넷째 어드레싱 0x54
:
먼저 어드레싱 0x54
두 번째 어드레싱 × 00
셋째 어드레싱이에는 0x87
넷째 어드레싱 0xD1
이
나 또한 미래의 조립 질문에 그것을 추가 할 것입니다, 당신은 항상 거의 일반적인 조립 질문이 없습니다 질문 -의 구조를 논의해야합니다.
왜 DWORD 예에 9 바이트가 있습니까? 어쨌든, [endianness] (https://en.wikipedia.org/wiki/Endianness)에 대한 귀하의 질문은 무엇입니까? –
@MargaretBloom 나는 나머지가 0으로 채워지려고했다. (그렇지 않다면). 그리고 네, 리틀 엔디안을 사용한다면 32 비트 임에도 불구하고 프로 시저가 동일합니까? [이 사이트] (http : //www.c-jump.co.kr/CIS77/ASM/DataTypes/T77_0060_big_little_endian.htm)은 그것이하는 것을 암시하며, 내가 무엇을 다루고 있더라도 그 단계는 동일하다고 말할 것입니다. 나는 검증을 찾고 있다고 생각한다. – Frog6666
멀티 바이트 값 (워드, 워드 등)을 저장할 때 리틀 엔디안을 사용하면 어림짐작은 "로우 바이트에서 로우 바이트"입니다. 여기서 "로우 바이트"는 최하위 바이트를 의미합니다. 첫 번째 예제에서 WORD 1234h는 BE에 저장되고 두 번째 예제는 엔디안이없는 바이트를 저장하기 때문에 질문에 혼란 스럽습니다. –