Автор Fanta задал вопрос в разделе Другие языки и технологии
Assembler лаба не могу разобраться и получил лучший ответ
Ответ от Миоко Таканава[гуру]
Не вижу здесь Ассемблер, вижу Паскаль со встроенным ассемблером, а это не одно и то же.
32-разрядный Integer, Smallint.. -это явно не Turbo Pascal, это или Delphi, или Free Pascal, т. е. 32-разрядные диалекты Паскаля.
Тогда не понятно, почему вы используете 16-разрядные регистры?
Integer и Smallint - целые типы со знаком, а вы используете беззнаковые операции умножения и деления.
Первую формулу я бы реализовала так:
asm
mov eax, a
cdq
movzx ecx, b
idiv ecx
movsx ecx, c
imul ecx
mov D, eax
end;
А вторую так:
asm
movsx eax, c
imul eax
movzx ecx, b
div ecx //Здесь уже можно использовать беззнаковое деление, т. к. c^2 неотрицательное число
sub eax, a //Результат предыдущего деления уже 32-разрядный
mov E, eax
end;
Но если вам требуется использовать команды процессора i8086 (16-разрядного) , то это можно сделать так:
asm
mov ax, C
imul ax
mov cl, B
xor ch, ch
div cx
cwd //Расширение 16-разрядного операнда в ax до 32-разрядного в dx:ax
sub ax, word ptr A
mov word ptr E, ax
sbb dx, word ptr A[2]
mov word ptr E[2], dx
end;
В последнем случае возможно возбуждение исключения по ошибке деления при определённых сочетаниях значений C и B, когда результат вычисления C^2/B получается больше 65535 и целиком не умещается в регистр ax (переполнение частного).
Что значит вычитает с учетом займа (SBB) ассемблер
Это вычитание с учетом флага переноса - приминительно для старших байтов в многобайтовых данных. То
подробнее...
Написать простую программу на ассемблере
простых программ на ассемблере не бывает
подробнее...
Деление отрицательного числа. Ассемблер
Денис Евдоченко, не обижайтесь, но здесь нужно просто правильно применить знаковое деление, а не
подробнее...
Ассемблер сдвиги. Как умножить любое число на 13 с помощью сдвигов в ассемблере
13 = (2 + 1) * 4 + 1 - меньше сдвигов (3 против 5), хотя это актуально только для процессоров,
подробнее...
Нужна программа на Ассемблере [Assembler, SOS =D]
1ая. SASM IDE (NASM + макросы для вывода), на базе Linux, но с миним. переделками заработает в
подробнее...
Генератор случайных чисел на ассемблере
proc WRandom
push edx ecx
mov eax,[random_seed]
xor edx,edx
mov ecx,127773
подробнее...
Ассемблер. Команда cmp.
искать нужно полную документацию по intel assembler, например. вот кусок древней:
CMP
подробнее...
Что такое Полиморфные вирусы
Как известно, первые вирусы появились давно. Они заражали древние
компьютеры, и ничто не могло
подробнее...
Assembler
Вопрос 1
Вот макрос, генерирующий случайные числа от 0 до n-1. Алгоритм взят из модуля System
подробнее...
Для чего служит операция xor в ассемблере. Буду очень признательна за полный ответ или ссылку.
xor a, b
делает операцию xor побитово для 2 чисел, присваивает результат первому
подробнее...