Будь дома


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
103 11 29

Аноним 10/05/20 Вск 18:38:10 2198809401
image.png (30Кб, 760x612)
760x612
image.png (16Кб, 641x374)
641x374
image.png (8Кб, 128x76)
128x76
Анончики, помогите решить лабу на ассемблере. Ничего не понимаю.

Вылезает ошибка integer overflow при делении. Как исправить? Или что надо переписать, чтобы решить эту систему?
Аноним 10/05/20 Вск 18:59:13 2198827372
>>219880940 (OP)
нахуй вы идиоты лезете туда где ничего не смыслите?
Аноним 10/05/20 Вск 19:00:49 2198828753
Аноним 10/05/20 Вск 19:02:09 2198829784
Аноним 10/05/20 Вск 19:02:40 2198830295
Аноним 10/05/20 Вск 19:12:26 2198837826
>>219880940 (OP)
А что это за место где дают лабы на ассемблере?
Аноним 10/05/20 Вск 19:14:49 2198839617
Эй. Это двач. Тут только все говорят что они работют в IT и зарабатывают 300к в сек.
10/05/20 Вск 19:15:28 2198840248
>>219880940 (OP)
делай деление через вычитание как тру олд
10/05/20 Вск 19:16:05 2198840749
>>219883961
Потому бесплатно ничего делать и не будут.
Аноним 10/05/20 Вск 19:16:55 21988414510
Аноним 10/05/20 Вск 19:35:07 21988562711
>>219880940 (OP)
>integer overflow
>short
Ничего подозрительного не видишь ?
Аноним 10/05/20 Вск 20:01:23 21988757912
Кидай код текстом, чтобы легче было тебе помогать
Аноним 10/05/20 Вск 20:04:05 21988782113
>>219887579
#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov dx, a
mov bx, b
mov cx, p
xor ax, ax // очищаем регистр ax
//Начало цикла для промежутка[a, b] с шагом p
start : cmp dx, bx
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду
cmp dx, -1
jl m2 // если x < -1, то вычисляется значение функции y=a/(x+1) иначе y=3-x
mov bx, dx // временно помещаем значение dx в bx

mov dx, 3
sub dx, bx
add ax, dx
mov dx, bx // восстанавливаем значение dx
mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p

jmp start
m2 : mov bx, dx // временно помещаем значение dx в bx

add dx, 1
mov bx, dx
div dx


add ax, dx
mov dx, bx // восстанавливаем значение dx
mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p

jmp start // конец цикла
m1 : mov Ans, ax // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout « "Ответ - "; //Вывод результата работы метода
std::cout « CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1

}
Аноним 10/05/20 Вск 20:06:36 21988800014
На кого учишься, ОП? Какое направление подготовки?
Аноним 10/05/20 Вск 20:08:05 21988811615
Аноним 10/05/20 Вск 20:08:53 21988816516
>>219888116
Собрался узнать, где такому учат.
Аноним 10/05/20 Вск 20:09:57 21988825317
>>219888165
Информационные системы и технологии.
Аноним 10/05/20 Вск 20:11:25 21988836418
>>219888253
Ну это кафедра, я так понимаю? Или само направление всё же?
Аноним 10/05/20 Вск 20:12:33 21988836919
ОП, ты хорошо понимаешь команду div?
Делимое помещается в dx:ax пару.
Div dx выглядит очень подозрительно.
Сейчас скину пруфы.

Мимо плисовод.
Аноним 10/05/20 Вск 20:12:46 21988840220
Аноним 10/05/20 Вск 20:13:25 21988846121
Аноним 10/05/20 Вск 20:14:16 21988852122
>>219880940 (OP)
>Ничего не понимаю.
Ну так отчисляйся, нахуя страдать?
Аноним 10/05/20 Вск 20:15:39 21988863523
Screenshot20200[...].png (296Кб, 1080x1920)
1080x1920
Все правильно сказал. Тебе нужно поменять регистр с делителем, а dx обнулить видимо.
Аноним 10/05/20 Вск 20:16:54 21988874524
>>219888369
Отчисляться из-за одной лабы на ассемблере по предмету, которой практически никак не связан с этим языком - ну хз. Вообще непонятно как впихнули ассемблер в мою дисциплину, видимо просто, чтобы было.
Все наше изучение ассемблера - это две лабы.
Аноним 10/05/20 Вск 20:16:55 21988874825
image.png (47Кб, 716x263)
716x263
Аноним 10/05/20 Вск 20:17:35 21988880826
>>219888253
09.03.02?
Нас такому кстати не учат, а было бы круто
Аноним 10/05/20 Вск 20:19:30 21988899627
>>219888808
Да.
Упаси господи, если честно.
Аноним 10/05/20 Вск 20:20:44 21988909828
Аноним 10/05/20 Вск 20:21:26 21988916929
Аноним 10/05/20 Вск 20:22:06 21988923230
>>219889169
Сначала скажи, что ты хочешь сделать.
Аноним 10/05/20 Вск 20:24:21 21988941631
>>219889169
Нет, пару dx:ax ты будешь делить на то, что укажешь в div XX, поэтому перетащи делитель в другой регистр, обнули dx и потом дели

Скажем, перемести делитель из dx в bx, и тогда div bx
Аноним 10/05/20 Вск 20:26:06 21988955332
>>219889232
Лучше его слушай, у меня опыта нет почти в асм
Аноним 10/05/20 Вск 20:26:16 21988957133
>>219888996
Ну я бы лучше бы ассемблер дрочил чем с отчетами мучался, благо то что позволяет головушка ещё думать
Аноним 10/05/20 Вск 20:26:18 21988957434
>>219888808
Отучился в колледже на 09.02.01. Изучали такое, Ассемблер, паскаль, программирование микроконтроллеров, в общем там залупа полная. Сейчас кстати получаю высшее по 09.03.02, у нас такого нет, возможно потом появится, а возможно и нет, так как ускоренное обучение 3.5 года. собсна год уже отучился.
Аноним 10/05/20 Вск 20:28:43 21988978235
m2 : mov bx, dx // временно помещаем значение dx в bx

add dx, 1
mov bx, dx <--- тут ты свое временное значение стер

Аноним 10/05/20 Вск 20:29:54 21988987736
>>219880940 (OP)
Сучка, сперва научись формулировать вопрос. Ты даже не сказал под какой именно ассемблер тебе надо это сделать?
Если кто-то потратит время и напишет код скажем под C51, тебе это поможет??
Мразина, пошёл нахуй ибо не ценишь чужое время.
Аноним 10/05/20 Вск 20:30:34 21988992737
>>219888165
На вычислительноой технике тоже учат.
>>219889169
Нене. В ассемблере деление довольно нестандартно. Там зависит от того, каким размером ты делишь. Если ты будешь делить 8 битовым( к примеру bl bh), то результаты запишутся в al:ah (реpульат в al а остаток в ah). А если 16 бит( bx)то резултат запишется в dx:ax.
Аноним 10/05/20 Вск 20:32:13 21989006438
Анон, объясни алгоритм.

y=a/(x+1)

Какой регистр у тебя содержит какую переменную и что означает y.
Я так понимаю, это вычмат?

y -
a -
x -

Аноним 10/05/20 Вск 20:32:38 21989010739
image.png (16Кб, 549x358)
549x358
>>219889416
>>219889232
Таким образом? Ответ вроде должен быть 12.

Пожалуйста, не бейте только меня за мой аутизм.
Аноним 10/05/20 Вск 20:33:28 21989017540
По коду понятно, что там обычный x86 в 16 битном режиме.
Аноним 10/05/20 Вск 20:36:09 21989039841
>>219890064
Нужно найти решение системы на отрезке от [-2; 2] с шагом р = 1.
dx это а, dx +1 это собственно х. По итогу он мне должен считать суммы решений системы на этом промежутке. В ответе 12 должно быть. Или я точно аутист.
Аноним 10/05/20 Вск 20:36:46 21989044442
Аноним 10/05/20 Вск 20:38:10 21989055843
>>219880940 (OP)
Нихуя себе ты пытаешься разобраться в этом говне, я все лабы по асемблеру спиздил в своё время, сейчас чилю стек java+js(react,redux), зп 120.
Аноним 10/05/20 Вск 20:38:47 21989059844
>>219889574
>>219889571
У меня еще специальность с уклоном в дизайн, но дизайном тут и не пахнет.
Аноним 10/05/20 Вск 20:39:04 21989062845
>>219889571
Тоже информационные системные и технологии
Аноним 10/05/20 Вск 20:39:34 21989066646
Аноним 10/05/20 Вск 20:41:51 21989085347
Аноним 10/05/20 Вск 20:42:02 21989087048
>>219884145
Операция перемещения значения переменной в регистр с указанным адресом.

>>219883782
На направлениях, связанных с автоматизацией, такие лабы обязательно встречаются. И чистый Си ещё, указатели и тернарные операторы во все поля.
Аноним 10/05/20 Вск 20:42:59 21989095849
Аноним 10/05/20 Вск 20:43:39 21989101150
Аноним 10/05/20 Вск 20:44:23 21989106851
>>219890398
Давай подробно распиши. Есть a, b, p.
Какие действия нужно сделать, чтобы получить результат.
У тебя путаница сейчас, поэтому распиши словами алгоритм без ассемблера, чисто формулами, как в комментах, только понятнее.
Я вычмат не помню уже. С тебя формулы, с меня ассемблер. Давай.
Аноним 10/05/20 Вск 20:44:54 21989111752
Аноним 10/05/20 Вск 20:45:27 21989115553
>>219888808
>Нас такому кстати не учат, а было бы круто
Проблема асм в том, что он под каждую архитектуру свой. Словом нахуй не нужен. Есть лишь книжка калашникова, но там 16бит, которые нигде банально не запустятся. Годного гайда по 64 битам нет
Аноним 10/05/20 Вск 20:45:28 21989115854
>>219889927
Нам просто скинули эти задания, ничего не объясняя, и никаких лекций по ассемблеру у нас не было, самостоятельно в этом разобраться я не нахожу в себе сил. Преподу тоже не напишешь, он уже месяц не появляется в электронной универовской системе. А все знакомые погромисты 300кк как видят ассемблер чуть ли не в бан кидают.
Аноним 10/05/20 Вск 20:45:50 21989118655
Аноним 10/05/20 Вск 20:48:39 21989139456
>>219890558
Двачую, лол.
На всю группу ну может человека два пытались в этом разобраться, остальные просто приходили сдавать лабы, доставшиеся от старшего курса.
Аноним 10/05/20 Вск 20:49:05 21989142757
>>219891158
Нам ты и задание не скинул.
Аноним 10/05/20 Вск 20:51:09 21989158158
>>219891068
а - это начало промежутка, то есть -2.
b - конец промежутка, то есть 2.
p - шаг равный 1. То есть сначала у нас х = а = -2. Потом прибавляем к нему шаг 1, получается х = -1. И так то конца промежутка. То есть последний х = 2.

Сначала мы берем х = -2 и проверяем первое условие системы x<-1. Так для х = -2 это условие выполняется, то считаем y = a/(x+1).
Дальше берем х = -1. Первое условие x < -1 не выполняется, значит считаем по второму уравнению у = 3 - х.

И так до х = 2.

В конце мы должны сложить сумму значений у и вывести её.
По моим подсчетам это 12.
Аноним 10/05/20 Вск 20:52:05 21989165259
image.png (8Кб, 128x76)
128x76
Аноним 10/05/20 Вск 20:53:56 21989179760
>>219891652
Тут цикла нет никакого, а в опкоде есть.
Аноним 10/05/20 Вск 20:54:12 21989181561
image.png (8Кб, 128x76)
128x76
>>219891427
>>219891652
>>219891797
"Программа, которое вычисляет сумму значений функции, заданной системой уравнений для аргумента, изменяющегося в диапазоне [-2, 2] c шагом 1.
В программе должен быть предусмотрен ввод значений переменных в допустимых границах."
Аноним 10/05/20 Вск 20:56:06 21989195462
>>219880940 (OP)
Забавно. Мы в универе 2 семестра прогали микроконтроллеры (STM32), но делали это на С. Языка Ассемблера даже не касались. Нахуй он нужон?
Аноним 10/05/20 Вск 20:56:40 21989200563
>>219890870
>И чистый Си ещё, указатели и тернарные операторы во все поля
Стоп нахуй, это где-то НЕ встречается?
выпускник ПМИ
Аноним 10/05/20 Вск 20:57:03 21989204664
Аноним 10/05/20 Вск 20:58:04 21989213365
>>219891158
У нас было ещё хлеще. Год кидали лабы по ассемблеру, практически ничего не обьясняя. А на следющий год обьясняли ассемблер. Охуенно. Благо я ассемблером практически сразу заинтересовался и начал учить.
Аноним 10/05/20 Вск 20:58:36 21989217266
>>219880940 (OP)
Ты прям, как маленький.
Напиши на С и скомпилируй gcc с флагом чтоб он высирал ассемблерный листинг.
Аноним 10/05/20 Вск 20:59:05 21989220567
>>219880940 (OP)
ax,bx и даже нет намеков на использования FPU ну и конечно xmm(sse) , AVX . Прям ностальгия в школьные годы попал 90х. И где то в сторонке урчит мой флопи дисковод на 5 дюймов установленный в ПК 286 . ЭХ
Аноним 10/05/20 Вск 21:00:07 21989227768
>>219892005
У меня не было вот указателей практически. И чистого Си так себе было. Тернарные были, да. Зато были нейронные сети, да.
Аноним 10/05/20 Вск 21:01:09 21989237369
Анончики, спасибо, что помогаете! Я бы умер за вас.
Аноним 10/05/20 Вск 21:03:15 21989253970
>>219892133
Удивительное российское образование.
Аноним 10/05/20 Вск 21:03:43 21989257471
>>219880940 (OP)
Это ещё что за срань? Ассемблерная вставка на Си?
Аноним 10/05/20 Вск 21:04:06 21989259972
Аноним 10/05/20 Вск 21:04:06 21989260073
Аноним 10/05/20 Вск 21:04:47 21989266474
Аноним 10/05/20 Вск 21:04:53 21989267075
>>219892205
Я аж сам прослезился от твоих воспоминаний.
Аноним 10/05/20 Вск 21:05:17 21989270376
Аноним 10/05/20 Вск 21:07:55 21989289077
>>219892539
Ну, с учётом того что 90% выпускников моей группы работают как раз таки
>java+js(react,redux),
только без явы, то мало кто, думаю , жалеет об этом.
Аноним 10/05/20 Вск 21:08:38 21989294078

>>219892133
>Благо я ассемблером практически сразу заинтересовался и начал учить
Блять, а чему там учиться? Синтаксис, набор инструкций, вбил в голову, что вместо if делаешь cmp и джамп к лейблу после кода внутри if и что while (x < a) теперь нужно ебашить лейблы и делать jl по лейблу - и вперед.
Аноним 10/05/20 Вск 21:09:36 21989301479
>>219892890
Дожить бы ещё до этого выпуска.
Аноним 10/05/20 Вск 21:14:55 21989344880
>>219890107
Было пару ошибок, вроде, но крч вот тебе код от того анона, который не очень в асм

#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov dx, a // x
mov bx, b
mov cx, p
xor ax, ax // очищаем регистр ax, ans will be here
push ax // store ans on the stack


start: // Начало цикла для промежутка[a, b] с шагом p
cmp dx, bx
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду

cmp dx, -1
jl m2 // если x < -1, то вычисляется значение функции y=a/(x+1) иначе y=3-x


// y = 3 - x
push dx // save current x

mov bx, 3
sub bx, dx // bx = 3 - x

pop dx // restore x
pop ax // get result to ax
add ax, bx // move result there
push ax // save result

mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p
jmp start

// y = a / (x + 1)
m2 :
push dx // save current x

add dx, 1 // x + 1
mov bx, dx // bx = x + 1
mov dx, -1 // dx = 0xFFFF, из-за того, что у тебя пара dx:ax должно быть отрицательным числом
mov ax, a
idiv bx // ax = a / bx

pop dx // restore current x

pop bx // get answer to bx
add bx, ax // update answer
push bx // save answer

mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p
jmp start // конец цикла

m1 :
pop ax // get answer to ax
mov Ans, ax // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout << "Ответ: "; //Вывод результата работы метода
std::cout << CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1

}
Аноним 10/05/20 Вск 21:16:47 21989359381
>>219893448
Попытка №2

#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov dx, a // x
mov bx, b
mov cx, p
xor ax, ax // очищаем регистр ax, ans will be here
push ax // store ans on the stack


start: // Начало цикла для промежутка[a, b] с шагом p
cmp dx, bx
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду

cmp dx, -1
jl m2 // если x < -1, то вычисляется значение функции y=a/(x+1) иначе y=3-x


// y = 3 - x
push dx // save current x

mov bx, 3
sub bx, dx // bx = 3 - x

pop dx // restore x
pop ax // get result to ax
add ax, bx // move result there
push ax // save result

mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p
jmp start

// y = a / (x + 1)
m2 :
push dx // save current x

add dx, 1 // x + 1
mov bx, dx // bx = x + 1
mov dx, -1 // dx = 0xFFFF, из-за того, что у тебя пара dx:ax должно быть отрицательным числом
mov ax, a
idiv bx // ax = a / bx

pop dx // restore current x

pop bx // get answer to bx
add bx, ax // update answer
push bx // save answer

mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p
jmp start // конец цикла

m1 :
pop ax // get answer to ax
mov Ans, ax // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout << "Ответ: "; //Вывод результата работы метода
std::cout << CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1
}
Аноним 10/05/20 Вск 21:16:58 21989361282
>>219892670
Так я такого даже в ядре линукса давно уже не вижу
Аноним 10/05/20 Вск 21:21:32 21989398883
Аноним 10/05/20 Вск 21:23:42 21989415784
Аноним 10/05/20 Вск 21:25:05 21989427185
>>219887579
#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov dx, a
mov bx, b
mov cx, p
xor ax, ax // очищаем регистр ax
//Начало цикла для промежутка[a, b] с шагом p
start : cmp dx, bx
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду
cmp dx, -1
jl m2 // если x < -1, то вычисляется значение функции y=a/(x+1) иначе y=3-x
mov bx, dx // временно помещаем значение dx в bx

mov dx, 3
sub dx, bx
add ax, dx
mov dx, bx // восстанавливаем значение dx
mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p

jmp start
m2 : mov bx, dx // временно помещаем значение dx в bx


mov cx, ax // временно помещаем результат в cx, потому что div помещает результат в dx:ax

add bx,1 // bx=x+1

mov ax, a //a младшее слово
xor dx, dx //a старшее слово, ноль
div bx // a/(x+1) результат деления в ax, а остаток в dx

sub bx,1 // возвращаем в bx = x

add ax, cx // возвращаем результат в ax и добавляем результат деления
mov cx, p // возвращаем шаг


mov dx, bx // восстанавливаем значение dx
mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p

jmp start // конец цикла
m1 : mov Ans, ax // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout « "Ответ - "; //Вывод результата работы метода
std::cout « CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1

}



Вот, можно оптимизировать, но я старался минимально изменить твой код.
Аноним 10/05/20 Вск 21:27:25 21989445286
>>219880940 (OP)
деление уебанское
ты если делишь дели на байт а не на 2 байта, твои супер большие числа туда должны залезть
и делимое должно быть в ax
и дели с помощью idiv раз все signed
с add dx,1 вместо inc dx вообще обмяк в голос
хоть бы стаком пользовался смотреть больно блять
Аноним 10/05/20 Вск 21:28:06 21989450687
image.png (23Кб, 693x450)
693x450
>>219893593
В этом варианте он почему-то теряет где-то 2 и выводит 10.
Аноним 10/05/20 Вск 21:30:08 21989466188
>>219894506
Если он брал чисто твой код, то у тебя формула, вроде, неверная для того, чтобы считать a/(x+1), я на всякий случай переписал то, где был неуверен
Аноним 10/05/20 Вск 21:31:34 21989477189
Аноним 10/05/20 Вск 21:33:35 21989493390
>>219892940
Процедуры, макросы, скорость работы различных команд( да мы это тоже почему то начали учить), адрессация, память.
Согласен, основы изучить несложно, но и ведь большинство студентов не самые умные.
Аноним 10/05/20 Вск 21:37:36 21989520591
>>219893593
А возможно записать без push и pop?
Как этот анон >>219894271
Правда там ответ не тот.
Аноним 10/05/20 Вск 21:46:32 21989588992
>>219895205
>>219887579
#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov dx, a
mov bx, b
mov cx, p
xor ax, ax // очищаем регистр ax
//Начало цикла для промежутка[a, b] с шагом p
start : cmp dx, bx
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду
cmp dx, -1
jl m2 // если x < -1, то вычисляется значение функции y=a/(x+1) иначе y=3-x
mov bx, dx // временно помещаем значение dx в bx

mov dx, 3
sub dx, bx
add ax, dx
mov dx, bx // восстанавливаем значение dx
mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p

jmp start
m2 : mov bx, dx // временно помещаем значение dx в bx


mov cx, ax // временно помещаем результат в cx, потому что div помещает результат в dx:ax

add bx,1 // bx=x+1

mov ax, a //a младшее слово
xor dx, dx //a старшее слово, ноль
cmp ax, 0 //если a < 0
jge pos_val
mov dx,-1 // то dx =0xFFFF
pos_val:

idiv bx // a/(x+1) результат деления в ax, а остаток в dx

sub bx,1 // возвращаем в bx = x

add ax, cx // возвращаем результат в ax и добавляем результат деления
mov cx, p // возвращаем шаг


mov dx, bx // восстанавливаем значение dx
mov bx, b // восстанавливаем значение bx
add dx, cx // изменяем шаг аргумента x + p

jmp start // конец цикла
m1 : mov Ans, ax // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout « "Ответ - "; //Вывод результата работы метода
std::cout « CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1

}


Попробуй
Аноним 10/05/20 Вск 21:49:11 21989609993
>>219895889
Работает. А что такое jge pos_val ?
Аноним 10/05/20 Вск 21:52:48 21989637294
>>219896099
jge - jump if greater or equal

Там dx нужно ставить в 0 если a >= 0, в 0xffff если меньше 0.

Это проверка знака.
Аноним 10/05/20 Вск 21:54:14 21989647395
>>219896372
Понял. Спасибо огромное, что помог.
Обнял тебя.
Аноним 10/05/20 Вск 21:54:53 21989652096
Анончики, всем, кто помог, - спасибо! Всех обнял. Вы лучшие.
Аноним 10/05/20 Вск 22:00:48 21989697097
image.png (187Кб, 1280x584)
1280x584
Если еще кто-то не ушел, подскажите, как впихнуть три условия? Правильный ответ 66. Промежуток и шаг тот же.
Аноним 10/05/20 Вск 22:07:30 21989747298
>>219895205
>>219887579
#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov cx, a
xor bx, bx // очищаем регистр ax
//Начало цикла для промежутка[a, b] с шагом p
start : cmp cx, b
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду
cmp cx, -1
jl m2 // если x < -1, то вычисляется значение функции y=a/(x+1) иначе y=3-x

add bx,3
sub bx,cx

add cx, p // изменяем шаг аргумента x + p

jmp start
m2 :

add cx,1 // cx=x+1

mov ax, a //a младшее слово
xor dx, dx //a старшее слово, ноль
cmp ax, 0 //если a < 0
jge pos_val
mov dx,-1 // то dx =0xFFFF
pos_val:

idiv cx // a/(x+1) результат деления в ax, а остаток в dx

sub cx,1 // возвращаем в cx = x

add bx, ax // добавляем результат деления к сумме в bx

add cx, p // изменяем шаг аргумента x + p

jmp start // конец цикла
m1 : mov Ans, bx // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout « "Ответ - "; //Вывод результата работы метода
std::cout « CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1

}

Вот, упростил. Если заработает, то это будет понятнее.
Аноним 10/05/20 Вск 22:14:11 21989799699
image.png (688Кб, 900x900)
900x900
Аноним 10/05/20 Вск 22:18:28 219898348100
>>219896970
>>219895205
>>219887579
#include <iostream>

short CalcExp(short a, short b, short p)
{
short Ans;
_asm
{
mov cx, a
xor bx, bx // очищаем регистр bx
//Начало цикла для промежутка[a, b] с шагом p
start : cmp cx, b
jg m1 // если a > b, то перейти на метку m1 иначе выполнить следующую команду
cmp cx, 0
jl m2
je m3

add bx,5
add bx,cx

add cx, p // изменяем шаг аргумента x + p
jmp start

m3:
add bx, 54

add cx, p // изменяем шаг аргумента x + p
jmp start

m2 :
add bx,a
sub bx, cx

add cx, p // изменяем шаг аргумента x + p
jmp start // конец цикла

m1 : mov Ans, bx // возвращаем результат суммы функций
}
return Ans;
}

int main()
{
setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
std::cout « "Ответ - "; //Вывод результата работы метода
std::cout « CalcExp(-2, 2, 1); // считает на отрезке [-2;2] с шагом 1

}
Аноним 10/05/20 Вск 22:21:58 219898605101
>>219892277
У меня и то и это было.
И другой хуйни дохуя.
Аноним 10/05/20 Вск 22:23:07 219898684102
>>219892172
Оптимизации ещё надо отключить, а то ничего не поймет ни опхуй ни препод.
Аноним 10/05/20 Вск 22:24:45 219898813103
valentines-серд[...].jpg (34Кб, 636x900)
636x900
Аноним 10/05/20 Вск 22:25:29 219898865104
image.png (1151Кб, 1631x1571)
1631x1571
>>219898348
Я бы вышел за тебя замуж. Спасибо тебе!
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов