Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2017, 11:45   #1
DmitryKud
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 5
Восклицание как найти номер максимального числа,а потом умножить этот номер на это максимальное число

максимальное число находит и записывает в регистр BX номер в дамп памяти, только почему то 5, когда у меня максимально число 15 под номером 7, Компилятор масм 32, в программе Proteus 8

Код:
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size 
; in the 8086 model properties to 0x10000
;====================================================================
	
	CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA

START:
mov cx,0
mov AX,DATA 
mov DS,AX
lea SI,X
mov dl,0
mov bl,[si]

h:
inc cx
cmp bl,[si+2]
jg Max
mov bl,[si+2]
mov indexMax,dl
mov dl,indexMax
Max:
add si,2
inc dl
cmp cx,len
jne h 
ENDLESS:
	JMP ENDLESS
CODE    ENDS
DATA SEGMENT PUBLIC PARA 'DATA'
X DW 5,6,7,2,3,4,15,1,2,8
indexMax DB ?
len=$-X
DATA ENDS
        END START
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 19.05.2017 в 14:27.
DmitryKud вне форума Ответить с цитированием
Старый 14.05.2017, 13:07   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от DmitryKud Посмотреть сообщение
Код:
mov indexMax,dl
mov dl,indexMax
- а зачем dl копировать в IndexMax, а потом IndexMax обратно в dl?
Cuprum5 вне форума Ответить с цитированием
Старый 14.05.2017, 19:28   #3
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Где-то этот код я сегодня уже видел

Не в BX он записывает, а в BL (что неверно, т.к. числа в X размером со слово). И не номер, а само число. А номер - в indexMax. Причём, не номер, а номер минус 1 (начиная отсчёт с нуля). Вот и получается, что 7-е число - это indexMax=5.
Почему так? Потому что первое сравнение идёт с [si+2], т.е. со вторым числом (первое число – в [si], см. mov bl,[si]), а в dl что у нас? Ноль! Вот и получается сдвиг на 2.

Строка mov dl,indexMax здесь лишняя вообще.
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 14.05.2017, 19:32   #4
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Ещё непонятно зачем использовать dl, когда есть cx (cl), увеличивающийся точно так же, как и dl, только немного раньше.
И lex=($-X)/2 нужно поместить строчкой выше (с делением на 2, т.к. это не байты, а слова!). Зачем искать максимум в indexMax?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 14.05.2017, 20:16   #5
DmitryKud
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 5
По умолчанию

[QUOTE=Cuprum5;1680368]- да это проверял, как будет, прост
DmitryKud вне форума Ответить с цитированием
Старый 14.05.2017, 20:18   #6
DmitryKud
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 5
По умолчанию

Спасибо за объяснение,
разобрался
DmitryKud вне форума Ответить с цитированием
Старый 14.05.2017, 20:31   #7
DmitryKud
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 5
По умолчанию

[QUOTE=Cuprum5;1680368] Мне вообще нужно, используя подпрограммы и стек написать программу
DmitryKud вне форума Ответить с цитированием
Старый 14.05.2017, 20:32   #8
DmitryKud
Новичок
Джуниор
 
Регистрация: 14.05.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Ещё непонятно зачем использовать dl, когда есть cx (cl), увеличивающийся точно так же, как и dl, только немного раньше.
И lex=($-X)/2 нужно поместить строчкой выше (с делением на 2, т.к. это не байты, а слова!). Зачем искать максимум в indexMax?
мне вообще нужно, используя подпрограммы и стек написать это программу
DmitryKud вне форума Ответить с цитированием
Старый 19.05.2017, 13:13   #9
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Подскажите, пожалуйста, что означает конструкция языка:
Код:
len=$-X
Интересуют знаки "$" и "-".

Последний раз редактировалось Cuprum5; 19.05.2017 в 13:20.
Cuprum5 вне форума Ответить с цитированием
Старый 19.05.2017, 13:28   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Интересуют знаки "$" и "-".
$ - текущая позиция (адрес) при компиляции
"-" - это знак минус, означает вычитание


Глава 9. Задание и использование счетчика адреса

Последний раз редактировалось Serge_Bliznykov; 19.05.2017 в 13:30.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти номер строки и столбца максимального элемента.(PascalABCNET) FlayGlam Помощь студентам 3 04.12.2016 04:42
Найти номер первого из ее столбцов, содержащих максимальное количество одинаковых элементов (Delphi) ALEXandr20333 Помощь студентам 12 18.02.2014 21:39
Как найти номер максимального елемента dimko28 Общие вопросы C/C++ 1 13.11.2013 00:52
Найти наименьшие элементы в каждой строке матрицы и номер максимального из них fort-_-minor Общие вопросы C/C++ 3 22.05.2013 15:44
В матрице найти число положительных элементов указанной строки и умножить это число на элементы указанного столбца. (Паскаль) Julichka1k Помощь студентам 4 18.12.2011 20:35