Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/106: Рейтинг темы: голосов - 106, средняя оценка - 4.55
6 / 6 / 0
Регистрация: 07.10.2009
Сообщений: 164

Вывод числа в двоичном виде

23.09.2010, 16:39. Показов 21874. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вы бы не помгли подсказать, например, дано число в 16-тиричном виде (в DT), а вывести его нужно в двоичном виде
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.09.2010, 16:39
Ответы с готовыми решениями:

Вывод содержимого регистров в двоичном виде
Нужно вывести на экран двоичные коды шестнадцатеричных цифр, заданных в регистре ax и bx. С bx всё прошло хорошо, код приведён ниже, но с...

Вывод на экран слова в двоичном виде
Вывод на экран слова в двоичном виде. Как можно вывести слово в дв виде? Я не выкупаю слегка(овер, как слегка). Буду признателен за внятное...

Даны 2 числа в двоичном виде
Задание : Даны 2 числа в двоичном виде. Первое число умножить на 16 и в полученном значении обнулить 3,5 разряды, а 2-ое разделить на 4,...

9
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
23.09.2010, 16:52
https://www.cyberforum.ru/asse... 54461.html
0
6 / 6 / 0
Регистрация: 07.10.2009
Сообщений: 164
23.09.2010, 17:39  [ТС]
вот код, но он нули в переди добавляет только до 16-тиричного числа, а все остальные добавляет в конец, как мне сделать, чтобы они добавлялись в начало

Добавлено через 39 секунд
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
CODESG          SEGMENT
                ASSUME CS:CODESG, DS:CODESG, SS:CODESG, ES:CODESG
                ORG     100H    ;Начало в конце PSP
BEGIN:       
        
MAIN            PROC
        ;------------------------------------Тело программы------------------------------
 mov ax, word ptr number ; пишем число в ах
 
 
    mov bx,ax
        mov cx,80
ob1:
        shl bx,1
        jc ob2
        
        mov dl,'0'
        jmp ob3
        
ob2:
        mov dl,'1'
ob3:
        mov ah,2
        int 21h
        loop ob1  
 
 mov ah,01
 int 21h ; выводим на экран
 ret 
 
        ;-----------------------------Определение данных-------------------------------
        number dt 0123fffh
        res dw 0,'$'
    A     DB 10,13,'$'
MAIN            ENDP
CODESG          ENDS
                END BEGIN
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
23.09.2010, 18:12
Не понял сразу, что имелось ввиду под DT. Этот код для 16 разрядных чисел.
Просто выводите свое по частям.
0
6 / 6 / 0
Регистрация: 07.10.2009
Сообщений: 164
23.09.2010, 18:53  [ТС]
т.е. у меня число в 16-тиричной системе записано в number, которая определена в директиве DT (10 байт), вот мне нужно, чтобы это число вывелось на экран в двоичной системе счисления, т.е. 80 (нулей и единиц), получается данное число преобразовать в двоичное, а недостающие числа добавить нулями, в начале, а у меня получается, что нули добавляются в конец, помогите как-то исправить, чтобы нули добавлялись в начало
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
23.09.2010, 20:32
Если я ничего не путаю, то число которое хранится в DT в бинарyом виде записывается слево направо, то есть например пишем DT FF00EE12h, а в бинарнике и памяти будет 12EE00FFh. Поэтому если выводить начиная с начала, то и получится число наоборот, как оно и есть в памяти. А не как записано в DT.

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
.model tiny
.code
.startup
 
    mov cx,5        ; 10 байт / 2 = 5
    mov si,offset number    ; DS:SI = number
next_dw:
    lodsw           ; AX = 2 байта из number
    mov bx,ax       ; BX = AX
    push cx         ; сохраним счетчик количества двойных слов
        mov cx, 16              ; счетчик для 16 бит в двойном слове
        mov ah, 2h              ; функция int21 - печать символа из DL
                                        
lup:    rcl bx, 1               ; крутим влево и смотрим CF
        mov dl, 30h             ; ascii = number + '0'
        adc dl, 0               ; и прибавляем с CF ascii=30h+0 или 30h+1
        int 21h                 ; вызываем int 21h, ah = 2h
        loop lup                ; крутим 16 раз
 
    pop cx          ; восстанавливаем счетчик двойных слов
    loop next_dw        ; повторяем пять раз
 
    int 20h         ; выход
 
number dt 0000123fffffffffffffeh ; число
 
end
0
6 / 6 / 0
Регистрация: 07.10.2009
Сообщений: 164
24.09.2010, 16:20  [ТС]
получается в программе выводится число такое, какое оно представленно в 16-ти ричной системе, только в десятичном виде, да?
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
24.09.2010, 16:35
Цитата Сообщение от Vita7881 Посмотреть сообщение
получается в программе выводится число такое, какое оно представленно в 16-ти ричной системе, только в десятичном виде, да?
Если честно, то я ничего не понял, но могу сказать точно - в десятичном виде тут ничего нигде не выводится
0
6 / 6 / 0
Регистрация: 07.10.2009
Сообщений: 164
24.09.2010, 16:56  [ТС]
т.е. в двоичном виде
0
 Аватар для Богдан Корниено
9 / 9 / 0
Регистрация: 24.03.2011
Сообщений: 152
15.04.2012, 20:04
В некотором виде мой код похож на выше приведенные.
Может кому поможет.

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
; Author: Kornienko Bohdan
; составить программу (для 16-ти разрядного процессора), реализующую 
; следующее заданее:
; программа преобразования двузначного шестнадцатиричного числа 
; в символьном виде в двоичное предстваление 
; ввод: с клавиатуры вводится шестнадцатиричное число из двух цифр 
; используюя функцию DOS - 07h, int 21h
; выход: результат преобразования выводится на экран, используюя
; функцию DOS - int 29h (выводит символ из al)
 
.model      small           ; модель памяти, используемая для ЕХЕ
.stack      100h            ; сегмент стека размером в 256 байт
.data
    intro   db 'Enter number: $' ; сообщение приветствия
    nline   db 10, 13, '$'  ; перевод каретки на новую строку
    num     db 2 dup(?)     ; массив с двумя числами
    crash   db 10, 13, 'Input error $' ; сообщение об ошибке
.code
 
newline macro
    lea dx, nline           ; перводим курсор на новую строку
    mov ah, 9
    int 21h
endm
 
; процедура проверяет, является ли символ в регистре al принадлжеащим
; диапазону букв и цифр, пренадлежащих 16-ричному представлению чисел
; и переводит ASCII код в цифру
check proc
    cmp al,'f'              ; вместо f будет подставлен ASCII код: 066h
    ja  errcatch            ; если код больше 066h то перейти к концу процедуры
    cmp al,'a'              ; вместо a будет подставлен ASCII код: 061h
    jae isschar             ; если код больше либо равно 061h то символ
                            ; выполняем переход на метку перевода кода в число
    
    cmp al, 'F'
    ja  errcatch
    cmp al, 'A'
    jae isuchar
 
    cmp al, '9'
    ja  errcatch
    cmp al, '0'
    jae isnum
    
    isnum:                  ; вычитание числа из кода символа, 
        sub al, 30h         ; для представления числа в программе, как число
        jmp ok
        
    isschar:
        sub al, 57h
        jmp ok
        
    isuchar:
        sub al, 37h
        jmp ok
 
    errcatch:               ; аварийное прекращение программы
        newline             ; новая строка
        lea dx, crash       ; сообщение об ошибке
        mov ah, 9
        int 21h
        jmp exit            ; перейти к метке окончания программы
    ok:                     ; процедура выполнена успешно
    ret
check endp
 
start:  
    mov ax, @data           ; сегментный адрес
    mov ds, ax              ; помещается в DS
    
    mov dx, offset intro    ; попещение приветствия в область данных
    mov ah, 9
    int 21h                 ; функция DOS "вывод строки"
    
    mov ah, 7               ; считать символ в al
    int 21h                 ; выполнение прерывания
    call check              ; проверка правильности ввода
    mov num, al             ; помещаем введенный символ в num
 
    mov ah, 7               ; считать символ в al
    int 21h                 ; выполнение прерывания
    call check              ; проверка правильности ввода
    mov num+2, al           ; помещаем введенный символ в num+2 (второй элемент массива)
    
    newline                 ; перходим на новую строку
    mov bh, num             ; Помещение первого числа в bh
    mov bl, num+2           ; помещение второго числа в bl
    shl bl, 4               ; смещение содержимого bl на 4 бита влево
                            ; это дает возможность разместить число в регистре рядом 
                            ; с первым введнным числом
    shr bx, 4               ; смещение всего содержимого регистр bx
                            ; после чего, число будет полность в регистре bl
 
    mov cx, 8               ; количество итераций сдвига
    mov ah, 2               ; ф-ция вывода симпола на экран
cnv:                        ; метка выполнение первода числа
    shl bl, 1               ; сдвиг содержимого регистра bl влево через флаг переноса
    mov dl,'0'              ; помещение ASCII-кода цифры 0 в регистр dl
    adc dl, 0               ; прибавление к ASCII-коду нуля с учетом флага переноса
    int 21h                 ; выполнение прерывания: вывод символа
    loop cnv                ; продолжение цикла - переход по метке
    
    newline                 ; перводим курсор на новую строку
    
    mov ah, 1               ; Ожидание нажатия клавиши пользователем
    int 21h
 
exit:
    mov ax, 4C00h           ; аналог: mov al, 4ch
    int 21h                 ; функция DOS "завершить программу"
end start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2012, 20:04
Помогаю со студенческими работами здесь

Даны два числа в двоичном виде
Помогите с задачкой на ассемблере. Даны два числа в двоичном виде. Первое число умножить на 4, второе разделить на 2. Результаты...

Даны два числа в двоичном виде
Помогите пожалуйста в ассемблере. Даны два числа в двоичном виде. Поменять местами 7,6,5,1- разряды первого числа с 0,2,3,4 разрядами...

Вывод десятичного числа в двоичном виде
Собственно интересно как реализовать вывод десятичного числа в двоичном виде с помощью битовой маски, последовательно проверяя каждый бит и...

Вывод числа, представленного в десятичной системе, в двоичном виде без циклов и массивов
Дано число в десятичной системе исчисления. Вывести с помощью printf() в двоичную, без циклов и массивов.

Вывод чисел в двоичном виде
камрады, добры день. есть проблема с программой, которая выводит числа в двоичном виде. например, для типов int, сhar, unsigned int...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru