#assembly #x86
#сборка #x86
Вопрос:
section .data
msg: db 'Hello World di Simona',10 ;the message to write
len: equ $ - msg ;length of the message
section .text
global _start
_start:
mov edx, len ;save the length
mov ecx, msg ;save the message to display
mov ebx, 1 ;prepare for the system call
mov eax, 4
int 0x80 ;sytem call
Первый вопрос: когда я использую компоновщик, я получаю это предупреждение «-macosx_version_min не указан, предполагается 10.7», как я могу этого избежать?
Второй вопрос: Все идет хорошо, пока я не запущу исполняемый файл, я получаю эту ошибку «Ошибка сегментации: 11», что это значит? Что не так с этим кодом?
Дополнительная информация: Я использую nasm под Mac OS X с процессором Intel Core 2 Duo, сегодня у меня есть бенн на моем первом уроке сборки, так что я новичок в этом языке.
Комментарии:
1. 1. Как насчет указания -macosx_version_min? 2a. Ошибка сегментации означает, что вы пытались получить доступ к памяти, к которой у вас нет доступа. 2b. Запустите программу в отладчике, чтобы увидеть, где возникает ошибка сегментации и к какой памяти вы пытаетесь получить доступ.
2. Что следует
int 0x80
? Если это удастся (и похоже, что так и должно быть), что должно произойти впоследствии?3. Это похоже на 32-разрядные системные вызовы в стиле Linux. Я думаю, что mac osx использует совершенно другой способ выполнения системных вызовов.
Ответ №1:
Системные вызовы в стиле Linux не будут работать в Mac OS X, как отметил пользователь786653.