Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5

Конвертер валют

02.06.2012, 11:24. Показов 2421. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача состоит в том, что производить перевод валюты из одной в другую. Я решил сделать на примере перевода гривен в белорусские рубли, т.к. с дробными числами все же и ввод и вывод посложнее будет. Сейчас возникла проблема следующего рода: почему при выводе числа не соответствуют действительно, хотя логика заложена вроде как правильно?

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
.model small
.stack 100h
 
data segment                                     
   _BYR     db 10,13,'BYR: ','$' 
   _UAH     db 13,'UAH: ','$'
   UAHtoBYR dw 517               ;1 UAH = 517 BYR
data ends
   
code segment
assume cs:code,ds:data     
begin:
        mov ax,data         
        mov ds,ax           
        mov es,ax           ;es ссылается туда же, где и ds
;------------------------------------------------
;Вывод приглашения на ввод числа
        mov ah,09h          ;команда на вывод строки
        mov dx,offset _UAH  ;смещение на строку
        int 21h             ;выполнить команду
;------------------------------------------------
;Ввод UAH в виде числа с клавиатуры
enter_UAH: 
      mov di,0          ;накопленная часть числа
      mov si,0          ;номер позиции в числе
      mov bp,10         ;множитель, равный 10 (для ввода и вывода)
;ввод символа
input:
      mov ah,08h            ;вызов команды ввода символа с клавиатуры
      int 21h               ;выполнить команду 08h
      cmp al,13             ;нажат Enter?
      je convert            ;да -> завершаем работу процедуры
      cmp al,8              ;нажат Backspace?
      je backspace          ;да -> стираем один символ
      cmp al,'0'            ;меньше 0?
      jb input              ;да -> повтор ввода
      cmp al,'9'            ;не больше 9?
      jbe number            ;да -> введена цифра
;обработка введенного символа
number:
      mov bl,al             ;сохраним символ в bl
      mov ax,di             ;записываем в ax число
      mul bp                ;производим умножение на 10  
      mov dl,bl             ;сохраненный символ спишем в dl
      sub dl,'0'        ;преобразуем символ в цифру
      mov dh,0              ;dx - цифра
      add dx,ax             ;получим новое число (ЧислоЗнаковЧисла*10+число(от 0 до 9))
      jc  input             ;если перенос -> переполнение
      inc si                ;увеличим номер позиции курсора
      mov di,dx         ;в di допишем число
      mov dl,bl             ;в dl символ на вывод
      mov ah,02h            ;команда на вывод символа
      int 21h               ;выполнить команду 21h
      jmp input             ;повторим ввод
;обработка клавиши Backspace
backspace:        
      dec si                ;смещаем указатель назад на одну позицию
      mov ax,di             ;записываем в ax число
      mov dx,0              ;занулим dx (т.к. в нем хранится остаток от деления)
      div bp                ;делим на 10(целая часть в ax, а в dx - остаток)
      mov di,ax             ;полученную целую часть занесем в dx
      mov dl,8              ;вызов BackSpace
      mov ah,2              ;команда на вывод символа
      int 21h               ;выполнить команду 21h
      mov dl,32             ;вызов Space
      int 21h               ;выполнить команду 21h
      mov dl,8              ;вызов BackSpace
      int 21h               ;выполнить команду 21h
      jmp input             ;повторяем ввод
;------------------------------------------------
;Перевод одной валюты в другую
convert:
      mov ax,di             ;в ax - количество денег в UAH
      mul UAHtoBYR          ;переводим UAH в BYR, путем умножения     
      push ax
      push dx
;------------------------------------------------
;Вывод строки
      mov ah,9h             ;команда на вывод строки
      mov dx,offset _BYR    ;смещение на строку
      int 21h               ;выполнить команду
;------------------------------------------------
;Вывод старшей части числа 
        xor cx,cx       ;cx=0
    xor ax,ax       ;ax=0
    xor dx,dx       ;dx=0
        ;вывод самого числа
        pop ax
        cmp ax,0
        je part2
    push    -1  ;сохраним признак конца числа
    mov cx,10   ;делим на 10
repeat: 
        xor dx,dx   ;очистим регистр dx
    div cx  ;делим 
    push    dx  ;сохраним цифру
    cmp ax,0    ;остался 0? (оптимальнее or ax,ax)
    jne repeat  ;нет -> продолжим
    mov ah,2h
digit:  
        pop dx  ;восстановим цифру
    cmp dx,-1   ;дошли до конца -> выход {оптимальнее: or dx,dx jl ex}
    je  part2
    add dl,'0'  ;преобразуем число в цифру
    int 21h ;выведем цифру на экран
    jmp digit   ;и продолжим
;------------------------------------------------
part2:
;Вывод младшей части числа 
        xor cx,cx       ;cx=0
    xor ax,ax       ;ax=0
    xor dx,dx       ;dx=0
        ;вывод самого числа
        pop ax
    push    -1  ;сохраним признак конца числа
    mov cx,10   ;делим на 10
repeat2:    
        xor dx,dx   ;очистим регистр dx
    div cx  ;делим 
    push    dx  ;сохраним цифру
    cmp ax,0    ;остался 0? (оптимальнее or ax,ax)
    jne repeat2 ;нет -> продолжим
    mov ah,2h
digit2: 
        pop dx  ;восстановим цифру
    cmp dx,-1   ;дошли до конца -> выход {оптимальнее: or dx,dx jl ex}
    je  exit
    add dl,'0'  ;преобразуем число в цифру
    int 21h ;выведем цифру на экран
    jmp digit2  ;и продолжим   
;------------------------------------------------   
exit:
        mov ax,4c00h       
        int 21h
code ends
end begin
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.06.2012, 11:24
Ответы с готовыми решениями:

Конвертер валют
выбираешь две валюты, программа показывает в соответствии с курсом сколько будет денег, взятой одной валюты выраженной в другой курс...

Конвертер валют
У меня стоит задача сделать конвертер валют на базе VB Private Sub CommandButton1_Click() Dim usdk, usdp, uahk, uahp, skl, sv As...

Конвертер валют
Здравствуйте. Сделал конвертер валют, но теперь необходимо, чтобы курс валют загружался с какого-нибудь сайта. Нашел один более менее...

2
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
02.06.2012, 12:13
Цитата Сообщение от Arigato Посмотреть сообщение
при выводе числа не соответствуют действительно
В отладчике - все работает. Без отладчика - все работает. Просто перед
Цитата Сообщение от Arigato Посмотреть сообщение
mov ax,4c00h int 21h
вставь
Assembler
1
2
mov ah,10h
int 16h
1
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
02.06.2012, 15:31
Цитата Сообщение от Anonimys Посмотреть сообщение
В отладчике - все работает. Без отладчика - все работает. Просто перед

вставь
Assembler
1
2
mov ah,10h
int 16h
Я вставил. Но получается вот,что.
Скажем, если числа до ~125, то перевод корректный. Если же больше - уже получается что не соответствие действительности. Например, при 1000, по курсу 517 за гривну, получится должно 517000, а выводит 758248

Добавлено через 3 часа 9 минут
Все оказалось достаточно проще, чем я думал. При числах больше 125, возникало переполнение и OF становился в 1.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2012, 15:31
Помогаю со студенческими работами здесь

Конвертер валют
#include<stdio.h> #include<conio.h> #include<math.h> int main() { clrscr(); float cursUsd,cursRon,cursEur,a,b,c; int...

Конвертер валют
Не получается сделать так, чтобы вместо 104,87 € вывело 8389,6 руб. var p,l:integer; g:string; n:real; z:real; h:integer; ...

Конвертер валют
Ребят, помогите, пожалуйста, сделать конвертер валют , чтобы он брал данные коэффициентов с сайта : ...

Конвертер валют
1.Напишите программу “Конвертер валют”. Программа должна позволять пересчитывать сумму, выраженную в одной из денежных единиц (гривны,...

Конвертер валют
Составить программу "конвертер валют".Известны размер денежной суммы в некотрой валюте и текущий курс этой валюты по отношению к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru