Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Что за ошибка?


Автор: Tamplier 1.5.2007, 10:30
Подскажите, что за ошибка и как с её исправить:

Invalid register combination (e.g [BP+BX]) in function main

Автор: anwe 1.5.2007, 11:25
Адресация со смещением из 16-разрядных регистров можно только bx+si, bx+di, bp+si, bp+di

Автор: Tamplier 1.5.2007, 13:03
Ещё один вопрос: в одном из самоучителей по ассемблеру прочитал, что команда loop работает только на ближенм расстоянии. Не подскажете поконкретнее: ближнее расстояние - это сколько строк? 

Автор: anwe 1.5.2007, 13:09
127 байт

Автор: Tamplier 1.5.2007, 15:27
Так и не разобрался с циклом. Программа должна выбирать из массива размерностью 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 1.5.2007, 17:00
Может, scanf изменяет CX?

Автор: anwe 1.5.2007, 21:29
scanf наверное, считывает? Я не знаю какой API она соответствует, но функции Win32 не сохраняют значения в eax, ecx и edx после их выполнения. Вот и ошибка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)