|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.05.2017, 10:55 | #1 |
Регистрация: 14.12.2016
Сообщений: 9
|
Система неравенств
Помогите разобраться с y2, мне кажется, что из-за него ответ в некоторых случая неправильный.
Код:
|
07.05.2017, 12:48 | #2 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Reatar, возьми за правило, что перед делением нужно очищать место под остаток.
Если ты делишь байт-на-байт, то очищать нужно регистр(AH), если слово-на-слово регистр(DX). Очищать можно инструкциями: или 'XOR', или 'CBW/CWD' (соответственно для байта или слова). Теперь попробуй исправить свой код, например так: Код:
Нашедшего выход - затаптывают первым..
|
07.05.2017, 21:28 | #3 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Ну я бы не назвал это "под остаток" , скорее во избежание переполнения при делении...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
10.05.2017, 10:08 | #4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
R71MT,
CBW, CWD, CWDE, CDQ, CDQE, CQO нужно использовать только при знаковом делении, при беззнковом используют SUB DX,DX/XOR DX,DX/Mov DX,0 иначе, если AX>7FFF, деление даст неверный результат |
10.05.2017, 16:14 | #5 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Сам всегда юзаю XOR, и признаюсь, что об этой особенности CBW впервые слышу.
Mikl___ спасибо. Буду иметь в виду..
Нашедшего выход - затаптывают первым..
Последний раз редактировалось R71MT; 10.05.2017 в 16:16. |
11.05.2017, 17:22 | #6 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 736
|
Здорово, парни, а как очищать регистр(или число) командами cbw/cwde. Я что-то посмотрел и это команды расширения байта в слово(cbw) и слова в eax(cwde), а как там что очищается что-то я не понял? Объясните, пожалуйста.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
11.05.2017, 22:13 | #7 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Cuprum5 эти инструкции очищают только EAX/EDX и их половинки.
Скачай отладчик GRDB, занеси в регистры EAX/EDX какие-нибудь значения и посмотри, какие команды что очищают. Пока не пощупаешь ручками, ничё не поймёшь
Нашедшего выход - затаптывают первым..
|
11.05.2017, 22:28 | #8 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Cuprum5,
• CBW (AL->AX): если старший бит AL (AL and 80h) = 0 (т.е. число неотрицательное), то AH = 0, иначе AH = 0FFh • CWD (AX->DX:AX): если старший бит AX (AX and 8000h) = 0 (т.е. число неотрицательное), то DX = 0, иначе DX = 0FFFFh • CWDE (AX->EAX): если старший бит AX (AX and 8000h) = 0 (т.е. число неотрицательное), то старшее слово EAX = 0, иначе старшее слово EAX = 0FFFFh (аналогично movsx eax,ax) • CDQ (EAX->EDX:EAX): если старший бит EAX (EAX and 80000000h) = 0 (т.е. число неотрицательное), то EDX = 0, иначе EDX = 0FFFFFFFFh • CDQE (EAX->RAX): если старший бит EAX (EAX and 80000000h) = 0 (т.е. число неотрицательное), то старшее двойное слово RAX = 0, иначе старшее двойное слово RAX = 0FFFFFFFFh (аналогично movsxd rax,eax) • CDO (RAX->RDX:RAX): если старший бит RAX (RAX and 8000000000000000h) = 0 (т.е. число неотрицательное), то RDX = 0, иначе RDX = 0FFFFFFFFFFFFFFFFh
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
11.05.2017, 22:34 | #9 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Обнуление:
• xor ah,ah (AL->AX): AH = 0 • xor dx,dx (AX->DX:AX): DX=0 • movzx eax,ax (AX->EAX): старшее слово EAX = 0 • xor edx,edx (EAX->EDX:EAX): EDX = 0 • mov eax,eax (EAX->RAX): старшее двойное слово RAX = 0... да тут такой прикол – при записи в двойное слово, старшее двойное слово 64-битного регистра (R-регистра) очищается • xor edx,edx (RAX->RDX:RAX): RDX = 0... здесь аналогично (старшая часть RDX тоже очистится). Можно использовать, конечно, и xor rdx,rdx (но такая инструкция длиннее на байт )
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
Последний раз редактировалось 7in; 11.05.2017 в 22:42. |
12.05.2017, 13:42 | #10 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 736
|
Спасибо за ответы, но вот только я не понял почему здесь число неотрицательное:
- ведь 0x8000 - это -32768.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
(С++) Схема неравенств | Uefa | Помощь студентам | 1 | 14.06.2015 10:15 |
Система неравенств | Vitalyas | Общие вопросы C/C++ | 2 | 14.03.2015 13:47 |
Построение графика системы неравенств | Tatiana27 | Помощь студентам | 0 | 23.05.2012 22:39 |
Решение уравнений и неравенств | annochka111 | Помощь студентам | 0 | 03.01.2010 19:29 |