Помогите с лабораторной по Ассемблеру.
Операнды являются беззнаковыми
Нужно вычислить данное выражение, но с условием:
Если Результат суммы знаменателя больше байта, то сравнить тетрады младшего байта результата.
Заранее спасибо))):)
Для какого процессора?
МП 8086
a db 255
b db 150
c db 110
d db 255
y dw ?
DATA ENDS
CODE SEGMENT para
begin PROC far
ASSUME cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,0
;складываем a+d
mov bl,d
mov al,a
mov bh,0
mov ah,0;расширяем
add ax,bx
mov dx,ax
;записали слово суммы в dx
;складываем b+c
mov bl,b
mov al,c
mov ah,0;расширяем
mov bh,0
add ax,bx
mov bx,ax
; записали слово суммы в bx
xor ax, ax;обнуляем ax
mov ah, bh; записываем старший бит слова
cmp ah,0; сравниваем с нулем
jne e; переход в случае не равенства на метку e
;если равно продолжаем
; следовательно b+c - помещается в байте
mov ax,bx
mov bl,al; запишем в bl только младший байт
mov ax,dx;запишем a+d в ax
div bl; делиv слово
jmp ex; переходим в конец кода
e:
;т.к. b+c больше байта, то увеличиваем сумму a+d
; до двойного слова
mov ax,dx;перенесли
mov dx,0
div bx; делим
mov bx,ax; перенесли
; если старший байт результата не равен нулю
; то сравниваем тетрады младшего байта
xor ax,ax
mov al, bl ; записываем младший байт
shr al,4 ; делаем правый сдвиг, выделяем старшую тетраду
mov cl, al
mov al,bl;снова записываем младший байт
shl al,4
shr al,4; выделили младшую тетраду
cmp al,cl ;сравниваем тетрады
jb bb; если al(младшая тетрада) меньше, чем
;cl(старшая тетрада) то перемещаемся по метке
;если младшая тетрада al больше, чем старшая тетрада cl
; то записываем
mov al, cl
jmp ex;
bb: mov cl,al ;записываем большее значение в меньшее
ex:
mov y,ax
begin ENDP
CODE ENDS
END begin