Переписать функцию из C++ на ASM
Я написал прошивку для контроллера на Turbo C++ 3.0 и пытаюсь на сколько это возможно переписать на inline-ассемблере.
Я вроде бы попробовал, но компилятор ругается и говорит, что не видит метки, а без джампов я этого сделать не смогу.
Скажите, пожалуйста, как пишутся метки в BASM, а может и помогите кто чем может:)
{
register unsigned int arr=256;
register unsigned char c=0;
register unsigned char cmpr=1;
while (arr<=16384)
{
if(digit&arr) c|=cmpr;
arr<<=1;
cmpr<<=1;
}
return c;
}
unsigned short MakeState16Bit(unsigned short digit)
{
register unsigned long arr=256;
register unsigned short s=0;
register unsigned short cmpr=1;
while (arr<=268435456L)
{
if(digit&arr) s|=cmpr;
arr<<=1;
cmpr<<=1;
}
return s;
}
...
...
...
}
Label:
_asm {
...
...
loop Label
}
{
_asm
{
mov al, 0
mov bl, 3
procedure:
cmp al, bl
jne mJne
jmp END
mJne:
inc al
loop procedure
END:
};
return 0;
}
{
_asm
{
mov al, 0
mov bl, 3
procedure:
cmp al, bl
jne mJne
jmp END
mJne:
inc al
loop procedure
END:
};
return 0;
}
+1
Еще к чему привязка к мат среде, нету других IDE что ли?
Это далеко-далеко не вся программа, а один из кусков, которые хотелось бы видеть на asm. А еще вычисление crc16 и много чего еще, что вызывается чаще всего.
О метках: попробуйте метки с приставкой @ сделать. Или джампы по смещению в адресах типа jmp +$04 (вперед на 4 байта). Хотя могу ошибаться, но попробовать можно.
Это далеко-далеко не вся программа, а один из кусков, которые хотелось бы видеть на asm. А еще вычисление crc16 и много чего еще, что вызывается чаще всего.
Внезапно в TurboC шел стандартный TASM. И для справки TurboC считается лучшим 16 битным компилятором для x86 включая кодогенерацию. Так же сомнительно что ваш подсчет CRC на ассемблере будет быстрее нежели простой табличный способ.
PS: Цель соревнования так раскрыта и не была
;* ваш код
loop @@procedure
;* ваш код
loop @@procedure
Error: Undefined label @@procedure.
PS: Цель соревнования так раскрыта и не была[/quote]
За справку спасибо, хорошо бы без выпендрежу.
Цель: по возможности увеличить скорость, уменьшить объем, все операции с сопроцессором прописать руками на асме в любом случае придется, по этому поводу свои заморочки.
PS: Цель соревнования так раскрыта и не была
За справку спасибо, хорошо бы без выпендрежу.
Цель: по возможности увеличить скорость, уменьшить объем, все операции с сопроцессором прописать руками на асме в любом случае придется, по этому поводу свои заморочки.
Вот только там нет сопроцессора.
Не так сказал. Все операции с плавающей точкой работают только между cli/sti, иначе контроллер виснет насмерть. Соответственно стоит режим эмуляции.