어셈블리에서 아주 간단한 연습을하려고합니다 : 인접한 메모리 셀에있는 N 개의 숫자 합계. 이것은 내 실제 코드입니다 :Assembly x86 NASM의 메모리에서 16 비트 읽기.
global _start section .data array: DD 300,10,20,30,40,50 ; Allocate the numbers arrayLen: EQU $-array ; Get the quantity of numbers section .text _start: mov ecx, 0 ; The counter mov ebx, 0 ; The Accumulator loop: add ebx, DWORD [array+ecx] ; get the i-th word and add it to the accumulator add ecx, 4 cmp ecx, arrayLen jne loop mov eax, 1 int 0x80
프로그램이 컴파일되고 올바르게 실행되지만 잘못된 값을 반환합니다. 결과는 450이어야하지만 대신 194를 얻습니다.
194는 450과 동일한 비트 스트림이지만 9 번째 비트는 생략되었습니다. 내 프로그램을 디버깅 난 내가 키워드 DWORD를 지정하지만, 그것은 단지 8 비트를 읽고
[array+ecx]
을 읽을 때, 어떤 이유로, 내가 이해할 수없는 것을 주장했다.
나를 도와 줄 사람이 있습니까? 미리 감사드립니다.
8 비트 읽기는 어디서 볼 수 있습니까? 'ebx'는 4 바이트 (dword) 값만큼 증가합니다. 혹시'EBX '가 아니라'BL'을보고 계셨습니까? – Inspired
터미널에서 프로그램을 실행하면 ebx의 값을 반환합니다. 이 반환 값을 보려면 ** echo $? ** – sirnino