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

Добавление пробелов между символами

20.12.2015, 23:52. Показов 6003. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Недавно начал изучать асемблер, но вот задача: считать строку с файла(input.txt), расставить между символами по 1 пробелу, и записать полученное в другой файл(output.txt).
Я не совсем понимаю как происходит формирование строки, то есть мы считати строку с файла допустим так:
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
_f      macro   f
        mov     ah,f
        int     21h
        endm
 
vvod        proc                        ; Ввод записи
        push    bp
        mov bp,sp
        push    ax
        push    bx
        push    cx
        push    dx
            mov     bx,4[bp]            ; N входного файла
            mov cx,6[bp]            ; К-во вводимых байтов max
            mov     dx,8[bp]            ; Адрес входного буфера
            _f  3Fh                 ; Факт. к-во введ-х байтов -> ax
        mov     10[bp], ax      ; Параметр - факт. к-во введ-х байтов в стек
        pop dx
        pop cx
        pop bx
        pop     ax
        pop bp
            ret  6                          
vvod        endp
Потом вообще не понятно как создать новую строку, заполнить ее и выдать в новый файл!
Помогите пожалуйста! Я по c# всем помогал, теперь мне нужна помощь по асемблеру)

Добавлено через 47 минут
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
;------------------------------------------------------------------------------------
;       Задача. Подсчитать максимальную длину слова входного 
; текста. Слово - это последовательность символов, отличных от
; пробела. Длина текста и слова не более 80 символов.
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
;                      Макроопределения
;       Вызов функции DOS,  вызывается функция с номером f.
;       Внимание! Изменяется содержимое регистра ah.
_f      macro   f
        mov     ah,f
        int     21h
        endm
 
;--------------------------------------------------------------------------
;                   Вывод текста на экран
;   Текст  находится  в памяти  по  адресу  adr  и завершается символом "$".
_puts   macro   adr_str
        push    ax
        push    dx
        lea      dx, adr_str
        _f       9
        pop     dx
        pop     ax
        endm
;------------------------------------------------------------------------
        assume  cs:code, ds:data    ; назначение регистров 
                                    ; сегмента команд и сегмента данных
;------------------------------------------------------------------------
; Сегмент данных
data    segment para public 'data'
soob1       db      13,10,'Error open input file',13,10,'$'
soob2       db      13,10,'Error create output file',13,10,'$'
soob3       db      13,10,'Error read file',13,10,'$'
soob4       db      13,10,'Error write file',13,10,'$'
soob5   db      13,10,'Error close input file',13,10,'$'
soob6       db      13,10,'Error close output file',13,10,'$'
name_in db  'input.txt',0
name_out    db  'output.txt',0
nom_in  dw  ?
nom_out dw  ?
in_buf  db  80 dup(?)
out_buf db  'Max dlina slova = '
maxdl       db  62 dup( ' ')
data        ends
;-------------------------------------------------------------
; Сегмент кода
code        segment para public 'code'
main        proc
            mov ax,data             ; инициализация pегистpа
        mov ds,ax               ; сегмента данных
b1:         lea dx,name_in          ; Открытие входного файла
            mov al,0                    
            _f  3Dh                     
            jnc b2                  ; Файл открылся
            _puts   soob1               ; Файл не открылся
            jmp v                   
b2:         mov nom_in,ax           ; N вх.файла
            lea dx, name_out            ; Открытие выходного файла
            mov al,1                    
            _f  3Dh                 
            jnc b3                  ; Файл открылся
            lea dx,name_out         ; Создание выходного файла
         mov    cx,0                
            _f  3Ch                 
            jnc b3                  ; Создание успешное
            _puts   soob2               ; Файл не создался
            jmp v2                  
b3:         mov nom_out,ax          ; N вых.файла
        xor ax,ax
        push    ax          ; выходной параметр - к-во введ-х байтов в стек
            call    vvod                ; Ввод записи
            jnc b4                  ; Ввод успешный
            _puts   soob3               ; Файл не читается
            jmp v1                  
b4:         ;pop    ax          ; результат - к-во введ-х байтов в ах
        ;push   ax          ; входной параметр - к-во введ-х байтов
        lea dx,maxdl        ; входной параметр – адрес результата
        push    dx
call    obrab               ; Обработка данных
            call    vivod               ; Вывод записи
            jnc v1                  ; Вывод успешный
            _puts   soob4               ; Файл не записывается
v1:     mov bx,nom_out          ; Закрытие выходного файла
            _f  3Eh                 
            jnc v2                  ; Закрытие успешное
            _puts   soob6               ; Файл не закрылся
v2:     mov bx,nom_in               ; Закрытие входного файла
            _f  3Eh                 
            jnc v
            _puts   soob5               ; Файл не закрылся
v:
            _f  4Ch                 ; Выход в DOS
main        endp
 
vvod        proc                        ; Ввод записи
        push    bp
        mov bp,sp
        push    ax
Вот этот код пытаюсь изменить!

Кто-нибудь шарит в этих регистрах адресах и командах вообще? Чуваки, помогите разобраться!

Добавлено через 38 секунд
ЧУВАКИИИ! ! !! !

Добавлено через 21 секунду
Ну кто-нибудь! Лайк поставлю!!!111

Добавлено через 3 минуты
Ну хотя-бы скажите как вывести 1 символ в файл! Емае, че с этим асемблером не так? Кто-нибудь его понимает?
Тут 2 программиста сидят не могут вывести 1 сран**й символ в файл!
ААААА А А А А А А ! ! ! ! ! ! ! !

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

АСЕМБЛЕР СВОДИМ МЕНЯ С УМААА!!!!! Ч У В А КИ И И ИИ ИИ И И

Добавлено через 58 секунд
Кто хочет кока-колу?
Может немного спайса?? ч/

Добавлено через 45 секунд
ТАРАКАААНЫЫЫЫ!!!!!

Добавлено через 1 час 37 минут
Я понял что нужно создать 2ую строку, и при посимвольном обходе первой нужно добавлять текущий символ во 2ую строку и после него пробел. Но как это сделать? Как динамически заполнять строку?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2015, 23:52
Ответы с готовыми решениями:

Добавить пробелы между символами
Добрый вечер уважаемые! У меня есть такая задача: добавить пробелы между всеми символами. Времени не так много осталось до сдачи, а вот к...

Поставить пробелы между символами в массиве
поставить пробелами между символами в массиве masm model small stack 256 .data mes1 db 0ah,0dh,'ishodniy massiv-$',0ah,0dh mes2...

Из текста надо убрать часть между символами /* и */
Короче так,из текста надо убрать часть между символами /* и*/,не мог решать,помогите до завтра надо! Добавлено через 1 минуту и...

1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
21.12.2015, 15:19
Смотрите код:
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
model   small
.data
szMax   equ 100
dbInpFN db  'input.txt',0
dbOutFN db  'output.txt',0
hndl    dw  ?
cSize   dw  ?
dbInp   db  szMax dup(?)
dbOut   db  2*szMax dup(?)
.stack  100h
.code
begin:
;настраиваем сегменты
    mov ax,@data
    mov ds,ax
    mov es,ax
;открываем файл для чтения
    mov ax,3d30h
    lea dx,dbInpFN
    int 21h
    mov hndl,ax
;читаем данные
    mov ah,3fh
    mov bx,hndl
    mov cx,szMax
    lea dx,dbInp
    int 21h
    mov cSize,ax
;закрываем файл
    mov ah,3eh
    mov bx,hndl
    int 21h
;
;готовимся к форматированию строки
    lea si,dbInp
    lea di,dbOut
    mov cx,cSize
    cld
    mov ah,' '
;в цикле форматируем строку
@@01:   lodsb
    stosw
    loop    @@01
;
;открываем файл для записи
    mov ah,3ch
    xor cx,cx
    lea dx,dbOutFN
    int 21h
    mov hndl,ax
;записываем данные
    mov ah,40h
    mov bx,hndl
    mov cx,cSize
    shl cx,1
    lea dx,dbOut
    int 21h
;закрываем файл
    mov ah,3eh
    mov bx,hndl
    int 21h
;выход
    mov ax,4c00h
    int 21h
end begin
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2015, 15:19
Помогаю со студенческими работами здесь

Выделить из строки, введенной с клавиатуры, десятичные числа, заключенные между символами |
Выделить из строки, введенной с клавиатуры, десятичные числа, заключенные между символами |. Найти сумму найденных чисел. Результат...

Удалить в тексте лишние пробелы, оставив между словами не больше двух пробелов
Есть строка str1 (в строке предложение и между словами может быть от 0 до n пробелов). Как сделать так чтобы переписать строку str1 в str2...

Как сделать, что бы при выводе между минусом и числом не было пробелов
подскажите, пожалуйста, как сделать, что бы при выводе между минусом и числом не было пробелов? программа вычисляет выражение, переводит...

Текстовый редактор. Автоматическая вставка пробелов между символами
Всем привет! Народ подскажите какой нибудь редактор или среду которая подсвечивает ошибки в коде, делает авто дополнение и что самое...

Вставить между символами строки такое количество пробелов, чтобы ее длина стала равна Q
Дана строка из N символов разделенных пробелами. Строка имеет длину Z. С клавиатуры задается ее новая длина Q. Вставить между символами...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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