|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 4, 2003 09:57:40 · Поправил: Anshik maniak Вчера мучил си с асмом, этот паршивый ЯВУ... Часть получилось (писал сортировку сначала на АСМе) Пытался сделать вставку в си на асме. Си сказал, что мол метки не правильно заданы, или не определены. Пробовал задать "$-число". Подскажите, как эти метки с jmp реализовать? |
|
|
Дата: Мар 4, 2003 10:00:45 надо задавать стандартными сишными методами, т.е. вне асмовской секции :{ |
|
|
Дата: Мар 4, 2003 13:34:09 Может просто нужно было начинать метки с подчёркивания. Я сомневаюсь, что компилятор не позволяет использовать метки в ассемблерной вставке. |
|
|
Дата: Мар 4, 2003 16:56:09 Попробуй начинать их с собаки (@) или с двойной собаки (@@). По крайней мере, насколько я помню, в Турбо Паскале это делалось как-то так. Не исключено, что Борланд использовал похожий метод и для своих Сей. |
|
|
Дата: Мар 4, 2003 18:26:39 Не используй {} для блоков ассемблерного кода. Каждую инструкцию надо пометить ключем _asm. Работает прекрасно. Пример: // ------------------------------------------------- int CountChars (char* pstr, int chAscii) { int ret_code; _asm xor dx, dx _asm mov cx, chAscii _asm cld _asm lds si, pstr NEXT: _asm lodsb _asm test al, al _asm jz DONE _asm cmp al, cl _asm jne NEXT _asm inc dx _asm jmp NEXT DONE: _asm mov ret_code, dx return ret_code; } |
|
|
Дата: Мар 5, 2003 09:48:21 Можно и без подчёркивания: asm inc dx |
|
|
Дата: Мар 6, 2003 00:32:43 В своё время тоже намучились, благо в БГУИРе умов хватает. Вот как будет работать: p1: asm { ...... je p1 } p2: asm { .... jmp p2 } т.е. сами метки должны быть вынесены за вставки. И ещё - между 'asm' и '{' вроде обязательно должен ОДИН пробел либо вообще не должно быть - уже не помню - покрути так и сяк. Кстати, если сильно нада асм-вставки в си код - юзай консольное приложение в Visual - там блок так выглядит: __asm { ..... } Никаких траблав с метками нету. |
|
|
Дата: Мар 6, 2003 09:23:05 собственно что и рекомендовалось мной с самого начала. для Borland C++ - метки вне асмовской вставки для Borland Pascal,Delphi - метки где угодно, но они должны быть определены с помощью label для MS VC++ - метки где угодно в коде. |
|
|
Дата: Мар 6, 2003 10:01:02 Спасибо, разобрался. Всё там через пятую точку сделано, интересно при такой организации асм вообще лучше использовать? int i,buffer_size; char buffer[]="acadsfsjhgfiuytkjdfg"; void main() { buffer_size=strlen (buffer); clrscr(); asm { mov dx, buffer_size lea di, buffer; pusha; cld; cmp dx, 1; jbe sort_exit; dec dx; } a1: asm{ mov cx, dx; xor bx, bx; mov si, di; } a2: asm{ lodsb; cmp al, byte ptr [si]; jbe no_swap; xchg al, byte ptr [si]; mov byte ptr [si-1], al; inc bx; } no_swap: asm{ loop a2; cmp bx, 0; jne a1; } Это же изврат! |
|
|
Дата: Мар 6, 2003 17:56:17 А где же POPA? Я имею ввиду инструкцию, конечно... |
|
|
Дата: Мар 7, 2003 10:05:55 Забыл наверное, но и так работает :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068 |