Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 26.10.2013
Сообщений: 5

Преобразование 32-битного числа из dx:ax в строку

26.10.2013, 17:29. Показов 2587. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу калькулятор (операция с двумя 4-значными числами со знаком) на ассемблере с 16-битными регистрами. Дошел до умножения. умножаю 9999*9999, получаю результат в dx:ax. Подскажите пожалуйста, как это число преобразовать в строку для записи в массив? Перерыл весь инет...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.10.2013, 17:29
Ответы с готовыми решениями:

Преобразование 64-битного числа в число с плавающей точкой
Доброго всем времени суток! Суть вопроса: Не могу придумать алгоритм преобразования 64-битного числа (последовательность из 8-ми байт)...

Перевод 32 битного числа в строку
Помогите процедуркой, если у кого есть. Или помогите перевести вот этот код http://forum.sources.ru/index.php?showtopic=207332 на...

Преобразование 32-битного целочисленного представления айпи-адреса в строковое
Источник: http://company.yandex.ru/job/vacancies/dev_desktop.xml (3-ий вопрос). Моё решение на общелиспе: (defun format-ip (uint32) ...

6
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
26.10.2013, 17:55
MrDimonG,
используй сопроцессор
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
; masm dos com #
.model tiny                     
.code
.486
org 100h
start:  mov ax,9999
    mul ax; dx:ax=99980001=5F592E1
    mov word ptr mem,ax
    mov word ptr mem+2,dx
    finit
    fild mem
    fbstp temp
    mov di,offset string
        mov ecx,9       ;в десятом байте информация о знаке числа
b0:     cmp byte ptr [ecx-1+temp],0
        jnz b1
        loop b0         ;пропускаем незначащие (нулевые) разряды слева
b1:     mov al,byte ptr [ecx-1+temp];загружаем первую значащую пару разрядов
        cmp al,9        ;если в старшей тетраде 0 - пропустить старшую тетраду
        ja b2
        add al,30h      ;младшую тетраду переводим в ASCII
        stosb
        dec ecx
        jz b3
b2:     movzx ax,byte ptr [ecx-1+temp];распаковываем остальные разряды числа
        ror ax,4        ;выделяем старшую и младшую тетрады
        shr ah,4
        add ax,'00'     ;переводим в ASCII-код
        stosw
        loop b2
b3:     mov dx,offset string
    mov ah,9
    int 21h
    mov ah,0
    int 16h
    ret
mem dd ?
temp dt ?
string db 20 dup('$')
end start
0
1 / 1 / 0
Регистрация: 26.10.2013
Сообщений: 5
26.10.2013, 18:43  [ТС]
Mikl___, спасибо за быстрый ответ, но на моем Emu8086 не работает... такие ошибки...
Assembler
1
2
3
4
5
(10) illegal instruction: finit or wrong parameters.
(11) illegal instruction: fild mem or wrong parameters.
(12) illegal instruction: fbstp temp or wrong parameters.
(14) wrong parameters: MOV  ecx,9
(14) probably it's an undefined var: ecx
Может Вы знаете какой-нибудь способ, как разделить такое число на 10 и узнать остаток? Или идея как реализовать вишепредложенный алгоритм более простым способом...
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
26.10.2013, 18:58
MrDimonG,
начни делить в столбик на листочке и поймешь идею, каждый свой шаг проверяй на калькуляторе и в отладчике
и переходи с Emu8086 на нормальный компилятор, этот Emu8086 половины команд не знает
1
1 / 1 / 0
Регистрация: 26.10.2013
Сообщений: 5
26.10.2013, 22:51  [ТС]
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
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
org 100h
 
mov ax,8888
mov bx,9999
 
imul bx
 
mov bufax,ax
mov bufdx,dx
 
mov cx,2
mov si,13
again:
xor bx,bx
xor ax,ax
xor dx,dx
mov cx,2
del:
   mov bh,byte ptr bufdx[1]
part1:
   shr bx,4
   shr bl,4
   shr ax,4
   add al,bh
   div C10
   shl dx,4
   add dl,al
   shr ax,4
   add al,bl
   div C10
   shl dx,4
   add dl,al
   xor bx,bx
   
   mov bh,byte ptr bufdx  
   loop part1 
   
   mov cx,2
   
   mov bufdx,dx
   
   mov bh,byte ptr bufax[1]
part2:
   shr bx,4
   shr bl,4
   shr ax,4
   add al,bh
   div C10
   shl dx,4
   add dl,al
   shr ax,4
   add al,bl
   div C10
   shl dx,4
   add dl,al
   xor bx,bx
   
   mov bh,byte ptr bufax  
   loop part2
       
   mov bufax,dx
   
    add ah, '0'
    mov ANS[si],ah
    dec si
    
     
    cmp si, 0 
    jne again
    
    mov ax, 03 ;показать массив
    int 10h    
    lea dx, ANS[si+1]
    mov ah,9    
    int 21h 
    mov  ah,2
    mov  bh,0
    mov  dh,1
    mov  dl,0   
    int  10h
 
 
ANS db 8 dup(0),'$'
 
 
bufax dw 0
bufdx dw 0
 
C10 db 0Ah
 
ret
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
27.10.2013, 05:05
MrDimonG,
для тех, кто предпочитает садомазо секс с emu8086
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
; masm dos com #
.model tiny                     
.code
.486
org 100h
start:  mov ax,9999
    mul ax; dx:ax=99980001=5F592E1
    mov word ptr mem,ax
    mov word ptr mem+2,dx
    db 9Bh,0DBh,0E3h    ;finit
    dw 6DBh,mem     ;fild mem
    dw 36DFh,temp   ;fbstp temp
    mov di,offset string
    mov dx,di
    mov bx,8        ;в девятом байте информация о знаке числа
b0: cmp byte ptr [bx+temp],0
    jnz b1
    dec bx
    jns b0          ;пропускаем незначащие (нулевые) разряды слева
b1: mov al,byte ptr [bx+temp];загружаем первую значащую пару разрядов
    cmp al,9            ;если в старшей тетраде 0 - пропустить старшую тетраду
    ja b3
    add al,'0'          ;младшую тетраду переводим в ASCII
    stosb
    dec bx
    jns b4
b2: mov al,byte ptr [bx+temp];распаковываем остальные разряды числа
b3: mov ah,'3'
    ror ax,4            ;выделяем старшую и младшую тетрады
    ror ah,4            ;переводим в ASCII-код
    stosw
    dec bx
    jns b2
b4: mov ah,9
    int 21h
    mov ah,0
    int 16h
    ret
mem dd ?
temp dt ?
string db 20 dup('$')
end start
1
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
28.10.2013, 17:25
а к чему сопроц юзать? есть же готовые процедурины для вывода числа. можно подшаманить в процедуры преобразования числа в строку и заделать так:
Assembler
1
2
3
4
5
6
push dx
push str
call int2str
push ax
push str+хер_знает_сколько
call int2str
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2013, 17:25
Помогаю со студенческими работами здесь

Преобразование числа в строку
Как преобразовать строку char *s, в которой записано число(возможно со знаком минус), в формат типа long 1) в строке десятичное число ...

Преобразование числа в строку
Доброго времени суток! 3 года писал на VB 6 и C\C++, вчера дали задание: написать прогу на асме - :cry: а \ его не изучал. Помогите...

Преобразование числа в строку
Всем привет. Имеется следующая функция void LiquidCrystal_I2C_PrintString(char *str){ uint8_t i=0; while(str) { ...

Преобразование числа в строку
Здравствуйте! Кто может мне помочь? У меня нет времени изобретать велосипед. Может у кого-нибудь уже есть скрипт...

Преобразование числа в строку
Дано число, надо преобразовать число в строку, выведя в ней ascii код каждой цифры, например, число 123 результат 495051 (т.к. 0 -...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru