Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
Anderok
110 / 110 / 29
Регистрация: 10.11.2013
Сообщений: 446
#1

Удалить все слова с максимальной длинной и все пробелы после этих слов - Assembler

11.11.2013, 02:09. Просмотров 320. Ответов 0
Метки нет (Все метки)

Написал поиск самого длинного слова с его выводом и вывод его длины.
Помогите сделать так, чтобы программа удаляла все слова с найденной мною длинной (и пробелы после них, потому что пробелов может быть неограниченное количество).

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
masm
model small
 
.STACK    100h
 
.DATA      
Msg_Inp   db    'Enter the line: $'
Msg_Press db    10,13,'Press any key ...$'
Msg_Res   db    10,13,'Result: $'
 
String    db    41                ; максимальная длина вводимой строки
len       db    ?                 ; длина введенной строки
text      db    41 dup(?)         ; введенная строка
max       dw    ?                 ; длина самого длинного слова
 
 
.CODE     
         Assume ds:@data,es:@data
start:
          mov   ax,@data           ; настройка сегментных регистров
          mov   ds,ax             ; сегмент данных
          mov   es,ax             ; вспомагательный сегментный регистр
          cld                     ; очистка флага направления 
                                  ; строковые операции будут проводится слева на право
; приглашения к вводу строки и ее ввод
          lea   dx,Msg_Inp        ; адрес сообщения
          mov   ah,9              ; номер функции вывода строки на экран
          int   21h               ; прерывание ДОС - вывод строки
          mov   ah,0ah            ; функция ввода строки
          lea   dx,String         ; адрес структуры вводимой строки
          int   21h               ; ввод строки - прерывание ДОС
; вывод сообщения Result
          mov   ah,9              ; номер функции вывода строки на экран
          lea   dx,Msg_Res        ; адрес выводимого сообщения
          int   21h               ; вывод сообщения
; нахождение самого длинного слова
          mov   ch,0             ; старший байт = 0
          mov   cl,len            ; количество байт (символов) для сканирования
          lea   di,text           ; адрес строки
          mov   al,' '            ; искомый символ
          mov   dx,di             ; начало самого длинного слова
          mov   max,1            ; длина самого длинного слова
        
find_space:
          mov   si,di             ; запомнить адрес начала текущего слова
          repne scasb             ; сканировать пока не равно пробелу  
          ; вычисление длины слова
          mov   bx,di             ; указывает на следующий символ после найденного
          sub   bx,si             ; вычесть адрес начала слова
          jz    no_min            ; перейти если длина=0 (подряд 2 пробела)
          cmp   cx,0              ; если просканированна вся строка
          jz    end_str           ; перейти на метку
          dec   bx                ; реальная длина слова, т.к. di указывал на символ
                                  ; следующий за пробелом
          jz    no_min            ; перейти если длина=0 (подряд 2 пробела)
end_str:
          cmp   bx,max            ; сравнение длины слова (ВХ) с самым длинным
          jbe  no_min             ; если меньше максимального, то перейти
          mov max,bx
          mov   dx,si  
 
no_min:
          
          cmp   cx,0              ; если просканированна не вся строка
          jnz   find_space        ; тогда перейти - продолжить сканирование
          
          ; устанавливаем после слова символ $
          mov   si,dx             ; адрес начала слова
          mov   bx,max            ; длина слова
          mov   byte ptr [si+bx],'$' ; запись символа после слова
          ; вывод слова
          mov   ah,9              ; функция вывода сообщения
          int   21h               ; вывод сообщения с адреса DX
 
; посимвольный вывод числа символов в самом длинном слове
          
PushNum: ; Начало вывода длины самого длинного слова
    mov Ax, Bx
    mov Bx, 10
    xor Dx, Dx
    div Bx
    push Dx
    inc Cx
    cmp Ax, 0
    jnz PushNum
    
PopNum:       
    pop Dx
    add Dl, 30h ; Добавляет код нуля к регистру Dl
    mov Ah, 02h
    int 21h
    loop PopNum ; Конец вывода длины самого длинного слова
    
          ; завершение программы
          mov   ah,4ch            ; функция завершения программы
          int   21h                  
          END   start             ; Start - метка начала исполнение программы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 02:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить все слова с максимальной длинной и все пробелы после этих слов (Assembler):

Удаление из строки всех слов с максимальной длинной (и всех пробелов после них) - Assembler
С клавиатуры вводится строка символов, необходимо найти самое длинное слово (несколько слов) и удалить его (их) со всеми пробелами после...

Удалить все пробелы из строки - Assembler
Ввести строку с клавиатуры. Во введенной строке удалить все пробелы и вывести результат на экран.

Удалить все слова, содержащие только цифры - Assembler
Помогите с программой в которой необходимо удалить все слова, содержащие только цифры. Я просто плохо понимаю команды обработки строк.

Удалить все гласные после согласных - Assembler
Здравствуйте, подскажите, пожалуйста, как возможно это написать? Ассемблер пока что плохо знаю, даже и не знаю, с чего начать

В строке удалить все символы после точки - Assembler
Нужна помощ в решении задачи я вообще нешарю в ассемблере. Вот условие: "В даной строке убалить все символы после точки" Буду...

Вывести все пары слов в которых все буквы различные - Assembler
Нужно ввести строку с разными словами и вывести пары слов в которых все буквы различные. Например мы вводим строку: мы он она вы...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 02:09
Привет! Вот еще темы с ответами:

Удалить все слова, число букв в которых будет меньше или равно введенному числу - Assembler
Помогите пожалуйста написать программу, которая будет вводить строку, число и выводить потом обработанную строку, в которой будут удалены...

Удалить лишние пробелы и поменять местами слова в строке - Assembler
оч срочно прога нужна , напишите кто понимает условие::::: Дана строка буквенных символов (не менее 30), которая разбита на 8...

Удалить повторяющиеся пробелы, также пробелы в начале и в конце строки (ассемблерная вставка) - Assembler
Написать ассемблерную вставку, реализующую следующую обработку строки: согласно варианту. Оформить ее в виде отдельной функции....

MASM: Написать программу, которая удаляет все пробелы и переворачивает строку - Assembler
И так собственно сабж. "Написал" код (Точнее скопировал, правил вставлял) в общем наклепал код, к сожалению выдаёт ошибку. Помогите...


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

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

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