| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с метками в ассембли |
| Автор: neutrino 8.1.2004, 00:01 | ||
| Приветствую! Давненько мне не приходилось писать на асме в cи. Но вот время настало и что-то он ругается на мои метки. Видимо я чего-то не дописываю. В книге ничего не нашел.
|
| Автор: Tatarin 8.1.2004, 03:03 | ||
| если собирать под VC++7 то тут случаются две ошибки: 1) _asm вместо asm 2) в строке
происходит ошибка error C2432: illegal reference to 16-bit data in 'second operand' это он ругается на di. Если поменять на edi (32-битный) то все собирается без проблем. |
| Автор: Custodian 8.1.2004, 09:39 |
| Все дело в том, что по не понятным причинам, _asm{} не хочет работать с метками. Можно немного модифицировать код, но не потерять его рабочести: char n1[10]={0,0,1,2,3,4,5,6,7,8}; char n2[10]={0,0,8,7,6,5,4,3,2,1}; char n3[10]={0}; char len=10; void addition() { _asm { lea si, n1+9; lea di, n2+9; mov cx, 10;} for(int i=10;i>0;i--) _asm{lodsb; adc al, [di]; aaa; stosb;} } void main() { addition(); } Иногда не работает int i=10; в for, можно вынести к заголовку подпрограммы. |
| Автор: neutrino 9.1.2004, 11:50 |
| А чем отличается три оператора: asm{} _asm{} __asm{} ? ? ? А в вижуал с++ 6.0 есть отличия? |
| Автор: Guest 10.1.2004, 00:15 |
| метки надо исключать из блоков асм т.е. писать их вне, разрывая блоки |
| Автор: Chingachguk 10.1.2004, 19:16 | ||
neutrino, си - это извращенный язык ;) Гораздо извращенне асма:
|
| Автор: neutrino 10.1.2004, 19:48 | ||
Да, блин. Вот [censored 6] фигня. Я тут запутался, глянь код. Что я не так делаю:
Я хотел сложить два числа в двух строках, а он что-то не то делает. Даже не знаю что. |
| Автор: Chingachguk 10.1.2004, 20:23 |
| 1. Судя по всему, ты пишешь на VC. Там очень легко сделать асм-дамп (в режиме дизассемблера). Сдампь то, что делает в результате компиллятор. У меня сильное подозрение, что надо писать не mov eax,[N1] а mov eax,N1 (получить указатель из стека). Приведи его тута ;) 2. Я точно не понимаю, что за числа ты складываешь. Приведи пример аргументов и ожидаемого тобой результата ;) |