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

Вывод десятичного числа из регистра на экран

20.01.2013, 01:17. Показов 27089. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Трабла такая - после определенных операций (не суть важно каких) в регистре АL содержится число 62 в ДЕСЯТИЧНОМ формате. И вывести его на экран никак не получается. Либо 98 выводит (=62 в шестнарике), либо ASCII-символ с кодом 62....

Если есть какие то алг-мы вывода ДЕСЯТИЧНОГО числа из регистра, подскажите плз... Ибо бьюсь уже долго с этим...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2013, 01:17
Ответы с готовыми решениями:

Вывод числа на экран из регистра.
Доброго времени суток. Подскажите,пожалуйста,как можно число,записанное например в регистр ax в десятичном виде, вывести на экран консоли?

Вывод регистра ax на экран
Здраствуйте. Помогите пожалуйста с задачей по асемблеру в TASM. Написать программу, которая выполняет следующие действия: - открыть...

Вывод содержимого регистра AL на экран?
Как можно сделать? Добавлено через 50 минут TITLE SPO_PROJECT (COM) .MODEL SMALL .CODE CODESG SEGMENT PARA 'CODE' ASSUME...

18
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
20.01.2013, 01:32
На экране должно быть 62?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.01.2013, 01:39
Цитата Сообщение от Romantiqqq Посмотреть сообщение
в регистре АL содержится число 62 в ДЕСЯТИЧНОМ формате.
с каких это пор данные в регистре в десятичном формате?
только шестнадцатеричный( на самом деле двоичный других железо не понимает)
Цитата Сообщение от Romantiqqq Посмотреть сообщение
Если есть какие то алг-мы вывода ДЕСЯТИЧНОГО числа из регистра,
в чем работаешь (ДОС Виндос)?
самый простой алгоритм
запоминаем число
сдвигаем на 4 разряда вправо
получаем 6 выводим её
вспоминаем число(после сдвига оно испортилось)
маску на 4 младших разряда
получаем 2 выводим её
0
 Аватар для bomzzz
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 21
20.01.2013, 01:48
алгоритм простой, переводишь двоичное число содержащееся в регистре или ячейки памяти в строку символов отражающее его содержимое в десятичном формате и выводишь на экран.

алгоритм простой реализован в сотнях примеров. делишь число на 10, остаток от деления это единицы, прибавляешь к значению 30h - получаешь асци символ этого числа. потом делишь результат деления опять на 10 - получаешь десятки .... и так пока ноль не получится
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
20.01.2013, 01:53
Может так
Assembler
1
2
3
4
    xor ah,ah
    ror ax,4
    shr ah,4
    or ax,3030h

Не по теме:

bomz, так и ходим bomzzzом?

0
 Аватар для bomzzz
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 21
20.01.2013, 01:56
есть еще моднячее быстрое деление на 10 используется. особенно на старых процессорах деление жрет кучу тактов процессора, а так оно быстрее гораздо.

пока не пускает под старым аккаунтом вот сижу жду когда пустит
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.01.2013, 02:39
Цитата Сообщение от bomzzz Посмотреть сообщение
есть еще моднячее быстрое деление на 10 используется.
ты имеешь ввиду
aam;?
я тут недавно про него писал
https://www.cyberforum.ru/post3961199.html

https://www.cyberforum.ru/post3961829.html
но я так понял ТС десятичные то уже выводит
Цитата Сообщение от Romantiqqq Посмотреть сообщение
Либо 98 выводит (=62 в шестнарике)
ему шеснадцетеричный надо бы вывести

Добавлено через 5 минут
AFP,
ну и посмотри что будет
Assembler
1
2
3
xor ah,ah  ;ax=0062;
   ror ax,4 ;ax=2006
    shr ah,4; ax=0206
цифры то местами поменял
или ты этого и хотел?
0
 Аватар для bomzzz
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 21
20.01.2013, 02:53
я имел ввиду что есть быстрый алгоритм для деления на 10 (а может перепутал для умножения)
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.01.2013, 02:57
Цитата Сообщение от bomzzz Посмотреть сообщение
я имел ввиду что есть быстрый алгоритм для деления на 10
ну а я про что?
AAM
Данная команда просто делит содержимое AL на 10 и помещает частное в AH, а остаток — в AL. Таким образом в AX помещается двухразрядное неупакованное BCD. Стандартная версия команды не имеет операндов, однако существует расширенная версия AAM, в которой в роли операнда выступает непосредственное значение — база, на которую будет производиться деление. Так что, выполнив, к примеру, команду AAM 5, вы поделите нацело содержимое AL, получив частное в AH, а остаток — в AL. Очень удобный способ для деления нацело небольших (до 8 бит) чисел.
0
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
20.01.2013, 03:01
вот. Вместо тысячи слов

Добавлено через 55 секунд

Не по теме:

Romantiqqq, Земляк!!!:)

1
 Аватар для bomzzz
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 21
20.01.2013, 03:10
я не знал про эту команду, возможно она появилась недавно.

да это умножение, я перепутал
mov bx, ax ; скопировать исходное число
shl ax, 1 ; * 2
shl ax, 1 ; * 4
add ax, bx
shl ax, 1 ; * 10
http://www.codenet.ru/progr/optimize/asm_opt2.php

на моем пентиуме 4 нортвуд на умножение уходит 150 тактов если не путаю

Добавлено через 8 минут
.386

.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib

.data
mestitle db "Bomz",0
form db "EAX: %u %u", 0


.data?
buffer db 512 dup(?)

.code
start:
mov eax, 100
aam
xor ebx,ebx
mov bl, al
shr eax, 8
invoke wsprintf,ADDR buffer,ADDR form,eax,ebx
invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_ICONASTERISK
invoke ExitProcess,0
end start
прикольно. эта команда уже на 386 была
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.01.2013, 03:14
Цитата Сообщение от bomzzz Посмотреть сообщение
я не знал про эту команду, возможно она появилась недавно.
да вроде с 8086

Цитата Сообщение от bomzzz Посмотреть сообщение
shl ax, 1 ; * 2
shl ax, 1 ; * 4
а что сразу на 2 не сдвинул?
Цитата Сообщение от bomzzz Посмотреть сообщение
пентиуме 4
для них уже покруче алгоритмы побочное действие lea
Assembler
1
2
lea eax,[ebx+ebx*4] ;*5
add eax,eax ;*10
0
 Аватар для bomzzz
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 21
20.01.2013, 03:17
ты знаешь я с этим LEA несколько дней бился, там надо как то попасть в волну , реального быстродействия так и не добился
0
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 18
20.01.2013, 15:46  [ТС]
Цитата Сообщение от AFP Посмотреть сообщение
На экране должно быть 62?
Да, должен вывести 62.

Добавлено через 10 минут
В дополнение - прога вычисляет сумму упакованных BCD чисел 17 и 45, итог после преобразования DAA как раз и получается нужный - в AL хранится 62. Пробовал ваши алгоритмы предложенные, выводит всё что угодно кроме 62
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
20.01.2013, 15:51
Assembler
1
2
3
4
5
6
7
;al = 62h BCD
aam ; ah=6, al=2
or ax, 3030h ;ax=3632h '62'
xchg ah,al ;ax=3236 '26'
int 29h
xchg ah,al
int 29h
2
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 18
20.01.2013, 15:57  [ТС]
Charles Kludge, выводит 98


Цитата Сообщение от Charles Kludge Посмотреть сообщение
1
;al = 62 BCD
aam ; ah=6, al=2 тут как раз и получается в ah=9, al=8
or ax, 3030h ;ax=3632h '62'
xchg ah,al ;ax=3236 '26'
int 29h
xchg ah,al
int 29h
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
20.01.2013, 16:05
Пардон, туплю. Можете просто указать AAM основание: AAM 16 или вотЪ:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
; Труппоасм не понимает AAM c основанием счисления - пишем макро
.aam    macro   power
    db  0D4h, power
    endm
: если у вас масм, уберите точку перед aam
cvt:    .aam     16              ; al / 16 -> ah - десятки, al - единицы
    or  ax, 3030h       ; преобразуем в символы ASCII
    xchg    al, ah      ; меняем местами 
    call    @0              ; десятки  выводим первыми
    xchg    al, ah          ; а потом единицы
@0: cmp al, 39h         ; если код символа 
    jbe @1              ; больше '9'?
    add al, 7           ; то корректируем его до 'A'-'F'
@1: int 29h         ; выводим на экран
    ret
1
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 18
20.01.2013, 16:20  [ТС]
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Пардон, туплю. Можете просто указать AAM основание: AAM 16

Огромное спасибоС, помогло))
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
20.01.2013, 16:49
Можно и так:
Assembler
1
2
3
4
5
6
7
8
;    mov al,62h
    xor ah,ah
    ror ax,4
    shr ah,4
    or ax,3030h
    int 29h
    mov al,ah
    int 29h
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.01.2013, 16:49
Помогаю со студенческими работами здесь

Вывод значения регистра на экран
Помогите пожалуйста разобраться с программой которая выводит значение(десятичное) регистра ax на экран. aam add ax,3030h mov...

[MASM] Вывод значения переменной (или содержимого регистра) на экран
Здравствуйте! По очень простому вопросу никак не могу найти ответ. Например пара фрагментов: mov al, 5 add al, 3 mov ah, 9h ...

Ввод десятичного числа в диапазоне 0-255 и вывод его значения в двоичной системе
Напишите программу плз. Ввод десятичного числа в диапазоне 0-255 и вывод его значения в двоичной системе.

Ввод десятичного числа в диапазоне 0-255 и вывод его значения в двоичной системе.
Ввод десятичного числа в диапазоне 0-255 и вывод его значения в двоичной системе.

Вывод содержимого регистра на экран в Windows x64
ДОСовское int 21h не работает, потому что винда не поддерживает 16-битные приложения. Есть ли подобная функция под x64?


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru