Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 28.04.2013, 18:21   #1
803
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 89
Репутация: 21
По умолчанию Условные переходы (if)

Здравствующие. Подскажите как написать программу типа пожарный датчик которая выводит сообщение «Опасная ситуация», если t >= 45C.
Ввод есть а вот с if проблемы не получается.
Помогите пожалуйста, заранее спасибо.
Код:

masm
model small
.386
.stack 100h
.data
x dw ?
y dw ?
.code
start:
mov ax, @data
mov ds, ax
mov ah,01h
int 21h ; в al - первый символ
sub al,30h ; теперь первая цифра
mov ah,0 ; расширение до слова
mov bx,10
mov cx,ax ; в cx - первая цифра
Loop: mov ah,01h
int 21h ; в al следующий символ
cmp al,0dh ; сравнение с символом Enter
je Enld ; конец ввода
sub al,30h ; в al - следующая цифра 
cbw ; расширение до слова
xchg ax,cx ; теперь в ax - предыдущее число, в cx - следующая
mul bx ; ax*10
add cx,ax ; cx=ax*10+cx
jmp Loop ; продолжение ввода
Enld: mov x,cx 

;тут должен быть if (но его нет)
	
push -1 ;Сохраним признак конца числа
mov cx,10 ;Делим на 10
l: mov dx,0 ;Очистим регистр dx (xor dx,dx - оптимальнее)
div cx ;Делим 
push dx ;Сохраним цифру
cmp ax,0 ;Остался 0? (оптимальнее or ax,ax)
jne l ;нет -> продолжим
mov ah,2h
l2: pop dx ;Восстановим цифру
cmp dx,-1 ;Дошли до конца -> выход {оптимальнее: or dx,dx jl ex}
je ex
add dl,'0' ;Преобразуем число в цифру
int 21h ;Выведем цифру на экран
jmp l2 ;И продолжим 
ex:mov ah, 01h
int 21h
cmp al, 0dh
je End3
jmp ex
End3:
mov ax, 4c00h
int 21h
end start

803 вне форума   Ответить с цитированием
Старый 05.05.2013, 17:51   #2
wanes101
Форумчанин
 
Аватар для wanes101
 
Регистрация: 04.06.2010
Адрес: Иркутск
Сообщений: 212
Репутация: 23
По умолчанию

В общем случае так

1. сравнение: cmp eax,ebx ;сравниваем eax и ebx
потом следующей командой пишеш условный переход в зависимости от условия
2. Вот к примеру:
JE/JZ Переход, если равно/нуль ZF
JNE/JNZ Переход, если не равно/не нуль ZF
JA/JNBE Переход, если выше/не ниже или равно ZF,CF
JAE/JNB Переход, если выше или равно/не ниже CF
JB/JNAE Переход, если ниже/не выше или равно CF
JBE/JNA Переход, если ниже или равно/не выше CF,AF
к примеру если такая КОП
"jae m1", то
if (eax>=ebx) <=> переход на метку m1, иначе следующая команда
wanes101 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работают условные переходы Gooch Assembler 2 23.05.2012 05:03
условные переходы на асм L0L Assembler 1 31.03.2012 12:38
Условные переходы серг Assembler 1 15.04.2010 22:24
ассемблер условные переходы серг Помощь студентам 0 15.04.2010 19:25


04:07.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru