어셈블리가 처음입니다. 간단히 말해서 나는 내가하고있는 일과 그 일이 왜 그런 식으로 반응 하는지를 모른다. 나는 nasm을 사용하고 있지만 어떤 c 함수도 사용할 수 없습니다. 이것은 Intel x86 64bit 용 nasm 어셈블리를 사용하여 공동으로 컴파일하고 실행합니다. 여기에 몇 가지 코드가 있습니다 :NASM이 메모리에서 레지스터로 이동하고 예상대로 돌아 가지 않음
section .data
x: dd 0
section .text
global _start
_start:
mov eax,0
mov edi,0
mov rsi,x
mov edx,1
syscall
mov r9,x ;My problem was here, should be mov r9,[x]
mov word [x],r9w
mov eax,1
mov edi,1
mov rsi,x
mov edx,1
syscall
mov eax,1 ; The system call for exit (sys_exit)
mov ebx,0 ; Exit with return code of 0 (no error)
int 80h;
그래서 제가 여기에서하고있는 것은 콘솔에서 입력을 읽고 x로 저장하는 것입니다. r9를 등록한 다음 x로 다시 이동하십시오.
input 5
.
output
정상적인 xor 및 mov r9,0을 시도했습니다. 나는 그것이 나에게이 시도하고 이것이 어떻게 작동하는지에 대한 깊은 이해를 얻을 것입니다 수행하기위한
U
내 유일한 목표의 출력을 제공, 그것은 내가 200을 추가하면 값 엉덩이를 얻을 수 있습니다 않는 것을 볼 수 있습니다. 고맙습니다.
디버거에서 코드를 한 단계 건너 뛰십시오. 그 점이 당신의 이해를 도울 것입니다. 당신은'x'의 하위 16 비트를'x'에 저장하고 있습니다. IDK가 왜 그런 짓을하는지. –
x 내의 값을 x에 저장하려고합니다. 이해 이외의 이유가 없다. 임무를 수행하는 동안 나는 결과물에서 불규칙 함을 발견했다. 나는 레지스터들과 memmory에서왔다 갔다하는 문제로 그것을 끓였다. – Elterado
[NASM은 메모리 참조를 위해 대괄호가 필요하다] (http://www.nasm.us/doc/nasmdoc2.html#section-2.2.2) – Michael