IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Перевод чисел из 10-ной в 15-ричную систему, Неправильно работает
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Задание: Необходимо написать программу для перевода числа из 10-ной в 15-ричную систему счисления. Число в 10-ной системе ввести с клавиатуры, число надо вводить максимум из 4 цифр. Надо заменить числа при выводе следующим образом: 10-A, 11-B, 12-C, 13-D, 14-E.

Программа не правильно работает, если числа больше 200! Например число 300 неправильно переводит! Подскажите плиз почему?

Программа:

model small
stack 100h
.data
tekst db "Vvedite chislo ne bolee 4-x cifr:",'$' ;сообщение ввести число
string dw 4 dup (0) ;массив, который будет содержать 4 цифры числа
len_string =$-string ;длина массива
delitel db 15 ;основание новой системы счисления
mas db 4 dup (0) ;массив из 4 эл-тов, содержащих число 10, который будет содержать цифры числа в новой СС
chislo dw 0 ;число в 10-ной СС
ten db 10
tekst2 db "Chislo v 15-richnoi SS:",'$'
ost dw 0
.code
start:
mov ax,@data
mov ds,ax

;выводим сообщение о вводе числа
mov ah,09h
mov dx,offset tekst
int 21h

;вводим с клавиатуры число
mov bx,0 ;номер страницы
mov cx, len_string ;записываем количество повторений ввода символа
lea dx,string ;записываем символы в массив string
mov ah,3fh ;номер функции
int 21h
sub ax,2
mov bx,ax
;получаем из цифр число
mov si,0 ;номер элемента массива string
cikl1:
cmp si,bx ;сравниваю цифру числа с числом 10, чтобы проверить что была введена цифра с клавиатуры
jnb m1 ;если равно, то выходим из цикла
mov ax,chislo ;записываю число в 10-ной СС в ах
mul ten ;умножаю число на 10
sub string[si],30h ;вычитаю из кода символа 48, чтобы получить цифру
add ax,string[si] ;прибавляю к ax цифру числа
mov ah,0
mov chislo,ax ;записываю результат в chislo
inc si ;увеличиваю номер элемента на 1
jmp cikl1 ;если меньше, то переходим на cikl1

m1:
;перевод в 15-ричную СС
mov si,0
cikl2:
mov ax,chislo ;записываю в ах число, которое буду делить
div delitel ;делю число в 10-ной СС на 15
mov mas[si],ah
inc ost
mov ah,0
mov chislo,ax
inc si
cmp chislo,0
jne cikl2

;замена цифр остатков, если они от 10 до 14, на буквы
mov si,0
zamena:
cmp si,ost
jnb vivod
cmp mas[si],10
jb net
add mas[si],55
inc si
jmp zamena
net:
add mas[si],30h
inc si
jmp zamena
;вывод символов на экран
vivod:
mov ah,09h
mov dx,offset tekst2
int 21h

mov si,4
mov cx,ost
mov ah,02h
cikl3:
cmp mas[si],0
jne m2
dec si
jmp cikl3
m2:
mov dl,mas[si]
int 21h
dec si
loop cikl3

mov ax,4c00h
int 21h
end start



Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 6:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name