Вывожу ошибки там знак присваивания = постоянно в ошибке фигурирует что делать
sergey@COMPUTER:~/Рабочий стол/myOS5$ make clean
rm -f loader.o gdt.o port.o kernel.o mykernel.bin mykernel.iso
sergey@COMPUTER:~/Рабочий стол/myOS5$ make run
as --32 -o loader.o loader.s
g++ -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -o gdt.o -c gdt.cpp
g++ -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -o port.o -c port.cpp
port.cpp: In member function ‘virtual void Port8Bit::Write(uint8_t)’:
port.cpp:31:6: error: output operand constraint lacks ‘=’
);
^
port.cpp: In member function ‘virtual void Port8BitSlow::Write(uint8_t)’:
port.cpp:62:6: error: output operand constraint lacks ‘=’
);
^
port.cpp: In member function ‘virtual void Port16Bit::Write(uint16_t)’:
port.cpp:84:6: error: output operand constraint lacks ‘=’
);
^
port.cpp: In member function ‘virtual void Port32Bit::Write(uint32_t)’:
port.cpp:118:6: error: output operand constraint lacks ‘=’
);
^
port.cpp: In member function ‘virtual void Port8Bit::Write(uint8_t)’:
port.cpp:31:6: error: output operand constraint lacks ‘=’
);
^
port.cpp:31:6: error: invalid lvalue in asm output 0
port.cpp: In member function ‘virtual void Port8BitSlow::Write(uint8_t)’:
port.cpp:62:6: error: output operand constraint lacks ‘=’
);
^
port.cpp:62:6: error: invalid lvalue in asm output 0
port.cpp: In member function ‘virtual void Port16Bit::Write(uint16_t)’:
port.cpp:84:6: error: output operand constraint lacks ‘=’
);
^
port.cpp:84:6: error: invalid lvalue in asm output 0
port.cpp: In member function ‘virtual void Port32Bit::Write(uint32_t)’:
port.cpp:118:6: error: output operand constraint lacks ‘=’
);
^
port.cpp:118:6: error: invalid lvalue in asm output 0
Makefile:9: ошибка выполнения рецепта для цели «port.o»
make: *** [port.o] Ошибка 1
sergey@COMPUTER:~/Рабочий стол/myOS5$
файл port.cpp
#include "port.h"
Port::Port(uint16_t portnumber)
{
this->portnumber = portnumber;
}
Port::~Port()
{
}
Port8Bit::Port8Bit(uint16_t portnumber)
: Port(portnumber)
{
}
Port8Bit::~Port8Bit()
{
}
void Port8Bit::Write(uint8_t data)
{
__asm__ volatile (
"outb %0, %1"
: "a" (data)
: "Nd" (portnumber)
);
}
uint8_t Port8Bit::Read()
{
uint8_t result;
__asm__ volatile (
"inb %1, %0"
: "=a" (result)
: "Nd" (portnumber)
);
return result;
}
Port8BitSlow::Port8BitSlow(uint16_t portnumber)
: Port8Bit(portnumber)
{
}
Port8BitSlow::~Port8BitSlow()
{
}
void Port8BitSlow::Write(uint8_t data)
{
__asm__ volatile (
"outb %0, %1\njmp 1f\n1: jmp 1f\n1:"
: "a" (data)
: "Nd" (portnumber)
);
}
Port16Bit::Port16Bit(uint16_t portnumber)
: Port(portnumber)
{
}
Port16Bit::~Port16Bit()
{
}
void Port16Bit::Write(uint16_t data)
{
__asm__ volatile (
"outw %0, %1"
: "a" (data)
: "Nd" (portnumber)
);
}
uint16_t Port16Bit::Read()
{
uint16_t result;
__asm__ volatile (
"inw %1, %0"
: "=a" (result)
: "Nd" (portnumber)
);
return result;
}
Port32Bit::Port32Bit(uint16_t portnumber)
: Port(portnumber)
{
}
Port32Bit::~Port32Bit()
{
}
void Port32Bit::Write(uint32_t data)
{
__asm__ volatile (
"outl %0, %1"
: "a" (data)
: "Nd" (portnumber)
);
}
uint32_t Port32Bit::Read()
{
uint32_t result;
__asm__ volatile (
"inl %1, %0"
: "=a" (result)
: "Nd" (portnumber)
);
return result;
}
файл port.h
#ifndef __PORT_H
#define __PORT_H
#include "types.h"
class Port
{
protected:
uint16_t portnumber;
Port(uint16_t portnumber);
~Port();
};
class Port8Bit : public Port
{
public:
Port8Bit(uint16_t portnumber);
~Port8Bit();
virtual void Write(uint8_t data);
virtual uint8_t Read();
};
class Port8BitSlow : public Port8Bit
{
public:
Port8BitSlow(uint16_t portnumber);
~Port8BitSlow();
virtual void Write(uint8_t data);
};
class Port16Bit : public Port
{
public:
Port16Bit(uint16_t portnumber);
~Port16Bit();
virtual void Write(uint16_t data);
virtual uint16_t Read();
};
class Port32Bit : public Port
{
public:
Port32Bit(uint16_t portnumber);
~Port32Bit();
virtual void Write(uint32_t data);
virtual uint32_t Read();
};
#endif
В методах Write
, вы хотите записать данные в порт, номер которого хранится в переменной. Соответственно, выходных переменных в ассемблерной вставке у вас нету, только входные (данные и номер порта). Поэтому после первого двоеточия у вас должно быть пусто:
void Port8Bit::Write(uint8_t data)
{
__asm__ volatile (
"outb %0, %1"
: /* нет выходных переменных */
: "a" (data), "Nd" (portnumber) /* входные переменные */
);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
у меня такая ситуация : нужно сделать софт который будет по видео распознавать машины и какой размер они занимают на картинке, на фоне дороги,...
Хочу сделать пошаговою регистрацию с помощью Vue routerНо, не понимаю как можно реализовать задумку