С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 14.12.2012
Сообщений: 31
1

Написать программу перевода числа из десятичного представления в шестнадцатеричное

18.12.2013, 22:43. Показов 2898. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу перевода числа из десятичного представления в шестнадцатеричное.

Добавлено через 3 часа 49 минут
что не так?
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
;
.model tiny
.code
.286 ; 
org 100h ; 
start:
mov dx,offset message1
mov ah,9
int 21h ; 
mov dx,offset buffer
mov ah,0Ah
int 21h ; 
mov dx,offset crlf
mov ah,9
int 21h ; 
 
xor di,di ; 
xor ах,ах ; 
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx ; 
mov cl,10 ; 
asc2hex:
mov bl,byte ptr bcontents[di]
sub bl,'0' ;
jb asc_error ; 
cmp bl,9 ; 
ja asc_error ;
mul cx ; 
add ax,bx ; 
inc di ; 
cmp di,si ; 
jb asc2hex ;
push ax ; 
mov ah,9
mov dx,offset message2
int 21h
pop ax
;
push ax
xchg ah,al ; 
call print_al ; 
pop ax ; 
call print_al ; 
ret ; 
asc_error:
mov dx,offset err_msg
mov ah,9
int 21h ; 
ret ;
; 
 
print_al:
mov dh,al
and dh,0Fh ;
shr al,4 ; 
call print_nibble ; 
mov al,dh ; 
print_nibble: ; 
cmp al,10 ; 
sbb al,69h ;
das ; 
mov dl,al ; 
mov ah,2 ; 
int 21h ; 
ret ; 
messagel db "Десятичное число: $"
message2 db "Шестнадцатеричное число: $"
err_msg db "Ошибка ввода"
crlf db 0Dh,0Ah,'$'
buffer db 6 ; 
blength db ? ; 
bcontents: ; 
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2013, 22:43
Ответы с готовыми решениями:

Программа перевода десятичного числа (до 10) в двоичное
помогите найти ошибку.простейшая прога перевода десятичного числа(до 10) в двоичное.В отладчике...

Написать функцию, которая возвращает шестнадцатеричное символьное представление числа L
Разработать динамическую библиотеку, реализующую функции в соответствии с заданным вариантом, и...

Написать программу перевода числа из десятичного представления в шестнадцатеричное
Написать программу перевода числа из десятичного представления в шестнадцатеричное. Добавлено...

Программа для перевода 4-х разрядного двоичного числа в шестнадцатеричное на ассемблере
Нужно написать программу перевода 4-х разрядного двоичного числа в шестнадцатеричное на ассемблере....

9
551 / 33 / 6
Регистрация: 11.12.2013
Сообщений: 92
18.12.2013, 23:05 2
Такое ощущение, что текст сканировали - message l (L вместо 1), русские символы в названии ax.

Видимо, планировалось сделать так:
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
.model tiny
.code
.286
org 100h
start:
mov dx,offset message1
mov ah,9
int 21h
mov dx,offset buffer
mov ah,0Ah
int 21h
mov dx,offset crlf
mov ah,9
int 21h
 
xor di,di 
xor ax,ax
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx 
mov cl,10 
asc2hex:
mov bl,byte ptr bcontents[di]
sub bl,'0' 
jb asc_error 
cmp bl,9 
ja asc_error 
mul cx 
add ax,bx 
inc di 
cmp di,si 
jb asc2hex 
push ax 
mov ah,9
mov dx,offset message2
int 21h
pop ax
 
push ax
xchg ah,al 
call print_al 
pop ax 
call print_al 
ret 
asc_error:
mov dx,offset err_msg
mov ah,9
int 21h 
ret 
 
print_al:
mov dh,al
and dh,0Fh 
shr al,4 
call print_nibble 
mov al,dh 
print_nibble: 
cmp al,10 
sbb al,69h 
das 
mov dl,al 
mov ah,2 
int 21h 
ret
message1 db "Десятичное число: $"
message2 db "Шестнадцатеричное число: $"
err_msg db "Ошибка ввода"
crlf db 0Dh,0Ah,'$'
buffer db 6
blength db ?
bcontents:
end start
1
0 / 0 / 1
Регистрация: 14.12.2012
Сообщений: 31
20.12.2013, 16:38  [ТС] 3
спасибо, но всё равно не работает(
0
551 / 33 / 6
Регистрация: 11.12.2013
Сообщений: 92
20.12.2013, 17:01 4
У меня работает. Что именно у вас работает не так, как ожидалось?
0
0 / 0 / 1
Регистрация: 14.12.2012
Сообщений: 31
20.12.2013, 19:38  [ТС] 5
много ошибок
Миниатюры
Написать программу перевода числа из десятичного представления в шестнадцатеричное  
0
0 / 0 / 1
Регистрация: 14.12.2012
Сообщений: 31
20.12.2013, 21:16  [ТС] 6
может быть знак вопроса в 71 строке

Добавлено через 30 минут
TFS, скинь пж файл *.asm

Добавлено через 1 час 5 минут
или к этой программе добавить ввод числа
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
ideal
model tiny
codeseg
org 100h
start:
mov ax,0b800h-0a000h
xor bx,bx
call pech_big
call dec_hex
call pech_normal
ret         
;РАСПЕЧАТКА ЧИСЛА НА ЭКРАНЕ ****************************************************
;ВСПОМОГАТЕЛЬНАЯ ПРОЦЕДУРА РАСПЕЧАТКИ ОДНОБАЙТОВОГО ЧИСЛА, В AX - ЧИСЛО
proc pech_small             
label1p:       ;метка, начало цикла
div [div_simb_s]   ;делим с остатком на основание системы счисления (DB), пока частное не 0
add ah,48          ;остаток должен распечатываться, как символ, поэтому добавляем код нуля
mov [result+bx],ah ;помещаем в массив, начиная с последнего символа
inc bx         ;увеличиваем на 1 указатель текущей пустой ячейки массива
xor ah,ah      ;обнуляем остаток, т.к. он уже в массиве
test al,al         ;продолжаем циклическое деление, пока рез-тат не равен 0 
jnz label1p
ret        ;выход из процедуры
endp pech_small
;ПРОЦЕДУРА РАСПЕЧАТКИ НА ЭКРАНЕ
proc pech_normal
label2p:           ;метка, к которой возвращаемся в цикле
dec bx         ;т.к. указатель массива на 1 больше, чем нужно (см. предыдущую процедуру), то
           ;перед распечаткой его уменьшаем
mov al,[result+bx] ;в AL - символы, начиная с последнего в массиве (первого в числе)
int 29h        ;воспользуемся 29h-тым прерыванием (недокументировано)
test bx,bx     ;пока указатель не на 0, продолжаем цикл
jnz label2p
ret        ;выход в основную программу 
endp pech_normal
;ПРОЦЕДУРА РАСПЕЧАТКИ ДВУБАЙТОВОГО ЧИСЛА В ЛЮБОЙ СИСТЕМЕ ОТСЧрТА (ДО 10), В AX - ЧИСЛО
proc pech_big
xor dx,dx      ;в DX - остаток, поэтому обнуляем его вначале
label3p:       ;метка-начало цикла
div [div_simb_b]   ;поделим на основание системы счисления (DW, чтобы остаток был в DX)
push ax        ;сохраним AX, т.к. он используется вспомогательной процедурой
mov ax,dx      ;в AX - остаток, распечатаем сначала его
call pech_small    ;вызов вспомогательной процедуры
pop ax         ;восстановим AX
xor dx,dx      ;обнулим остаток (как в первой процедуре)
test ax,ax     ;если рез-тат не 0, то продолжить цикл
jnz label3p
ret            ;выход в основную программу
endp pech_big
;ПРОЦЕДУРА ПРЕОБРАЗОВАНИЯ МАССИВА В СЛУЧАЕ С ШЕСТНАДЦАТИРИЧНОЙ СИСТЕМОЙ СЧИСЛЕНИЯ
proc dec_hex
xor bp,bp      ;BP - новый указатель на массив, а BX - старый указатель 
label1d:           ;начало цикла
cmp [result+bp],58 ;сравниваем цифру рез-тата с числом большим 10
jnc label2d    ;если больше, то переходим на новую метку
inc bp             ;иначе оставляем без изменения, но увеличиваем указатель
cmp bp,6       
jnz label1d    ;если указатель всс ещс указывает на массив, то продолжаем
ret        ;выход в том случае, когда старшая цифра меньше 10
label2d:       ;сюда переходим, если цифра оказалась больше 10
add [result+bp],7  ;преобразоввываем ес в букву
inc bp         ;аналогично предыдущему случаю
cmp bp,6
jnz label1d        ;если указатель всс ещс в пределах массива, то продолжаем
ret        ;выход в том случае, когда старшая цифра больше 10
endp dec_hex    
;данные       
result db 5 dup (?);результат - число в символах, начиная с конца 
;основания должны быть одинаковыми!!!
div_simb_s db 10   ;основание системы счисления для pech_small
div_simb_b dw 16   ;то же самое для pech_big
end start
0
551 / 33 / 6
Регистрация: 11.12.2013
Сообщений: 92
20.12.2013, 22:28 7
Цитата Сообщение от sparta3131 Посмотреть сообщение
много ошибок
Вероятно, вы не полностью скопировали код, который я привёл. Забирайте его из прикреплённого к этому сообщению файла.
Вложения
Тип файла: zip dec2hex.zip (574 байт, 17 просмотров)
0
0 / 0 / 1
Регистрация: 14.12.2012
Сообщений: 31
20.12.2013, 22:39  [ТС] 8
когда запускаю я программу, на экране символы, которые ещё и мигают
Миниатюры
Написать программу перевода числа из десятичного представления в шестнадцатеричное  
0
551 / 33 / 6
Регистрация: 11.12.2013
Сообщений: 92
20.12.2013, 22:47 9
Вы компилируете программу в EXE-файл. Это неправильно. Обратите внимание на строчку org 100h в её коде. Программу необходимо компилировать в .COM-файл.

tasm dec2hex.asm
tlink /t dec2hex.obj

Не пропустите ключ /t. Именно он говорит линковщику о том, что используется модель памяти tiny и необходимо сгенерировать .COM-файл, а не .EXE.

Файл dec2hex.exe, оставшийся после предыдущей сборки, нужно удалить. У вас должен получиться файл dec2hex.com.
1
0 / 0 / 1
Регистрация: 14.12.2012
Сообщений: 31
20.12.2013, 22:53  [ТС] 10
спасибо большое, помогли)
0
20.12.2013, 22:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2013, 22:53
Помогаю со студенческими работами здесь

Debug. Расчет произведения цифр четверичного представления трехзначного десятичного числа.
Пожалуйста помогите написать программу на debug Вот условие: Составить и отладить программу...

Написать программу перевода двухбайтового целого числа в массив символов
Помогите пожалуйста сделать несколько лаб по ассемблеру, вот например такое задание: Разработать...

Написать программу перевода числа из двоичной системы счисления в десятичную
Написать программу перевода из двоичной системы счисления в десятичную и записать полученное число...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru