| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Обработка массива |
| Автор: bncom 15.4.2007, 19:40 | ||
| Здравствуйте! Вот код, который находит максимальный элемент в массиве.
Мне надо, чтоб результат заносился не в регистр AX (как в сейчас), а в регистр AL. Я пробывал, но что-то не получается, выдаются ошибки... (( Помогите пожалуйтса.... |
| Автор: JAPH 15.4.2007, 20:07 |
| Sorry, а как вы собираетесь запихнуть 16-битный элемент массива в 8-битный AL?! В строке 54 POP BP |
| Автор: bncom 16.4.2007, 08:42 | ||
Так может быть кое-что тогда изменить надо? |
| Автор: JAPH 16.4.2007, 12:17 |
| Элементы массива обязательно word? Сделайте их DB ..., поиск максимума перепишите с использованием 8-битных регистров. |
| Автор: bncom 16.4.2007, 16:52 | ||
JAPH, сделал как вы подсказали - в результате получается какой-т обесконечный цикл...
У меня в массиве всего 5 элементов, а цикл проходит более 50 раз и дальше... |
| Автор: JAPH 16.4.2007, 17:52 | ||||
А в AH у вас что? Остаток DSEG? Вставьте XOR AH, AH. Да, и ещё INC SI в строке 49. |
| Автор: bncom 17.4.2007, 09:09 | ||
Опять же такая проблема (подправил как вы подсказали).
Когда начинаю трассировать в ручном режиме - как буд-то все нормально. Максимальный элемент заносится в AX (хотя, по-идеи он должен быть в AL, но я не знаю где смотреть AL в Turbo Debbager'е), а дальше опять какой-т обесконечный цикл... Можетя я что-то не туда вставляю? |
| Автор: sgi1981 17.4.2007, 11:46 | ||
|
| Автор: bncom 18.4.2007, 16:54 |
| sgi1981, спасибо большое! У вас даже лучше получилось: предусмотрели "защиту" от дурака как говорят... Но на 49 строчке (cmovl dx, ax)у меня выдает ошибку. Ошибка в команде видимо, т.к. CMOVL делает пересылку значения источника в приемник, если флаги SF<>OF. Или еще в чем-то.... |
| Автор: JAPH 18.4.2007, 19:46 | ||||||||
Конечно, не туда! Точнее, не то XOR AH, AH, а не XOR AX, AX! INC SI вместо ADD SI, 2.
AL - младший байт AX. AX вы знаете где. Две младшие его цифры и есть AL; две старшие, кстати, AH.
В том, что CMOVxx появилась в Pentium Pro.
|
| Автор: sgi1981 19.4.2007, 11:33 |
| To bncom: напиши в самом начале директиву .586p |
| Автор: bncom 19.4.2007, 13:13 |
| Все сделал - все получилось! =) Большое всем спасибо! |