Выражение - 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 ?

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Умножает A на 2.
  2. Сдвигает A и DX вправо на 1.
  3. Вычитает B из A.
  4. Если DX не равен нулю, меняет знаки A и DX.
  5. Добавляет 1 к A.
  6. Делит A на 4.
  7. Сохраняет A в обратном порядке младшего слова в C.
  8. Сохраняет 0 в старшем слове C.
  9. Возвращает управление. Переменные: A — DW 1000 B — DW 3000 C — DD ?

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5