![]() |
|
|
![]()
|
|
| Tamplier |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 23.4.2007 Репутация: нет Всего: нет |
Подскажите, что за ошибка и как с её исправить:
Invalid register combination (e.g [BP+BX]) in function main |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 8 Всего: 23 |
Адресация со смещением из 16-разрядных регистров можно только bx+si, bx+di, bp+si, bp+di
Это сообщение отредактировал(а) anwe - 1.5.2007, 11:25 |
|||
|
||||
| Tamplier |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 23.4.2007 Репутация: нет Всего: нет |
Ещё один вопрос: в одном из самоучителей по ассемблеру прочитал, что команда loop работает только на ближенм расстоянии. Не подскажете поконкретнее: ближнее расстояние - это сколько строк?
|
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 8 Всего: 23 |
127 байт
|
|||
|
||||
| Tamplier |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 23.4.2007 Репутация: нет Всего: нет |
Так и не разобрался с циклом. Программа должна выбирать из массива размерностью n наибольшее число, которое меньше 20.
Вот код. Почему-то цикл не работает, то есть он просто не оканчивается. #include <stdio.h> main() { int n,i,y,q; printf("\n\n vvedite rasmernost' n="); scanf("%d",&n); printf("Vvedite chisla\n"); scanf("%d",&y); asm{ mov ax,y } asm{ mov cx,n } reperat: asm{ jmp o1 } o2: asm{ loop reperat jmp e } o1: scanf("%d",&i); asm{ mov bx,i cmp bx,ax ja m1 jb m3 } m1: asm{ cmp bx,20 jb m2 ja m3 } m2: asm{ mov ax,bx jmp m3 } m3: asm{ jmp o2 } e: asm{ mov q,ax } printf ("\n max=%d", q); } |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Может, scanf изменяет CX?
-------------------- Что непонятно - спрашиваем |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 8 Всего: 23 |
scanf наверное, считывает? Я не знаю какой API она соответствует, но функции Win32 не сохраняют значения в eax, ecx и edx после их выполнения. Вот и ошибка.
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |