Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выводом на экран 
:(
    Опции темы
ROKI
Дата 3.1.2009, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 26.5.2008

Репутация: нет
Всего: нет



Привет всем!!! У меня возникла проблема с выводом чисел на экран. Мне нужно решить такую систему:          
                          если а>b, тогда X=1-b/a
                          если a=b, тогда X= -10
                          если a<b, тогда X=(a-5) /b

Числа а и в, вводятся из клавиатуры, а Х выводится на экран. Например если я ввожу а=5 b=3 (a>b), Х=0,4, а на экране выводится Х=13106, или если я ввожу а=15 b=20 (a<b), Х=0,5 а на экране выводится Х=0. В принципе понятно, что для того, чтобы на экране выводилось Х=0,4 в программе нужно реализовать вывод вещественных чисел, но возможно Вы знаете как можно вывести число 0,4 без вывода вещественных чисел, например в таком виде “04”. Зарание спасибо!!!. Вот код:
Код

stek segment stack 
db 256 dup(?)
stek ends 
;/////////////////////////////////////
data segment
m_1 db 'chuslo a: $'
m_2 db 'chuslo b: $'
m_3 db 'X= $' 
m_4 db 'Nepravelynuy vvod$'

new_s db  0dh,0ah,24h
buffer label byte 
maxKeys db 30 
inputs  db ?
keyboard db 30 dup (0)
mnozh db 10 
a dw ?
b dw ? 
x dw ? 
data ends 
;/////////////////////////////////////////
code segment 
assume cs:code, ds:data, ss:stek 
begin: 
 mov ax, data 
 mov ds, ax
 mov ah,9 
 mov dx,offset m_1
 int 21h
 xor dx,dx

 xor ax,ax
 mov dx, offset buffer 
 mov ah, 0ah 
 int 21h 
 mov cl, inputs
 mov si, cx 
 dec si 
 mov ax , 1

met_a:
 mov bl,keyboard[si]
 cmp bl,39h
 ja er
 sub bl, 30h 
 push ax 
 mul bx
 add a, ax
 pop ax 
 mul mnozh 
 xor bx, bx 
 dec si
loop mit_a

 xor ax, ax
 mov ax, a

 xor ax, ax
 xor si, si
 mov ah,9
 mov dx, offset new_s
 int 21h
 mov ah,9 
 mov dx,offset m_2
 int 21h 
 xor ax,ax
 xor dx,dx
 mov dx, offset buffer 
 mov ah, 0ah
 int 21h 
 mov cl,inputs 
 mov si,cx 
 dec si 
 mov ax,1
met_b:
 mov bl, keyboard[si]
 cmp bl,39h
 jg er
 sub bl, 30h
 push ax 
 mul bx 
 add b, ax 
 pop ax 
 mul mnozh
 xor bx, bx 
 dec si 
loop mit_b
jle ok


xor bx,bx
mov bx,b 
 
er:
 mov ah,9
 mov dx,offset new_s
 int 21h
 mov ah,9
 mov dx,offset m_4 
 int 21h
 mov ah,10h 
 int 16h
 jmp exit 

ok: 
 mov ax,a
 mov bx,b 
 cmp ax,bx
 ja bolshe
 je rovno
 jb menshe

menshe:
 mov ax,a
 sub ax,5
 div b
 call vuvod
 jmp exit

rivno: 

 mov ax,10
 call vuvod 

bilshe: 
 mov ax,1
 sub ax,b
 div a
 
 
 call vuvod
 
exit :
 mov ah,4ch
 int 21h
;///////////////////////////////
vuvod proc
test    ax, ax
jns short i1
mov ah, 02h
mov dl, '-'
int 21h
pop ax
push ax
neg ax
i1:
xor cx, cx 
xor bx, bx 
mov x,ax
push ax
mov bx, 10
cycl1:
   xor dx,dx
   div bx
   add dl, 30h
   push dx
   inc cl
   cmp ax,0
   jz next
jmp cycl1


next:    
mov ah,9
mov dx,offset new_s
int 21h
mov ah, 9 
mov dx, offset m_3
int 21h
xor ax,ax
xor dx,dx
mov ah, 2h 
cycl2:
 pop dx         
 int 21h        
loop cycl2
pop ax

mov ah,10h
int 16h 
ret  
vuvod endp
;///////////////////////////////////////     
code ends 
end begin 

  
  


PM MAIL   Вверх
Mikl_
Дата 11.1.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



ROKI, что бы не связываться с FPU (хотя попробуй ничего сложного в работе с вещественными числами нет) можно сделать так: вместо X=1-b/a обрабатываешь X=10000 - 10000*b/a, но при выводе на экран ставишь запятую или точку в нужную позицию  smile 
PM MAIL   Вверх
airyashov
Дата 11.1.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



слишком много кода
проверьте, что в регистрах после перевода из строки в число

старшую часть CX неплохо обнулить перед
Код

 mov cl, inputs
 mov si, cx 



--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.