Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программисты знающие ассемблер помогите найти и исправить ошибки в коде...

*Lazy* Профи (844), закрыт 4 года назад
(Компилятор TASM)
ideal
model small;
stack 255;
dataseg;
x db 0Ah;
udataseg;
y dw ?

Codeseg;
start:
mov ax,@data;
mov ds,ax;
mov al,x;
mov ah,x;

cmp al,14h;
jge b_r;
cmp al,89h;
jle m_r;

add ah,2h;
cbw;
mov cx,ax;
mul al;
cbw;
add ax,1h;
mov dx,ax;
mov ax,cx;
div dx; //тут ошибка деление на 0
jmp exit;

b_r:

mul al;
cbw;
mov bx,ax;
mul ah;
cbw;
mov cx,ax;
mov ax,bx;
mul ax;
add ax,cx;
sub bx,2h;
div bx;
mov cx,ax
sub ah,16h;
mul ah;
cbw;
add cx,ax;
mov ax,cx;
jmp exit;

m_r:
mul ah;
cbw;
mov cx,ax;
mov ax,7D2h;
add al,5h;
div al;
sub ax,cx;
jmp exit;

exit:
mov y,ax
mov ah,04Ch
int 21h
end start

Лучший ответ
Алексей Быков Мастер (1525) 15 лет назад
Честно говоря, ассемблер уже начал забывать.
Не помню можно ли в качестве делителя указвать регистр dx, т. к. как когда операндом div указывается 16-битный регистр, то делимое считается 32-битным и берется с регистров dx(старшая часть) и ax (младшая часть) . В данном случае происходит скорее всего не деление на 0, а переполнение, т. е. ситуация когда результат слишком велик. В данном случае результат не помещается в ax.
Трудно сказать в чем проблема. Вы напишите, что программа должна делать.
Остальные ответы
Похожие вопросы