Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/117: Рейтинг темы: голосов - 117, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 5
1
TASM

Строку вывести на экран посимвольно: каждый символ в отдельной строке

23.02.2011, 11:05. Просмотров 22129. Ответов 14
Метки нет (Все метки)


Заданную в программе строку вывести на экран посимвольно: каждый символ в отдельной строке. Использовать цикл
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2011, 11:05
Ответы с готовыми решениями:

Выводить строку, сокращая каждый раз на 1 символ, пока в строке не останется 1 символ
' Напишите программу, которая вводит строку и выводит её, сокращая каждый раз на 1 символ до тех...

Выводить строку, сокращая каждый раз на 1 символ, пока в строке не останется 1 символ
Необходимо написать программу, которая вводит строку и выводит её, сокращая каждый раз на 1 символ...

Выводить строку, сокращая каждый раз на 1 символ, пока в строке не останется 1 символ
Напишите программу, которая вводит и выводит ее, сокращая каждый раз на 1 символ до тех пор пока в...

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

__________________
Помогаю в написании студенческих работ здесь.
14
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
23.02.2011, 11:27 2
com-программа:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cseg segment
org 100h
start:  mov si,0
    mov cx,lnt
    mov ah,02h
ckl:    mov dl,str[si]
    int 21h
    inc si
    mov dl,13
    int 21h
    mov dl,10
    int 21h
    loop ckl
 
    int 20h
 
str db 'Привет!'
lnt=$-str
 
cseg ends
 
end start
2
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 5
23.02.2011, 21:23  [ТС] 3
блин, еще бы понять что здесь к чему(((((
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
23.02.2011, 22:13 4
Да вроде простая програмка-то, вот то же с коментами:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cseg segment
org 100h
start:  mov si,0    ;индекс(смещение) отн.str 1-го символа('П')
        mov cx,lnt  ;число символов
        mov ah,02h  ;ф-ция вывода символа на экран
ckl:    mov dl,str[si]  ;параметр этой ф-ции(текущий символ)
        int 21h     ;выводим символ
        inc si      ;в si теперь индекс след.символа
        mov dl,13   ;возврат каретки
        int 21h
        mov dl,10   ;перевод строки
        int 21h
        loop ckl    ;выполнить цикл cx раз
 
        int 20h     ;выход из программы
 
str db 'Привет!'  ;выводимая строка
lnt=$-str       ;ее длина в байтах
 
cseg ends
 
end start
3
Ушел с форума
Автор FAQ
14176 / 7060 / 831
Регистрация: 11.11.2010
Сообщений: 12,669
24.02.2011, 07:15 5
Ant1971on, можно еще проще!
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.model tiny
.code
.286
org 100h
start:  mov ax,3
    int 10h; стираем с экрана и устанавливаем режим 80х25
    push 0B800h
    pop es; в ES адрес текстового видеобуфера
    xor di,di; левый верхний угол экрана
    mov ah,0Fh; атрибут надписи - черный фон, белые буквы
    mov si,offset msg; начало надписи
    mov cx,lng; количество букв
@@: lodsb; читаем символ
    stosw; выводим символ на экран
    add di,158; переходим на следующую строку 80*2-2=158
    loop @b
    mov ah,0; ждем пока не нажмут на клавиатуру
    int 16h
    ret; выходим из программы
msg db "Привет!"
lng = $-msg
end start
3
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.02.2011, 10:45 6
Mikl___, интересный вариант, спасибо. Насчет же простоты не соглашусь, автор темы и в моей-то проге не смог разобраться, где работает только функция 02h, а тут и смена режима,запись в видеобуфер, страшные lodsb со stosw.
0
4076 / 1791 / 210
Регистрация: 06.10.2010
Сообщений: 4,001
24.02.2011, 16:53 7
Ещё так можно
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.model tiny
.code
.286
org 100h
start:mov  ax,3
      int  10h                 ;стираем с экрана и устанавливаем режим 80х25
      push 0B800h
      pop  es                  ;в ES адрес текстового видеобуфера
      mov  di,160*(lng-1)      ;di - начало строки под номером lng
      mov  si,offset msg+lng-1 ;последний символ надписи
      std                      ;устанавливаем df - будем выводить в обратном направлении
      @@:movsb                 ;выводим символ на экран
         sub di,159            ;переходим на предыдующую строку
      jnl @b
      int 16h
ret                            ;выходим из программы
msg db "Привет!"
lng = $-msg
end start
1
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 5
24.02.2011, 21:25  [ТС] 8
ant1971on, при использовании вашего кода
выдает ошибку, мож я что то не так делаю???(((( блин ассемблер вижу моно сказать 2 раз в жизни... копирую текст в блокнот, ничего не исправляю, а прога не работает, мож еще какой секрет есть????
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.02.2011, 22:13 9
Значит компилируете неправильно, возможно, как .exe, а надо как .com . Вот здесь тема, как компилировать.
2
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 5
24.02.2011, 22:18  [ТС] 10
а если нужно как exe? то как быть???
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
24.02.2011, 22:35 11
Тогда нужно немного изменить код:
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
cseg segment
assume cs:cseg,ds:dseg
start:  mov ax,dseg
    mov ds,ax
    mov si,0        ;индекс(смещение) отн.str 1-го символа('П')
        mov cx,lnt      ;число символов
        mov ah,02h      ;ф-ция вывода символа на экран
ckl:    mov dl,str[si]  ;параметр этой ф-ции(текущий символ)
        int 21h         ;выводим символ
        inc si          ;в si теперь индекс след.символа
        mov dl,13       ;возврат каретки
        int 21h
        mov dl,10       ;перевод строки
        int 21h
        loop ckl        ;выполнить цикл cx раз
 
        mov ax,4c00h
    int 21h
 
cseg ends
 
dseg segment
 
str db 'Привет!'        ;выводимая строка
lnt=$-str               ;ее длина в байтах
 
dseg ends
 
sseg segment stack
 
db 256 dup(0)
 
sseg ends
 
end start
1
Ушел с форума
Автор FAQ
14176 / 7060 / 831
Регистрация: 11.11.2010
Сообщений: 12,669
25.02.2011, 06:08 12
Цитата Сообщение от оксевма
а если нужно как exe? то как быть???
, то об этом нужно писать в первом посте, если нужно ехе, то по готовой работающей программе и переделай, инфантилизм полнейший, нужна программа -- на!, а к ней комментарий -- на!, а это совсем не то, что я просила -- делай сама!

Ant1971on
не факт, что это именно то, что нужно ТС (упрощенная сегментация, синтаксис АТ и т.д. "и вообще этот диалект ассемблера мы не проходили")
0
0 / 0 / 0
Регистрация: 23.02.2011
Сообщений: 5
25.02.2011, 09:33  [ТС] 13
ну неужели никто не знает ответа????((((((((((((( или знает, но скрывает((((((((((((((
0
Ушел с форума
Автор FAQ
14176 / 7060 / 831
Регистрация: 11.11.2010
Сообщений: 12,669
25.02.2011, 09:47 14
оксевма, ответа на что? Вопроса не вижу и думаю, что не только я один
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
25.02.2011, 13:20 15
Цитата Сообщение от оксевма Посмотреть сообщение
ну неужели никто не знает ответа????((((((((((((( или знает, но скрывает((((((((((((((
Пожалуй Mikl__ угадал насчет смайлика с косичками, тогда сдаюсь...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2011, 13:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Выводить строку, сокращая каждый раз на 1 символ до тех пор, пока в строке не останется 1 символ
Тема: Строки.Множества. 3.1. Напишите программу, которая вводит строку и выводит ее, сокращая...

Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ до тех пор пока в строке не останется 1 символ
Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ до тех пор...

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

Ввести с клавиатуры строку. Вывести каждое слово в отдельной строке.
ввести с клавиатуры строку,состоящую из нескольких слов.Вывести каждое слово на экран в отдельной...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.