blockquote>mov msg, %rsi
Эта команда интерпретирует данные в msg как 64-битное значение и загружает это значение в регистр
rsi
. Инструкция НЕ загружает адрес «msg» в регистрrsi
. Это можно сделать (обратите внимание на$
):mov $msg, %rsi
В соответствии с тем, что я прочитал, программа должна вызвать sys_exit, или это будет segfault, но этого не произойдет .
blockquote>Вы должны знать, почему происходит segfault:
ЦП не знает, где находится «конец» вашей программы. ЦПУ также не может различать команды и данные.
Например, байты
0x8A, 0x07
могут означатьmov (%rdi),%al
или они могут представлять номер1930
- ЦП не знает.Достигнув конца вашей программы, CPU попытается прочитать байты после вашей программы и интерпретировать их как инструкцию.
Теперь возможны три сценария:
- По мере управления ОЗУ в 4096 байтовых блоках на системах x86. Поэтому в зависимости от длины вашей программы до 4095 байт «неиспользуемой» ОЗУ следуют вашей программе. ЦП будет интерпретировать (случайные) байты в ОЗУ как (ассемблерные) инструкции и выполнять эти инструкции. При достижении конца 4096 байтового блока происходит segfault.
- 4095 байтов содержат инструкцию, которая вызывает segfault (до достижения конца блока).
- 4095 байт представляют собой команды, которые вызывают выход программы без каких-либо исключений или бесконечного цикла.
Так что, возможно, в вашем случае это третья ситуация.
DrevanTronder прав, но он не отвечает на вопрос правильно, так как вы спрашиваете, как делать события в pygame без GUI, как показано в вашем примере кодирования.
Это невозможно. При запуске Pygame-программы он обнаруживает события только в том случае, если выбрано окно Pygame. Если нет окна Pygame, выбирать нечего, поэтому события не будут работать. Ниже приводится документация Pygame:
«Если дисплей не был инициализирован и видеорежим не установлен, очередь событий не будет работать». https://www.pygame.org/docs/ref/event.html
Но, конечно, если вы специально не говорите об обработке событий, тогда DrevanTronder верен ; все, что вам нужно сделать, это импортировать модуль с «import pygame» и инициализировать его с помощью «pygame.init ()».
Надеюсь, что это поможет!
Да, вы можете.
import pygame
pygame.init()
while 1:
print pygame.time.get_ticks()
pygame.time.wait(10)
Это даст вам время в миллисекундах, так как pygame начался без появления графического пользовательского интерфейса.
Если вы используете Linux, вы можете использовать Xvfb .
В принципе, Xvfb «захватывает» все вычисления, связанные с отображением, и выполняет их в памяти без необходимости дисплей.
Он может не соответствовать вашим целям, в зависимости от поведения вашей ОС. Захват ключей в PyGame работает только в том случае, если окно PyGame является активным, но, увидев, что вы не сможете установить активное окно здесь, это, вероятно, не будет работать без дополнительных обходных путей.