sub ассемблер



Автор 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 (переполнение частного).

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Assembler лаба не могу разобраться
спросили в Ассемблер
Что значит вычитает с учетом займа (SBB) ассемблер
Это вычитание с учетом флага переноса - приминительно для старших байтов в многобайтовых данных. То
подробнее...
спросили в Ассемблер
Написать простую программу на ассемблере
простых программ на ассемблере не бывает
подробнее...
спросили в ITBA
Деление отрицательного числа. Ассемблер
Денис Евдоченко, не обижайтесь, но здесь нужно просто правильно применить знаковое деление, а не
подробнее...
спросили в Ассемблер
Ассемблер сдвиги. Как умножить любое число на 13 с помощью сдвигов в ассемблере
13 = (2 + 1) * 4 + 1 - меньше сдвигов (3 против 5), хотя это актуально только для процессоров,
подробнее...

Нужна программа на Ассемблере [Assembler, SOS =D]
1ая. SASM IDE (NASM + макросы для вывода), на базе Linux, но с миним. переделками заработает в
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

Генератор случайных чисел на ассемблере
proc WRandom
push edx ecx
mov eax,[random_seed]
xor edx,edx
mov ecx,127773подробнее...

Ассемблер. Команда cmp.
искать нужно полную документацию по intel assembler, например. вот кусок древней:

CMP
подробнее...

Что такое Полиморфные вирусы
Как известно, первые вирусы появились давно. Они заражали древние
компьютеры, и ничто не могло
подробнее...
спросили в Dirt 4 Randomness
Assembler
Вопрос 1
Вот макрос, генерирующий случайные числа от 0 до n-1. Алгоритм взят из модуля System
подробнее...
спросили в Microsoft Research
Мгу
МГУ - сильный вуз, а работу придется искать
подробнее...

Для чего служит операция xor в ассемблере. Буду очень признательна за полный ответ или ссылку.
xor a, b
делает операцию xor побитово для 2 чисел, присваивает результат первому
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*