Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2010, 14:56   #1
ToKS
Пользователь
 
Регистрация: 17.05.2009
Сообщений: 30
По умолчанию Программка на условие

Люди вот у меня тут задание
Если B+4A=4, тогда считать A - 3B, если > 4, то считать 5B+3, если < 4, то считать A/B

Вот что я написал, только оно чё то считает не правильно не могу понять почему, кто может помогите плиз, очень надо!!

stac segment
db 64 dup (0)
ends

data segment
A db ?
B db ?
Y db ?
stA db 13,10,'Введите A = $'
stB db 13,10,'Введите B = $'
stX db 13,10,'Решение функции...$'
stY db 13,10,'Результат Y = $'
stQ db 13,10,'Для выхода нажмите любую клавишу...$'
ends

code segment
assume dsata, cs:code, ss:stac

Start:
mov ax,data
mov ds,ax
mov es,ax
;-----------------------------------------
; Вывод строки 'Введите A ='
mov ah,09h
lea dx,stA
int 21h
; Ввод значения переменной A
mov ah,01h
int 21h
sub al,30h
mov A,al
; Вывод строки 'Введите B ='
mov ah,09h
lea dx,stB
int 21h
; Ввод значения переменной B
mov ah,01h
int 21h
sub al,30h
mov B,al
; Вывод строки 'Решение функции...'
mov ah,09h
lea dx,stX
int 21h
; Решение уравнения
mov cl,B
mov al,4 ; al:=A
mov bl,A
imul bl
add ax,bx ; ax:=al+bl=B+4A
cmp ax,4 ; ax=4 ? т.е. B+4A=0 ?
jl m1 ; если B+4A<0, то переход на метку m1
je m2 ; если B+4A=0, то переход на метку m2
mov al,5 ; иначе т.е. B+4A>0, то al:=A
mov bl,B
imul bl
add ax,3 ; al:=5b+3
jmp m_end ; переход на метку m_end
m2:
mov al,A ; al:=3
mov dh,3 ; al:=al+3=B+3
mul dh
sub ax,dh
jmp m_end ; переход на метку m_end
m1:
mov al,A ; al:=B
mov bl,B ; ax:=al т.е. al расширяется до ax
idiv bl ; al:=bl/al=A/B
m_end:
mov Y,al ; Y:=al т.е. Y:=результат функции

; Вывод строки 'Результат Y ='
mov ah,09h
lea dx,stY
int 21h
; Вывод ответа
mov ah,02h
mov dl,Y
add dl,30h
int 21h
;-----------------------------------------
; Вывод строки 'Для выхода нажмите любую клавишу...$'
mov ah,09h
lea dx,stQ
int 21h
; Ожидание нажатия клавиши
mov ah,08h
int 21h
; Выход
mov ax,4C00h
int 21h

ends
END Start
ToKS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программка flashpoint412 Общие вопросы C/C++ 0 09.06.2010 14:01
программка на Ассемблере Flora0 Помощь студентам 0 02.01.2010 19:13
Программка на делфи a1ertso Помощь студентам 2 21.12.2009 11:34