Сегодня я попробовал примеры программ на языке ассемблера для ОС Linux для процессоров MIPS.
У меня есть устройство GCW0.
Я на нём проверил первые две программы из статьи.
Первый пример вообще без проблем смог собрать и запустить.
Со вторым была проблема со ссылками на заголовочные файлы.
Ссылки на заголовочные файлы для моего cross toolchain не заработали. Я поиском нашёл пути к заголовочным файлам с такими же именами в моём toolchain, и программа начала собираться. Вот какие пути у меня оказались для файлов:
#include "sys/regdef.h"
#include "asm/unistd.h"
Ниже пример выполнения второй программы на GCW0.
01.03.2015г. выполнил 3 и 4 программы-примеры на реальном оборудовании. Всё работает корректно. Есть замечание по программе 3, там в стеке выделяется 4 байта под временную переменную. К этой переменной должна идти адресация как 0(sp), а идёт адресация как 4(sp). Что не правильно, т.к. обращение идёт к тем данным, которые были выделеные в стеке до 4 байт под локальную переменную.
Небольшое резюме по примерам.
Первый пример показывает как без стартового и завершающего кода для языка Си писать программы для Linux на языке ассемблера. Начиная со второго примера при сборке используется стартоый и завершающий код Си, что подтверждается точкой входа main. В четвёртом примере вызывается функция стандартной библиотеки Си printf.
У меня есть устройство GCW0.
Я на нём проверил первые две программы из статьи.
Первый пример вообще без проблем смог собрать и запустить.
Со вторым была проблема со ссылками на заголовочные файлы.
Ссылки на заголовочные файлы для моего cross toolchain не заработали. Я поиском нашёл пути к заголовочным файлам с такими же именами в моём toolchain, и программа начала собираться. Вот какие пути у меня оказались для файлов:
#include "sys/regdef.h"
#include "asm/unistd.h"
Ниже пример выполнения второй программы на GCW0.
01.03.2015г. выполнил 3 и 4 программы-примеры на реальном оборудовании. Всё работает корректно. Есть замечание по программе 3, там в стеке выделяется 4 байта под временную переменную. К этой переменной должна идти адресация как 0(sp), а идёт адресация как 4(sp). Что не правильно, т.к. обращение идёт к тем данным, которые были выделеные в стеке до 4 байт под локальную переменную.
Небольшое резюме по примерам.
Первый пример показывает как без стартового и завершающего кода для языка Си писать программы для Linux на языке ассемблера. Начиная со второго примера при сборке используется стартоый и завершающий код Си, что подтверждается точкой входа main. В четвёртом примере вызывается функция стандартной библиотеки Си printf.
Комментариев нет:
Отправить комментарий