Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
2 / 2 / 1
Регистрация: 28.09.2012
Сообщений: 34
1

Сравнение двойных слов

17.06.2013, 18:57. Показов 4170. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, покажите пожалуйста пример сравнения двух двойных слов. Наверно глупый вопрос, но ни в Юрове, ни в Абеле не нашел + гугл тоже результатов не дал.
Пусть у нас есть:
Assembler
1
2
val1 dd 65545
val2 dd 65546
Можно ли сравнить их через cmp в 16-ти разрядном masm 86? если можно то, если не сложно, покажите как.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2013, 18:57
Ответы с готовыми решениями:

Изменить процедуру обработки массива двойных слов на обработку слов
У меня не получается переделать массив размерностью 4 байта на 2 байта, и проблема с командой...

Сложение двойных слов
помогите написать программу сложения двойных слов

Вывод двойных слов
Сап анон, полгода учу MASM 4.0 (Intel 8086). Возникла проблема с красивым выводом двойных слов....

Разность двойных слов в ассемблере
Хочу реализовать, казалось бы, элементарную задачу - нахождение разности двойных слов на 16-битном...

7
26 / 26 / 2
Регистрация: 18.08.2010
Сообщений: 186
17.06.2013, 23:15 2
Имхо, достаточно сравнить только старшие слова: если одно больше, то и всё двойное слово больше. Если же равны - тогда сравнить нижние слова, и использовать результат этого сравнения.
Что-нибудь вроде:
Assembler
1
2
3
4
5
6
7
8
9
      mov ax,word ptr[val1+2]
      cmp ax,word ptr[val2+2]
      jz @f
      jmp Continue
@@:
      mov ax,word ptr[val1]
      cmp ax,word ptr[val2]
Continue:
      ;тут проверяем результат сравнения
2
2 / 2 / 1
Регистрация: 28.09.2012
Сообщений: 34
18.06.2013, 09:01  [ТС] 3
спасибо
0
Эксперт быдлокодинга
2091 / 525 / 69
Регистрация: 04.11.2010
Сообщений: 1,310
18.06.2013, 09:20 4
777user777, Хотел для себя уточнить по поводу флага в данном алгоритме. Как то так повелось у меня (уж не знаю откуда) что флаги можно проверять непосредственно после команды сравнения cmp ( а так же add, sub и т.п не об этом сейчас речь) в Вашем же примере, в случае неравнества выполняется команда безусловного перехода. Вопрос в следующем: Можно ли продолжать верить флагам после двух команд jz и jmp. Т.е. на уровне железяк не совсем понятно мне сравнили мы (2) старшие половины (они допустим не равны) и через безусловный переход на метку Continue: при этом ещё не имея понятия какая из старших половин большая. т.е. мне (допустим) требуется второе сравнение для следующего ветвления? или установленные флаги так и тащатся ГАРАНТИРОВАНО через стопицот команд при условие что те сами не влияют на флаги.

Добавлено через 8 минут
На Вашем примере, коменты капсом как бы укажут ход в конкретной ситуации
Assembler
1
2
3
4
5
6
7
8
9
mov ax,word ptr[val1+2]
      cmp ax,word ptr[val2+2] ; AX ОКАЗАЛОСЬ БОЛЬШЕ
      jz @f ; ДЛЯ ПРОГРАММЫ ЖЕ ПО ДАННОМУ УСЛОВИЮ ОНИ ПОКА ЧТО ПРОСТО НЕРАВНЫ 
      jmp Continue ; И МЫ ПЕРЕХОДИМ НА МЕТКУ Continue
@@:
      mov ax,word ptr[val1]
      cmp ax,word ptr[val2]
Continue: ; ПЕРЕЙДЯ СЮДА МНЕ НУ ОЧЕНЬ НАДО ДОУТОЧНИТЬ КАКАЯ ВСЁ ЖЕ ПОЛОВИНА БОЛЬШЕ (ИЗ ПРЕДЫДУЩЕГО СРАВНЕНИЯ МЫ ТОЛЬКО УЗНАЛИ ЧТО ОНИ НЕРАВНЫ
; МОГУ Я ПОСТАВИТЬ КОМАНДУ УСЛОВИЯ JA ИЛИ JB. ИЛИ ПРЕЖНЕЕ ПОЛОЖЕНИЕ ФЛАГОВ ТУТ НЕ ГАРАНТИРОВАНО И НУЖНО ПОВТОРИТЬ КОМАНДУ CMP ?
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
18.06.2013, 10:24 5
Полный 30h,
да, пока не появятся команды воздействующие на флаг CF (логические, арифметические) в метке Continue действует еще результат сравнения старших половин. Вообще-то, все спорные утверждения стоит проверять в дебаггере
1
Эксперт быдлокодинга
2091 / 525 / 69
Регистрация: 04.11.2010
Сообщений: 1,310
18.06.2013, 10:42 6
Цитата Сообщение от Mikl___ Посмотреть сообщение
Вообще-то, все спорные утверждения стоит проверять в дебаггере
Я не сильно представляю как дебаггер "смотрит" за процессором, но есть подозрение, что он непосредственно этот самый процессор использует. Поэтому степень достоверности его "показаний" беру под сомнение. К тому же у кого то из писателей книг по ассемблеру видел примеры как этот самый дебаггер, а может и не этот, обмануть. Там, если мне не изменяет память, какая то трабла через стек была. Вот после того примера у меня есть некоторое недоверие в плане 100% его возможностей.
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
18.06.2013, 23:10 7
Цитата Сообщение от Полный 30h Посмотреть сообщение
Там, если мне не изменяет память, какая то трабла через стек была
ты про это?
Assembler
1
2
3
4
5
6
7
8
9
10
.model tiny
........
mov ah, 9
mov dx, offset msg
mov sp, offset aaa
mov ax, 9090h
push ax
int 20h
aaa:
int 21h
это недостаток трупоотладчика. он мрет. софт айс отлавливает такую шнягу и все норм делает. так что можно отладчика доверять. если жу совсем скептик,то проверяй посредством вывода диагностических сообщений в нужных местах без дебугера.
0
Эксперт быдлокодинга
2091 / 525 / 69
Регистрация: 04.11.2010
Сообщений: 1,310
18.06.2013, 23:33 8
Цитата Сообщение от Troll_Face Посмотреть сообщение
то проверяй посредством вывода диагностических сообщений в нужных местах без дебугера
Этим собственно и балуюсь. Тем паче что пользую 64 бита, там для англофобов на сегодняшний день гроус аллес в полный рост с отладкой. Промежуточные результаты на каждом повороте, возвратами функций не брезгую опять же.
0
18.06.2013, 23:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2013, 23:33
Помогаю со студенческими работами здесь

Сумма нечетных чисел массива двойных слов
Здравствуйте! Если все элементы двойные слова, то сумма должна иметь другой тип что бы не выйти из...

Среднее арифметическое элементов в массиве чисел (двойных слов)
От всей души прошу вас парни! выручайте пожалуйста!! в программировании не очень понимаю. а до...

Умножение двух двойных слов (пример из книги Питера Абеля)
Добрый вечер господа) немного запутался с умножением, прошу втолковать Перемножение двух...

[NASM] Определить размер первого участка памяти с нулевыми значениями двойных слов
Написать программу на языке ассемблера NASM, определяющую размер первого встретившегося участка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru