Выражение - Assembler (246050)
Формулировка задачи:
Выражение:
Пожалуйста, подскажите, правильно ли мыслю?
Код:
A DW ?
B DW ?
C DD ?
C = |(A*2-B)/4|
mov ax,а cwd ;ax = dx:ax add ax,ax mov cl,2 sal ax,cl mov word ptr [c+2],dx mov word ptr [c],ax
Извиняюсь, немного упустил.
Исправленный вариант:
mov ax,а cwd ;ax = dx:ax add ax,ax sub ax,b mov cl,2 sal ax,cl mov word ptr [c+2],dx mov word ptr [c],ax
Решение задачи: «Выражение»
textual
Листинг программы
org 100h mov ax,A ; умножаем А на 2 cwd shl ax,1 ; сдвигом регистровой пары rcl dx,1 sub ax,B ; вычитаем В sbb dx,0 test dx,dx ; смотрим знак jns NoNeg ; плюс - ничего не делать not dx ; минус - берем модуль not ax ; инверсией add ax,1 ; с добавлением 1 adc dx,0 ; inc нельзя, т.к. не воздействует на CF NoNeg: ; делим на 4 гарантированно положительное число shr dx,1 ; двумя сдвигами регистровой пары rcr ax,1 ; можно shrd, но не поддерживается 8086 shr dx,1 ; до взятия модуля делить нельзя rcr ax,1 ; т.к. sar -1 = -1 (деление некорректно) mov c,ax ;сохранение в обратном порядке младшего слова mov word ptr c+2,0 ; и старшего, которое всегда 0 ret A DW 1000 B DW 3000 C DD ?
Объяснение кода листинга программы
Код выполняет следующие действия:
- Умножает A на 2.
- Сдвигает A и DX вправо на 1.
- Вычитает B из A.
- Если DX не равен нулю, меняет знаки A и DX.
- Добавляет 1 к A.
- Делит A на 4.
- Сохраняет A в обратном порядке младшего слова в C.
- Сохраняет 0 в старшем слове C.
- Возвращает управление. Переменные: A — DW 1000 B — DW 3000 C — DD ?
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д