Сборка, резервирование пространства с resq в YASM - PullRequest
0 голосов
/ 29 июня 2018

Используя YASM, я пытался зарезервировать место для 2000 четырех слов, но когда я сделать это я получаю SIGSEGV, когда я пытаюсь записать в зарезервированный блок четырех слов. Если я зарезервирую место только для 300 четырех слов, программа запускается без ошибок. Что вызывает это?

; Using Windows 7 (Intel Celeron 64-bits)
; yasm -f win64 -l forth.lst forth.asm
; gcc -o forth forth.obj

segment .data
controlstr db "%x", 13, 10, 0

segment .bss
dictionaryspace resq 2000
datastackspace  resq 300
databottom  dq 0
returnstackspace resq 300
returnbottom dq 0

segment .text
global main
extern printf

main:
push rbp                ; setup stack frame
mov rbp, rsp
sub rsp, 32             ; reserve space

lea r15, [databottom]   ; initialize data stack pointer
sub r15, 8              ; point to the last word in data stack

mov rax, 666
mov [r15], rax          ; SIGSEGV happens here.

mov rdx, [r15]
lea rcx, [controlstr]
call printf

leave
ret

; End of code.
...