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

Посимвольный вывод

18.05.2016, 00:53. Показов 3740. Ответов 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
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
100
101
102
103
104
.model small    
 
.stack 100h 
 
.data       
    s  db 80, ?, 81 dup (?)     
    r  db 81 dup (?)        ;Адрес строки результата
    
    m1 db 'vvedite:', 13, 10, '$'
    m2 db 13, 10, 13, 10, 'Result:', 13, 10, '$'
    m3 db 13, 10, 13, 10, 'nazhmite knopku ...$'
 
.code       
Start:      
    mov ax, @data       
    mov ds, ax      
    mov es, ax      
 
    lea dx, m1      
    mov ah, 09      
    int 21h         
    lea dx, s       
    mov ah, 0ah     
    int 21h
    
    lea si, s+2     ; т.к с 3 байта начинаются символы
    lea di, r       
    xor ch, ch      
    mov cl, s+1     ; Помещаем длину введеной строки
    call SetMinWord     
 
    lea dx, m2      
    mov ah, 09      
    int 21h
    lea dx, r       
    mov ah, 09
    int 21h
    
    lea dx, m3      
    mov ah, 09      
    int 21h
    mov ah, 08      
    int 21h
 
    mov ax, 4c00h       
    int 21h
 
;------------------------------------------------------------------
; Подпрограмма поиска слова наименьшей длины и
; укорачивания всех остальных
; Адреса:
;   si-адрес начала исходной строки
;   di-адрес начала строки-результата
;   
;
SetMinWord proc
    mov ah, cl      ; ah - начальная длина строки
    jcxz EXIT       
    cld         
    push cx         
    push si
    push di
 
    mov di, si       
    mov al, 32      
PERVAYA:
    repnz scasb     
                
    pushf           
    mov bx, di      ; вычисляем длину слова
    jne TRETYA          
    dec bx          
TRETYA:
    sub bx, si      
    cmp bl, ah      ; сравниваем длину строки и минимальное слово
    jnc CHETVERTAYA         
    mov ah, bl      
CHETVERTAYA:    
    mov si, di      
    popf            
    je PERVAYA          
                
    pop di          
    pop si          
    pop cx
VTORAYA:    
    push cx         
    mov cl, ah      
    rep movsb       
    pop cx          
    sub cl, ah      
    jz EXIT         
    xchg si, di     ; обмен si и di (т.к. для поиска исполуется es:di)
    repnz scasb     
    xchg si, di     
    jnz EXIT        ;пробела нету
    stosb           ; иначе записываем пробел в строку результата
    jmp VTORAYA     ; переход к адресу smB2 для копирования след. слова
EXIT:
    mov byte ptr [di], '$'  
    ret         
endp
 
end Start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2016, 00:53
Ответы с готовыми решениями:

Посимвольный вывод
Как объединить результаты стандартных GetComputerName, GetCurrentDirectory, GetSystemDirectory и т.д. в одну строку и вывести её...

Посимвольный вывод строки
Есть массив-строка. Введенная по Enter.Надо его распечатать. ниже проц посимвольной печати в предположении что последн элем массива код...

Посимвольный разбор введенной строки
В ASM ассемблере вводится набор цифр, 56743356 к примеру, как разбить ввод на отдельные цифры?

19
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 06:05
Цитата Сообщение от lacker Посмотреть сообщение
как это обойти?
..выводить на экран не функцией 09h, а к примеру 40h (с дескриптором 1) или INT-29h, или иными способами. Для 9-ой функции доллар - это маркер конца строки
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 07:26  [ТС]
Либо я делаю что-то не так либо я еще туповат,но у меня все ровно выводится пустота,нам препод говорил что можно вроде как-то через цикл сделать там тип всего 8 строчек но я его вообще не понял.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 07:38
lacker, со-строки(32):
Assembler
1
2
3
4
5
6
7
8
9
    lea  dx,m2
    mov  ah,9
    int  21h
 
    mov  cx,длина строки
    mov  si,r
@1: lodsb
    int  29h
    loop @1
Вообще задание какое? Огласи полностью..
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 08:16  [ТС]
Дано предложение, состоящее из нескольких слов, разделенных пробелом. Реализуйте подпрограмму, которая находит слово наименьшей длины и укорачивает все остальные, отбрасывая лишние символы.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 08:35
Цитата Сообщение от lacker Посмотреть сообщение
и укорачивает все остальные, отбрасывая лишние символы
И как ты себе это представляешь? Вырезать наименьшее слово и сместить правую часть, что-ли?
Какой задашь вопрос, такой получишь и ответ..
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 08:40  [ТС]
Я немного не понял вашего сообщения, условие не менял какое препод дал такое и осталось,прога работает но вот долбаный символ конца строки мне все испортил.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 08:47
..у тебя проблема при вводе или выводе?
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 08:53  [ТС]
Да, тобишь препод такой ввел сразу доллар в начале и все конец программе, оно вывело пустую строку. Или такой вводит предложение и посередине ставит доллар и прога до доллара читает и все конец.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 10:37
lacker, не пойму... Суть задачи такая?
Миниатюры
Посимвольный вывод  
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 14:20  [ТС]
Не, вот смотри у тебя самое короткое слово получилось 123 значит и все слова укорачиваются до 3 сиволов.

Добавлено через 2 минуты
Т.е надо чтобы прога пропускала этот долбаный доллар и не считала его концом строки
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 14:48
..а-а, очередная задачка для юных чикатило.
Для авторов таких задач в дурдоме спец-отделение

Цитата Сообщение от lacker Посмотреть сообщение
чтобы прога пропускала этот долбаный доллар
Сказал-же тебе, выводи строку на экран прерыванием INT-29h, а не как ты выводишь через AH,09h: INT-21h
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 16:02  [ТС]
Вот у меня есть такой код но я не знаю куда его воткнуть
Assembler
1
2
3
4
5
6
7
8
9
10
lea bx, buff 
inc bx 
xor cx, cx 
mov cl, [bx] 
out: 
inc bx 
mov dl, [bx] 
mov ah, 02h 
int 21h 
loop out
Добавлено через 1 минуту
просто эт не мой код,и как я понял эту строку вместо вывод результата надо вставлять?
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 16:10
Убери в своём коде строки с 35 по 37, и вместо них поставь:
Assembler
1
2
3
4
5
    mov  cx,s+1
    lea  si,r
@1: lodsb
    int  29h
    loop @1
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 16:17  [ТС]
Пишет что тип операндов не совпадает.

Добавлено через 2 минуты
в 35 строке
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 16:18
..замени тогда у меня первую строчку на:
Assembler
1
2
xor  cx,cx
mov cl,s+1
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 16:48  [ТС]
Все,работает,только в конце выводится ответа выводится символ конца строки,его можно убрать?
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 17:15
..уменьши длину строки (СХ) на 1
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 17
18.05.2016, 17:39  [ТС]
Все,все работает,огромное спасибо за помощь,есть еще маленькая просьба,если не тяжело не могли бы вы написать комментарии к вашему коду,просто мне не совсем понятно. Если вас конечно не затруднит.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
18.05.2016, 17:50
..чё там комментировать? Справочник есть у тебя какой-нибудь? Почитай про команды LODSB/STOSB
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2016, 17:50
Помогаю со студенческими работами здесь

Посимвольный ввод строки
Здравствуйте, написал вот такой код процедуры по посимвольному написанию строки с ограничением в 50 символов STR1 proc near enterch:...

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

Посимвольный вывод строки
От нечего делать решил покодить на пайтоне. И хотел с помощью time.sleep() вывести строку посимвольно: import time string =...

Посимвольный ввод-вывод
Товарищи помогите пожалуйста. необходимо Разработать и отладить процедуру, выполняющую следующие действия : ввод с экрана последовательно...

Посимвольный вывод текста
Необходимо по нажатию на кнопку посимвольно выводить одну строку из файла. Наверно дело в application.ProcessMessages хотя не могу понять...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru