Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2017, 17:17   #1
memory_100
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 4
По умолчанию не работает программа, нужна помощь

Код:
#include "headers/modrm.h" //Need support!
#include "headers/cpu.h" //For the registers!
#include "headers/mmu.h" //For MMU!
#include "headers/easyregs.h" //Easy register compatibility!

//First write 8-bits, 16-bits and 32-bits!

int modrm_isregister(byte modrm)
{
	MODRM data;
	data.modbyte = modrm; //Take to disassemble!
	return (data.mod==MOD_REG); //Register?
}

int modrm_ismemory(byte modrm)
{
	MODRM data;
	data.modbyte = modrm; //Take to disassemble!
	return (data.mod!=MOD_REG); //No register (must be memory!)?
}


//Retrieves segment to use!
unsigned int modrm_segment()
{
	return DS; //Use Data Segment for data!
}

//Retrieves base offset to use
uint_32 modrm_offset8(unsigned char regval)
{
	return (uint_32)regval + (EIP&0xFFFFFF00); //8-bit offset. Add EIP higher rest bits!
}

uint_32 modrm_offset16(unsigned int regval) //Offset for word register!
{
	return (uint_32)regval + (EIP&0xFFFF0000); //16-bit offset. Add EIP higher rest bits!
}

uint_32 modrm_offset32(uint_32 regval) //Offset for dword register!
{
	return regval; //Use the register: 32-bits already!
}

int modrm_getmod(byte modrm) //Get MOD bonus parameter size!
{
	MODRM data;
	data.modbyte = modrm; //Load!
	if (data.mod==0 || data.mod==3) //None?
	{
		return 0; //No bonus!
	}
	else //Bonus parameter?
	{
		return data.mod; //Give bonus parameter size!
	}
	return data.mod; //Dummy: not executed!
}

void modrm_write8(byte modrm, MODRM_PARAMS *params, byte value)
{
	MODRM data;
	data.modbyte = modrm; //Take to disassemble!
	switch (data.mod) //Which mod?
	{
		case MOD_MEM: //[register]
			switch (data.reg) //Which register?
			{
				case MODRM_REG_AL: //AL?
					MMU_wb(modrm_segment(),modrm_offset8(AL),value); //Copy value to mem!
					break;
				case MODRM_REG_BL: //BL?
					MMU_wb(modrm_segment(),modrm_offset8(BL),value); //Copy value to mem!
					break;
				case MODRM_REG_CL: //CL?
					MMU_wb(modrm_segment(),modrm_offset8(CL),value); //Copy value to mem!
					break;
				case MODRM_REG_DL: //DL?
					MMU_wb(modrm_segment(),modrm_offset8(DL),value); //Copy value to mem!
					break;
				case MODRM_REG_AH: //AH?
					MMU_wb(modrm_segment(),modrm_offset8(AH),value); //Copy value to mem!
					break;
				case MODRM_REG_BH: //BH?
					MMU_wb(modrm_segment(),modrm_offset8(BH),value); //Copy value to mem!
					break;
				case MODRM_REG_CH: //CH?
					MMU_wb(modrm_segment(),modrm_offset8(CH),value); //Copy value to mem!
					break;
				case MODRM_REG_DH: //DH?
					MMU_wb(modrm_segment(),modrm_offset8(DH),value); //Copy value to mem!
					break;
			}	
			break;	
		case MOD_MEM_DISP8: //[register+DISP8]
			break;
		case MOD_MEM_DISP32: //[register+DISP32]
			break;
		case MOD_REG: //register
			switch (data.reg) //Which register?
			{
				case MODRM_REG_AL: //AL?
					AL = value; //Copy!
					break;
				case MODRM_REG_BL: //BL?
					BL = value; //Copy!
					break;
				case MODRM_REG_CL: //CL?
					CL = value; //Copy!
					break;
				case MODRM_REG_DL: //DL?
					DL = value; //Copy!
					break;
				case MODRM_REG_AH: //AH?
					AH = value; //Copy!
					break;
				case MODRM_REG_BH: //BH?
					BH = value; //Copy!
					break;
				case MODRM_REG_CH: //CH?
					CH = value; //Copy!
					break;
				case MODRM_REG_DH: //DH?
					DH = value; //Copy!
					break;
			}
			break;
	}
}

void modrm_write16(byte modrm, MODRM_PARAMS *params, word value)
{
	MODRM data;
	data.modbyte = modrm; //Take to disassemble!
	switch (data.mod) //Which mod?
	{
		case MOD_MEM: //[register]
			break;
		case MOD_MEM_DISP8: //[register+DISP8]
			break;
		case MOD_MEM_DISP32: //[register+DISP32]
			break;
		case MOD_REG: //register
			switch (data.reg) //Which register?
			{
				case MODRM_REG_AX: //AX?
					AX = value; //Copy!
					break;
				case MODRM_REG_BX: //BX?
					BX = value; //Copy!
					break;
				case MODRM_REG_CX: //CX?
					CX = value; //Copy!
					break;
				case MODRM_REG_DX: //DX?
					DX = value; //Copy!
					break;
				case MODRM_REG_BP: //BP?
					BP = value; //Copy!
					break;
				case MODRM_REG_SP: //SP?
					SP = value; //Copy!
					break;
				case MODRM_REG_SI: //SI?
					SI = value; //Copy!
					break;
				case MODRM_REG_DI: //DI?
					DI = value; //Copy!
					break;
				
			}
			break;
	} //Which MOD?
}

void modrm_write32(byte modrm, MODRM_PARAMS *params, uint_32 value)
{
	MODRM data;
	data.modbyte = modrm; //Take to disassemble!
	switch (data.mod) //Which mod?
	{
		case MOD_MEM: //[register]
			break;
		case MOD_MEM_DISP8: //[register+DISP8]
			break;
		case MOD_MEM_DISP32: //[register+DISP32]
			break;
		case MOD_REG: //register
			switch (data.reg) //Which register?
			{
				case MODRM_REG_EAX: //AX?
					EAX = value; //Copy!
					break;
				case MODRM_REG_EBX: //BX?
					EBX = value; //Copy!
					break;
				case MODRM_REG_ECX: //CX?
					ECX = value; //Copy!
					break;
				case MODRM_REG_EDX: //DX?
					EDX = value; //Copy!
					break;
				case MODRM_REG_EBP: //BP?
					EBP = value; //Copy!
					break;
				case MODRM_REG_ESP: //SP?
					ESP = value; //Copy!
					break;
				case MODRM_REG_ESI: //SI?
					ESI = value; //Copy!
					break;
				case MODRM_REG_EDI: //DI?
					EDI = value; //Copy!
					break;		
			} //register?
			break;
	} //Which MOD?
}

















byte modrm_read8(byte modrm, MODRM_PARAMS *params)
{
	MODRM data;
	data.modbyte = modrm; //Take to disassemble!
	switch (data.mod) //Which mod?
	{
		case MOD_MEM: //[register]
			switch (data.reg) //Which register?
			{
				case MODRM_REG_AL: //AL?
					return MMU_rb(modrm_segment(),modrm_offset8(AL)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_BL: //BL?
					return MMU_rb(modrm_segment(),modrm_offset8(BL)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_CL: //CL?
					return MMU_rb(modrm_segment(),modrm_offset8(CL)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_DL: //DL?
					return MMU_rb(modrm_segment(),modrm_offset8(DL)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_AH: //AH?
					return MMU_rb(modrm_segment(),modrm_offset8(AH)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_BH: //BH?
					return MMU_rb(modrm_segment(),modrm_offset8(BH)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_CH: //CH?
					return MMU_rb(modrm_segment(),modrm_offset8(CH)); //Copy extensionbyte from mem!
					break;
				case MODRM_REG_DH: //DH?
					return MMU_rb(modrm_segment(),modrm_offset8(DH)); //Copy extensionbyte from mem!
					break;
			}
			break;
		case MOD_MEM_DISP8: //[register+DISP8]
			break;
		case MOD_MEM_DISP32: //[register+DISP32]
			break;	
		case MOD_REG: //register
			switch (data.reg) //Which register?
			{
				case MODRM_REG_AL: //AL?
					return AL; //Copy!
					break;
				case MODRM_REG_BL: //BL?
					return BL; //Copy!
					break;
				case MODRM_REG_CL: //CL?
					return CL; //Copy!
					break;
				case MODRM_REG_DL: //DL?
					return DL; //Copy!
					break;
				case MODRM_REG_AH: //AH?
					return AH; //Copy!
					break;
				case MODRM_REG_BH: //BH?
					return BH; //Copy!
					break;
				case MODRM_REG_CH: //CH?
					return CH; //Copy!
					break;
				case MODRM_REG_DH: //DH?
					return DH; //Copy!
					break;
			}
			break;
	} //MOD?
	return 0; //Default: not reached!
}

word modrm_read16(byte modrm, MODRM_PARAMS *params)
{
	return 0; //Disabled for now!
}

uint_32 modrm_read32(byte modrm, MODRM_PARAMS *params)
{
	return 0; //Disabled for now!
}

Последний раз редактировалось Alex11223; 14.05.2017 в 17:24.
memory_100 вне форума Ответить с цитированием
Старый 14.05.2017, 17:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так и чем помочь-то?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2017, 17:27   #3
memory_100
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 4
По умолчанию

хотелось бы понять почему не работает
memory_100 вне форума Ответить с цитированием
Старый 14.05.2017, 17:45   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Для начала надо понять, что она не работает.
Как вы пришли к такому выводу?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2017, 19:07   #5
memory_100
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 4
По умолчанию

при запуске выдаёт ошибку
memory_100 вне форума Ответить с цитированием
Старый 14.05.2017, 19:08   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Секретную?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2017, 19:20   #7
memory_100
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 4
По умолчанию

нет, fatal error: headers/modrm: No such file or directory
compilation terminated.
memory_100 вне форума Ответить с цитированием
Старый 14.05.2017, 19:26   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И? Вы не можете прочитать что написано в первой строке?

И это компиляция, а не запуск программы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2017, 19:26   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так переведите же, что вам написали.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с jQuery ListMenu — не работает русский язык neewy JavaScript, Ajax 0 08.11.2014 16:09
Нужна помощь. Программа на делфи. leonid.tchickurov Фриланс 8 17.12.2013 16:49
Программа по работе с текстами. Нужна помощь :( Verwolf Помощь студентам 4 08.07.2009 19:49
Программа на MPlab(Нужна помощь в написании) Sfarait Фриланс 3 31.05.2009 00:46
Программа по линейному списку, нужна помощь. breakfast Помощь студентам 3 04.05.2009 05:38