Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
SilverSand
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 34
1

Перевод числа из двоичной СС в 16-ричную СС

12.04.2011, 20:44. Просмотров 2595. Ответов 8
Метки нет (Все метки)

Нужно написать программу перевода числа, представленного в 2-ичном коде в 16-ричную СС. Из 10-ичной понятно все, примеры были, а как с двоичной работать?!
Помогите пожалуйста написать данную программку...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2011, 20:44
Ответы с готовыми решениями:

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

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

Перевод чисел из 6-ричной в 21-ричную систему счисления
помогите написать код плиз

Перевод с двоичной в другие системы счисления
Нужно выполнить ввод числа в двоичной системе (до 8 цифр) и перевести его в...

Перевод числа из двоичной системы счисления в 16-ричную
Добрый день! Как перевести числа из двоичной системы счисления в 16-ричную, не...

8
6a6kin
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
12.04.2011, 21:57 2
Одна двоичная тетрада(1000b) - одна hex-цифра(8h).
0
Mikl___
Автор FAQ
11783 / 6087 / 555
Регистрация: 11.11.2010
Сообщений: 11,074
13.04.2011, 05:22 3
SilverSand,
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
.286
.model tiny
.code
org 100h
start:  mov ax,3;стираем с экрана
    int 10h
    mov ah,9;выводим приглашение
    mov dx,offset string0
    int 21h
    mov ah,0Ah
    mov dx,offset string1
    int 21h
    mov ch,0
    xor dx,dx
    mov si,offset string1+2
    mov cl,string1[1]
a1: mov ah,0
    lodsb
    and al,1
    jz a2
    shl ax,cl
    or dx,ax
a2: loop a1
    shr dx,1
    mov bx,offset string3
    mov di,offset string2+7
    mov al,dh
    shr al,4
    xlatb
    stosb
    mov al,dh
    and al,0Fh
    xlatb
    stosb
    mov al,dl
    shr al,4
    xlatb
    stosb
    mov al,dl
    and al,0Fh
    xlatb
    stosb
    mov ah,9;выводим результат
    mov dx,offset string2
    int 21h
    mov ah,0;ждем пока не нажмут на клавиатуру
    int 16h
    retn
string0 db 'Введи строку из нулей и единиц (не более 31) и нажми Enter',0Dh,0Ah,'bin: $'
string1 db 31,0,32 dup(0)
string2 db 0Dh,0Ah,'hex: ',4 dup(0),0Dh,0Ah,'$'
string3 db '0123456789ABCDEF'
end start
1
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
13.04.2011, 07:20 4
Mikl___, позволил себе немного поправить твой код.
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
.286
.model tiny
.code
org 100h
start:  mov ax,3;стираем с экрана
        int 10h
        mov ah,9;выводим приглашение
        mov dx,offset string0
        int 21h
        mov ah,0Ah
        mov dx,offset string1
        int 21h
        mov ch,0
        xor dx,dx
        mov si,offset string1+2
        mov cl,string1+1
    
a1:     mov ah,0
        lodsb
        and al,1
        shl dx,1
        or dx,ax
a2: loop a1
        mov bx,offset string3
        mov di,offset string2+7
        mov al,dh
        shr al,4
        xlatb
        stosb
        mov al,dh
        and al,0Fh
        xlatb
        stosb
        mov al,dl
        shr al,4
        xlatb
        stosb
        mov al,dl
        and al,0Fh
        xlatb
        stosb
        mov ah,9;выводим результат
        mov dx,offset string2
        int 21h
        mov ah,0;ждем пока не нажмут на клавиатуру
        int 16h
        retn
string0 db 'Введи строку из нулей и единиц (не более 16) и нажми Enter',0Dh,0Ah,'bin: $'
string1 db 17,0,17 dup(?)
string2 db 0Dh,0Ah,'hex: ',4 dup(0),0Dh,0Ah,'$'
string3 db '0123456789ABCDEF'
end start
2
Mikl___
Автор FAQ
11783 / 6087 / 555
Регистрация: 11.11.2010
Сообщений: 11,074
13.04.2011, 13:00 5
Vadimych, да с 31 битом я облажался , спасибо за поправки и сэкономленный 16-ый бит
исправленный вариант
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
.286
.model tiny
.code
org 100h
start:  mov ax,3;стираем с экрана
    int 10h
    mov ah,9;выводим приглашение
    mov dx,offset string0
    int 21h
    mov ah,0Ah
    mov dx,offset string1
    int 21h
    xor cx,cx
    mov dx,cx; dx:=0
    mov si,offset string1+2
    mov cl,string1+1; количество символов в строке string1
        jcxz a3; если не ввели ни одного символа
a1: lodsb; очередной символ в AL
        shr al,1
    adc dx,dx; в DX результат
    loop a1
    mov bx,offset string3
    mov di,offset string2+7
    mov cx,4; 16 бит это 4 символа
a2: rol dx,4; кручу, верчу -- обмануть хочу!
    mov al,dl
    and al,0Fh
    xlatb
    stosb
    loop a2
a3: mov ah,9;выводим результат
    mov dx,offset string2
    int 21h
    mov ah,0;ждем пока не нажмут на клавиатуру
    int 16h
    retn
string0 db 'Введи строку из нулей и единиц (не более 16) и нажми Enter',0Dh,0Ah,'bin: $'
string1 db 17,0,18 dup(0)
string2 db 0Dh,0Ah,'hex: ',4 dup('0'),0Dh,0Ah,'$'
string3 db '0123456789ABCDEF'
end start
1
SilverSand
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 34
13.04.2011, 18:02  [ТС] 6
А можно то же самое, но для турбо ассемблера обычного, чтобы написать код в блокнотике (к примеру), потом с помощью TASM и TLINK получить .exe
Последний вариант таким образом не запускается... Выводит на экран какие то символы непонятные...
Просто это надо для лабы, а мы функции типа "lodsb,shl,shr,xlatb,stosb" не изучали. Это специфические функции .286 ? Первые четыре сточки программы что точно обозначают?
Заранее благодарен за разъяснения...
0
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
13.04.2011, 19:48 7
Цитата Сообщение от SilverSand Посмотреть сообщение
функции типа "lodsb,shl,shr,xlatb,stosb" не изучали. Это специфические функции .286 ?
Нет, это обычные инструкции 8086. Вот код exe без непроходимых инструкций:
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
.model small
.stack 100h
.data
string0 db 'bin: $'
string db 17,18 dup (?)
buf db 0dh,0ah,'hex  ',4 dup (?),'$'
.code
start:
 
mov ax,@data
mov ds,ax
 
lea dx,string0
mov ah,9
int 21h
 
lea dx,string
mov ah,0ah
int 21h
 
xor cx,cx
xor ax,ax
xor dx,dx
xor bx,bx
lea si,string+2
mov cl,string+1
lea di,buf+7
 
@a:
mov al,[si]
xor al,30h
add dx,dx
add dx,ax
inc si
inc bx
cmp bx,4
jb @c
call @s
@c:
loop @a
 
test bx,bx
jz exit
call @s
 
exit:
mov ah,9
lea dx,buf
int 21h
 
xor ax,ax
int 16h
mov ah,4ch
int 21h
 
@s:
or dl,30h
cmp dl,'9'
jbe @1
add dl,7
@1:
mov [di],dl
xor dx,dx
xor bx,bx
inc di
ret
 
end start
1
SilverSand
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 34
13.04.2011, 20:00  [ТС] 8
Супер! Большое спасибо! Все работает!
0
SilverSand
1 / 1 / 0
Регистрация: 01.07.2010
Сообщений: 34
16.04.2011, 19:04  [ТС] 9
А можно еще комментарии добавить?
А то я попытался переписать в виде:
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
sseg segment stack
    dw 128 dup (?)
sseg ends
    ;
dseg segment
string0 db 'bin: $'
string db 17,18 dup (?)
buf db 0dh,0ah,'hex  ',4 dup (?),'$'
dseg ends
    ;
cseg segment 
    assume cs:cseg, ds:dseg, ss:sseg
cseg ends
start proc far
     push ds
     push ax
     mov bx, dseg
     mov ds, bx
     call main
     ret
start endp
    ;
main proc far   
     mov ax,@data
     mov ds,ax
 
    lea dx,string0
    mov ah,9
    int 21h
 
    lea dx,string
    mov ah,0ah
    int 21h
 
    xor cx,cx
    xor ax,ax
    xor dx,dx
    xor bx,bx
    lea si,string+2
    mov cl,string+1
    lea di,buf+7
 
    L1:
    mov al,[si]
    xor al,30h
    add dx,dx
    add dx,ax
    inc si
    inc bx
    cmp bx,4
    jb L2
    call process
    L2:
    loop L1
 
    test bx,bx
    jz exit
    call process
 
    exit:
    call exit
main endp   
    
exit proc far
    mov ah,9
    lea dx,buf
    int 21h
 
    xor ax,ax
    int 16h
    mov ah,4ch
    int 21h
    ret
exit endp
 
process proc far
    or dl,30h
    cmp dl,'9'
    jbe L3
    add dl,7
    L3:
    mov [di],dl
    xor dx,dx
    xor bx,bx
    inc di
    ret
process endp
    end start
И столько ошибок получил....
Что я не так сделал?..
0
16.04.2011, 19:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2011, 19:04

Перевод числа из двоичной в 16-ричную систему счисления
Ввод целого числа в двоичной системе счисления, т.е. последовательность цифр 0...

Перевод из двоичной в 8-ричную и 16-ричную системы!
Доброго времени суток! Ребят, как сделать так чтобы Х Y Z в конце моей...

Перевод чисел из десятичной системы счисления в 2-ичную, 8-ричную, 16-ричную и обратно
Помогите составить проги.Очень нато!!!Желательно в процедурах или функциях.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru