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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2015, 16:26   #1
rachina
Пользователь
 
Регистрация: 15.03.2015
Сообщений: 27
По умолчанию неверный результат вычитания

доброго времени суток
программа работает так: ввожу арифметическое действие, потом ввожу 2 и числа и выводи результат.
программа работает, в принципе, верно, но путает уменьшаемое и вычитаемое.
т.е результат 20-5=-15. но это не так же?

подскажите, пожалуйста, как исправить это?
Код:
 
d_s segment
menu db ' + Summa ',0ah, ' - Raznost',0ah, ' * Umnojenie',0ah, ' / Delenie',0ah, 'Vvod', 0ah,'$'
errr db 'Vvod Error!',0ah,'$'
vvod db 'Vvod chislo',0ah,'$'
buff db 6,7 Dup(?)
d_s ends

start:
mov ax,d_s
mov ds,ax
mov dx,offset menu
mov ah,09h	
int 21h
mov ah,07h
int 21h
cmp al,'+'
je summ
cmp al,'-'
je razn
cmp al,'*'
je umnoj
cmp al,'/'
je delen
lea dx, errr
mov ah,09h
int 21h
jmp start



razn: mov dx,offset vvod ; процедура вычитания
mov ah,09h
int 21h
CALL InputInt
mov bx,ax
mov dx,offset vvod
mov ah,09h
int 21h
CALL InputInt
sub ax,bx
jmp OutputInt



InputInt proc ; ввод чисел
push bx
mov ah,0ah
xor di,di
mov dx,offset buff
int 21h
mov ah,02h
int 21h 
mov si,offset buff+2
cmp byte ptr [si],"-"
jnz ii1
mov di,1
inc si 
ii1: xor ax,ax
mov bx,10
ii2: mov cl,[si]
cmp cl,0dh
jz endin
cmp cl,'0'
jl er
cmp cl,'9'
ja er
sub cl,'0'
mul bx
add ax,cx
inc si
jmp ii2
er: 
mov dx,offset errr
mov ah,09h
int 21h
int 20h
endin:
cmp di,1
jnz ii3
neg ax
ii3: 
pop bx
ret
InputInt endp





OutputInt proc ; вывод
test ax,ax
jns oi1
mov cx,ax
mov ah,02h
mov dl,'-'
int 21h
mov ax,cx
neg ax
oi1:
xor cx,cx
mov bx,10
oi2:
xor dx,dx
div bx
push dx
inc cx
test ax,ax
jnz oi2
mov ah,02h
oi3:
pop dx
cmp dl,9
jbe oi4
add dl,7
oi4:
add dl,'0'
int 21h
loop oi3
mov dl, 0ah
int 21h
jmp start
endp

Последний раз редактировалось rachina; 30.03.2015 в 16:28. Причина: комментарии
rachina вне форума Ответить с цитированием
Старый 31.03.2015, 12:47   #2
zhan313
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 44
По умолчанию

Замени:
Код:
CALL InputInt
sub ax,bx
jmp OutputInt
на
Код:
CALL InputInt
xchg ax,bx 
sub ax,bx
jmp OutputInt
перепутаны местами операнды
и
Код:
ii1: xor ax,ax
mov bx,10
на
Код:
ii1: xor ax,ax
xor cx,cx
mov bx,10
в ch может находиться неизвестно что
zhan313 вне форума Ответить с цитированием
Старый 01.04.2015, 09:02   #3
rachina
Пользователь
 
Регистрация: 15.03.2015
Сообщений: 27
По умолчанию

Спасибо большое)) попробую)))
rachina вне форума Ответить с цитированием
Старый 12.04.2015, 22:19   #4
rachina
Пользователь
 
Регистрация: 15.03.2015
Сообщений: 27
По умолчанию

пробовал. всё отлично работает) спасибо большое))))
rachina вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.Value возвращает неверный результат Drilla Microsoft Office Excel 2 21.09.2011 08:46
C++ простая программа с циклом и неверный результат Blondy Помощь студентам 11 31.03.2011 23:33
Неверный результат запроса S@fer БД в Delphi 5 08.02.2011 14:06
Запрос выдает неверный результат Sergio_O БД в Delphi 14 13.01.2011 12:17
В чем ошибка в запросе?неверный результат =( Lunatikus SQL, базы данных 3 26.11.2007 09:50