0
어떻게 내가 .... 내가 피곤이 방법으로 오프셋 추가 세그먼트 (들) 적절한를 사용하여 2 개 자리 데이터를 저장 할에 ..NASM (64 비트 시스템 호출)
SECTION .data
offset : db 0100H
data : db 56H
SECTION .bss
.......(initializations not required in this program)
SECTION .text
global main
main :
mov ax,1000H
mov es,ax
mov si,[offset]
mov al,[data]
mov es:[si],al
mov rdi,0
mov rax,60
syscall
이 잘못 무엇입니까? 나는 완전히 새로운 프로그래밍 프로그래밍이다.
16 비트 및 64 비트 x86 어셈블리를 혼합하는 것처럼 보입니다. 그러지 마. 하나를 골라서 전체 프로그램으로 끝내십시오. Intel Software Developer 's Manual의 3.4.2.1 절에 "64 비트 모드에서 : CS, DS, ES, SS는 연결된 세그먼트 디스크립터베이스 의 값에 관계없이 각 세그먼트 기준이 0 인 것처럼 처리됩니다. 코드, 데이터 및 스택을위한 플랫 주소 공간 "_. – Michael
내 64 비트 데이터를 여분의 세그먼트에 저장할 수 있습니까? 플랫 주소 공간에서 허용됩니까? 당신이 클라우드를 어떻게 달성했는지에 대한 예를 들려 주시겠습니까? – user3555940
세그먼트 화 된 메모리 공간이 아니기 때문에 (즉, 64 비트 실행 파일을 빌드한다고 가정 할 때) 평탄한 메모리 공간이 있기 때문에 그렇게하는 것은 의미가 없습니다. 'mov [rsi], al'과 같은 것을 사용하십시오. 이 코드를 살펴보면, 먼저 16 비트 또는 64 비트 어셈블리를 수행할지 여부와 선택한 모드에 대한 자습서를 검색 (및 읽는) 여부를 선택하는 것이 좋습니다. – Michael