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

Вывод массива на экран

21.11.2008, 20:03. Показов 24574. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет всем!
я написал программу для сортировки... проблема возникает при выводе массива на экран.
Для этого я исползовал функ.
Assembler
1
2
3
4
5
6
7
8
9
10
11
ah=02h;
int 21h;
    mov cx, n
    xor si, si
Itoq:
mov ah,02h
mov dl, a[si]
add dl, 30h
int 21h
inc si
loop itoq
Выводиться толька число от 0 до 9. а остальные символы. А мне нужна вывести на экран двухзначных чисел. Заранее блогадарю.
p.s.
Извивините за грамматические ошибки.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2008, 20:03
Ответы с готовыми решениями:

Вывод массива на экран
Проверяю числа из файла посимвольно и заношу числа в массив Mas_A.model small .stack 256 .386 .data start db...

Вывод массива на экран
Помогите дописать вывод на экран вектора Задание: Построить вектор В, элементы которого равны элементам побочной диагонали А(m,m). Код:...

Вывод массива на экран
здравствуйте. Мне нужно вывести массив на экран. Есть процедура вывода чисел и регистра AX. Работающая. пытаюсь с помощью нее вывести...

7
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
22.12.2008, 17:05
функция 02 из прерывания 21h выводит только один символ.
Если тебе надо выводить длинное число, то тебе надо написать функцию перевода из числа в строку.

Вот например такая функция:
Принимает число на AX. Результирующую строку возвращает в массив
temp DB 11 DUP(?)
который сегменте данных
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
IntToStr proc
    push cx
    push dx
    push di
    push ax
    mov cx,10
lea SI,temp
FILL_BUF_:
    mov byte ptr [si],' '
    inc si
    LOOP FILL_BUF_
    mov [si+1],'$'
    mov di,10
    or ax,ax
    jns CLR_DVD_
    neg ax
CLR_DVD_:
    xor dx,dx
    div di
    add dx,'0'
    dec si
    mov byte ptr [si],dl
    inc cx
    or ax,ax
    jnz CLR_DVD_
    
    pop ax
    or ax,ax
    jns NOMORE_
    dec si
    mov byte ptr [si],'-'
    inc cx
NOMORE_:
    pop di
    pop dx
    pop cx
    ret
IntToStr endp
А потом выводи получившуюся строку 9_ой функцией int 21h
2
edqard
30.12.2008, 17:47
Спасибо за помощь. И поздравляю вас с наступающем . И извиняюсь за опаздалые БЛАГОДАРНАСТЫ.
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
30.06.2017, 11:40
Цитата Сообщение от Otaka Посмотреть сообщение
функция 02 из прерывания 21h выводит только один символ.
Если тебе надо выводить длинное число, то тебе надо написать функцию перевода из числа в строку.
Вот например такая функция:
Принимает число на AX. Результирующую строку возвращает в массив
temp DB 11 DUP(?)
который сегменте данных
Код к компилируеться и далее зацикливаеться.
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
; multi-segment executable file template.
 
data segment
    ; add your data here!
    pkey db "press any key...$"
ends
 
stack segment
    dw   128  dup(0) 
    temp db   ?
ends
 
code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
 
    ; add your code here
            
 
 ;   call IntToStr
    
    ; wait for any key....    
  ;  mov ah, 1
 ;   int 21h
 
 
 IntToStr proc
    push cx
    push dx
    push di
    push ax
    mov cx,10
lea SI,temp
FILL_BUF_:
    mov byte ptr [si],' '
    inc si
    LOOP FILL_BUF_
    mov [si+1],'$'
    mov di,10
    or ax,ax
    jns CLR_DVD_
    neg ax
CLR_DVD_:
    xor dx,dx
    div di
    add dx,'0'
    dec si
    mov byte ptr [si],dl
    inc cx
    or ax,ax
    jnz CLR_DVD_
    
    pop ax
    or ax,ax
    jns NOMORE_
    dec si
    mov byte ptr [si],'-'
    inc cx
NOMORE_:
    pop di
    pop dx
    pop cx
    ret
IntToStr endp
 
      lea dx, temp
    mov ah, 9
   int 21h        ; output string at ds:dx
 
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends
 
end start ; set entry point and stop the assembler.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
30.06.2017, 17:59
Потому, что код из сообщения #2 без осмысления вставлен в программу.
Т.к. IntToStr - готовое изделие (законченная процедура), то её нужно располагать вне пределов тела основной программы.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
30.06.2017, 18:17
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Потому, что код из сообщения #2 без осмысления вставлен в программу.
Т.к. IntToStr - готовое изделие (законченная процедура), то её нужно располагать вне пределов тела основной программы.
А как нею пользоваться,где ее поместить и как подключить это файл.Я пользуюсь
TASM (Turbo Assembler 64-Bit)
он же подойдет или нужен Masm 6.12 geditor ?

Может под TASM есть уже готовые библиотеки с такими процедурами,ведь зачем изобретать велосипед каждый раз?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
30.06.2017, 18:26
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
; multi-segment executable file template.
 
data segment
    ; add your data here!
    pkey db "press any key...$"
ends
 
stack segment
    dw   128  dup(0) 
    temp db   ?
ends
 
code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
 
    ; add your code here
            
 
 ;   call IntToStr
    
    ; wait for any key....    
  ;  mov ah, 1
 ;   int 21h 
 
      lea dx, temp
    mov ah, 9
   int 21h        ; output string at ds:dx
 
    mov ax, 4c00h ; exit to operating system.
    int 21h
 
 
 IntToStr proc
    push cx
    push dx
    push di
    push ax
    mov cx,10
lea SI,temp
FILL_BUF_:
    mov byte ptr [si],' '
    inc si
    LOOP FILL_BUF_
    mov [si+1],'$'
    mov di,10
    or ax,ax
    jns CLR_DVD_
    neg ax
CLR_DVD_:
    xor dx,dx
    div di
    add dx,'0'
    dec si
    mov byte ptr [si],dl
    inc cx
    or ax,ax
    jnz CLR_DVD_
    
    pop ax
    or ax,ax
    jns NOMORE_
    dec si
    mov byte ptr [si],'-'
    inc cx
NOMORE_:
    pop di
    pop dx
    pop cx
    ret
IntToStr endp
 
ends
 
end start ; set entry point and stop the assembler.
Добавлено через 57 секунд
Ну и temp перенести в сегмент данных.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
30.06.2017, 20:37
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Ну и temp перенести в сегмент данных.
temp перенесли,а вот процедуру ни разу не візвали.Зачем она тогда нужна,
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2017, 20:37
Помогаю со студенческими работами здесь

Вывод массива на экран
poisk macro x, y, addr local m1, pass, exit push si cx ax lea si, addr mov ah, y; xor cx, cx; обнулить сх mov cl, ; первый...

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

Вывод получившегося массива на экран
Здравствуйте. Я взяла код к своей задаче с этого форума.(задача в том, чтобы попарно переставить местами элементы массива 0 с 1, 2 с 3 и...

Вывод строк из массива на экран
Доброго времени суток! Пишу курсовую, что-то вроде дебагера.. Не получается отобразить на экране названия регистров из массива строк. Если...

Вывод определенного элемента массива на экран
Имеется следующий код: .model small .stack 100h .data mes db 'hello_world$' .code start: mov ax,@data mov ds,ax mov...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru