Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226

Проверка строк

18.12.2011, 20:10. Показов 4910. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Вот есть задача на проверку строки. Помогите решить, пожалуйста.

Ввести строку текста (с клавиатуры) в формате имени файла 8.3. Если расширение есть .doc или .txt, то напечатать сообщение: «Текстовый документ» в другом случае: «Неизвестный файл».

P.S. Приму любые идеи по решении задачи и код(или части кода). Спасибо!

P.S.S "формате имени файла 8.3" это 8 знаков для имени потом точка и расширение файла.

Добавлено через 3 минуты
работаю с MASM
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2011, 20:10
Ответы с готовыми решениями:

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

Функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение строк
На языке Ассемблер написать функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение...

Проверка строк
Как на си реализовать проверку строк? К примеру, ожидаю сообщение "DATA OK".

11
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
21.12.2011, 17:23  [ТС]
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
.model  small
.stack  100h
.data
    string db 80 dup(?)
    promt db 0Dh,0Ah,'Enter password: $'
    all db 0Dh,0Ah,'That is all$'
    ok db 0Dh,0Ah,'Working!!! $'
    password db 'pass$'
    pass_len dw 3
.code 
    mov ax,@data
    mov ds,ax       ;В АХ-адреса початку сегмента даних
@beg1:
    mov     ah,09h  ;Вивiд запиту на введення пароля
    mov     dx,offset promt ;Адреса запиту
    inc     dx
    int     21h
                ;Введемо пароль
    mov     bx,0        ;iнiцiалiзацiя iндексацiї введення
    lea si, string
@pass:
    mov     ah,08h  ;Функцiя введення символу в AL без ехо
    int     21h
    cmp     al,13       ;<Enter> ?
    je  @compare    ;Так, на порiвняння
    mov     [si],al
    mov ah,02
    mov     dl, [si]        ;Запишемо на екран введене
    int     21h
    inc     si
    jmp     @pass   ;Повторювати
                ;Порiвняння введеного пароля з дiйсним (порiвняння рядкiв)
@compare:
    push    ds      ;Встановити ES на сегмент даних
    pop     es
    lea     si,string   ;DS:SI- початок string
    inc     si
    lea     di,password     ;ES:DI- початок password
    inc     di
    cld             ;DF=0- перегляд вперед
    mov     cx,pass_len     ;Встановити лiчильник порiвняння
    repe    cmpsb   ;Порiвнювати, поки CX<>0 i ZF=1 (тобто повторювати
                ;поки символи двох рядкiв спiвпадають, але не бiльш CX раз)
    jne     @err        ;Рядки не рiвнi
                ;Виведення повiдомлення ОК, пiдтверджуючого правильнiсть пароля
    mov     ah,09h
    mov     dx,offset OK
    inc     dx
    int     21h
    jmp     @end1
@err:
    jmp     @beg1   ;Повторити введення пароля
@end1:
    mov     ah,09h
    mov     dx,offset All
    inc     dx
    int     21h
    jmp     @beg1
    MOV     AH,4ch  ;DOS-функцiя завершення роботи програми
    INT     21h         ;Виклик переривання DOS
 
end
вот есть код на проверку пароля, когда вводим оно проверяет со заданным наперед словом, а вот как сделать чтобы проверяло наличия символа в строке. Поскольку имя может быть меньше чем 8 символов и точка в имени тоже допускается, то нужно искать точку, если одна такая точка, то перейти на проверку расширения.

Подскажите как проверить символы в строке, и как искать одну точку? Очень вас прошу. Я в недоумении как это сделать.

Вот я делал компаре как я понимаю(я проверяю символ из string(введеная строка) с символом который находится в poi , но оно не работает:
Assembler
1
2
3
4
5
6
7
8
9
10
@compare:
    push    ds      ;Встановити ES на сегмент даних
    pop     es
    lea     si,string   ;DS:SI- початок string
    inc     si
    lea     di,poi  ;ES:DI- початок password
    cld             ;DF=0- перегляд вперед
 
    mov     cx,pass_len     ;Встановити лiчильник порiвняння
    repne   scasb
Добавлено через 12 минут
или ещё вариант идти с конца, но я не знаю как перейти в конец массивы неизвестной длинны. Это вроди легче
1
10 / 10 / 1
Регистрация: 04.11.2009
Сообщений: 147
21.12.2011, 21:16
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
   F_IN   label byte
          F_Max     db  255
          F_Len     db  ?
          F_Name_IN db  255 dup(0)
...
;                         -------Ввод имени файла
      mov  bx, 0
      mov  ah, 0ah    
      mov  dx, offset F_IN
      int  21h 
      mov  bx, offset F_Name_IN                 ;Заносим адрес начала имени файла
      add  bl, [F_Len]                          ;Добавляем длину имени файла
      mov  byte ptr[bx], 0                    ;Тут мы в конец имени файла добавляем 0
Ну а вам получается нужно проверять byte ptr[bx-1](Потому что на конце будет знак перевода строки, а вам он не нужен). затем [bx-2], ну и так далее. Вначале проверяем, если есть "t", есть ли перед ним "x" и далее.
Вот...Я думаю так может получится)Хотя не гарантирую)
(

Не по теме:

Хотя...Вам же заданы параметры вводимой строки?8 и 3! Что же вы тогда мучаетесь?)Просто прибавили длину строки = и вот вы уже на расширении. Или вам нужна проверка, действительно ли имя файла в таком формате?)

(Не прочитала внимательно то, что ниже)
1
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
22.12.2011, 13:51  [ТС]
Цитата Сообщение от Sweet_Sleep Посмотреть сообщение
Не по теме:
Хотя...Вам же заданы параметры вводимой строки?8 и 3! Что же вы тогда мучаетесь?)Просто прибавили длину строки = и вот вы уже на расширении. Или вам нужна проверка, действительно ли имя файла в таком формате?)
Sweet_Sleep, спасибо, что откликнулись. Но не больше 8-ми в имени и не больше 3-х в расширении. Можете помочь написать саму проверку на конкретный символ в строке? Я просто не могу сделать правильно...
Спасибо!
0
10 / 10 / 1
Регистрация: 04.11.2009
Сообщений: 147
22.12.2011, 19:17
Ну я тебе могу объяснить принцип, коды я пишу косячные) Вот ты выполнила ввод имени как у меня написано выше, затем обратилась к byte ptr[bx-1](то есть к байту, который находится по адресу bx), сравниваешь его с символом "t" (byte ptr[bx-1]="t")Если они не равны, переходим к следующей проверке (jne next), если равны, продолжаем программу и проверяем byte ptr[bx-2]="x" и так далее...
Если не будет срабатывать с bx-1,bx-2, тогда декрементируй их. (dec bx)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   cmp byte ptr[bx-1], "t"
   jne  next
   cmp byte ptr[bx-2], "x"
   jne  next
   cmp byte ptr[bx-3], "t"
   jne  next  
   cmp byte ptr[bx-4],"."
   jne  next
   ;здесь мы будем в том случае, если расширение верное, что-нибудь делаем, прыгаем н-р на метку, где выводим что файл текстовый
next:
      cmp byte ptr[bx-1], "c"
   jne  ext
   cmp byte ptr[bx-2], "o"
   jne  ext
   cmp byte ptr[bx-3], "d"
   jne  ext
   cmp byte ptr[bx-4],"."
   jne  ext
  ;здесь мы будем в том случае, если расширение верное, что-нибудь делаем, прыгаем н-р на метку, где выводим что файл текстовый
Добавлено через 3 часа 26 минут
хеее..Ничего что я к тебе как к женскому полу обращалась?)Сказал бы хоть что ли=)Ну я извиняюсь)
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
22.12.2011, 22:24
ВотЪ:
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
.286
.model tiny
.stack  100
.code
    org 100h    
start:  
        push    cs
        push    cs
        pop ds
        pop es
; Вывод на экран 
    mov     ah, 09h
    lea     dx, req
    int     21h
; ввод строки
    mov ah, 0Ah
    lea dx, inpbuf
    int 21h
    mov si, dx
    lodsw
    mov di, si
    shr ax, 8
    cmp al,4        ; '.'+расширение
    jb  error
    mov cx, ax
; cx - str length, DS:SI = ES:DI -> string buf
    mov al,'.'      
    repne   scasb
    jnz error
    push    di
    lea si, txt
    mov cx, 3
    rep cmpsb
    jz  ok
    pop di
    lea si, doc
    mov cx, 3
    rep cmpsb
    jz  ok
error:  lea dx, unk
    jmp @ok
ok: lea dx, okay
@ok:    push    dx
;;
; добавляем '$' в хвост строки
.386c       ;;; TASM - АЦЦКИЙ АЦЦСТОЙ !!!
    movzx   bx, byte ptr len
.286
    add bx, offset buf
    mov byte ptr [bx],'$'
 
; новая строка
    mov     ah, 09h
    lea     dx, crlf
    int     21h
 
; Вывод на экран 
    mov     ah, 09h
    lea     dx, buf
    int     21h
    pop dx
    int 21h
; выход
    mov ah, 4Ch
    int 21h
crlf:   db  0Dh,0Ah,'$'
req:    db  'Enter filename:$'
txt:    db  'txt'
doc:    db  'doc'
unk:    db  ' - unknown type$'
okay:   db  ' - TEXT document$'
inpbuf:  db 12          ; длина строки - 12 симв. макс.
len:    db  ?                       ; сюда вернется настоящая длина
buf:    db  255 dup(?)              ; тут будет то, что ввели
    end start
2
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
24.12.2011, 02:48  [ТС]
Charles Kludge, спасибо за код, но я работаю с МАSМ 6,11 и он пишет ошибки, я перенес данные вверх под надписью дописаной мной
Assembler
1
.data
и ещё поуберал двоеточие после названий переменных, потому что не работало. Ошибок меньше, но вот ещё две ошибки на скрине. А ниже код. В общем.. можно название вашей программы, где вы писали этот код?
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
.286
.model tiny
.stack  100
.data
crlf   db      0Dh,0Ah,'$'
req    db      'Enter filename:$'
txt   db      'txt'
doc    db      'doc'
unk    db      ' - unknown type$'
okay   db      ' - TEXT document$' ;10
inpbuf  db     12                      ; длина строки - 12 симв. макс.
len   db      ?                       ; сюда вернется настоящая длина
buf    db      255 dup(?)              ; тут будет то, что ввели
.code
        org     100h    
start:  
        push    cs
        push    cs
        pop     ds
        pop     es
; Вывод на экран 
        mov     ah, 09h
        lea     dx, req
        int     21h
; ввод строки
        mov     ah, 0Ah
        lea     dx, inpbuf
        int     21h
        mov     si, dx
        lodsw
        mov     di, si
        shr     ax, 8
        cmp     al,4            ; '.'+расширение
        jb      error
        mov     cx, ax
; cx - str length, DS:SI = ES:DI -> string buf
        mov     al,'.'          
        repne   scasb ;43
        jnz     error
        push    di
        lea     si, txt
        mov     cx, 3
        rep     cmpsb
        jz      ok
        pop     di
        lea     si, doc
        mov     cx, 3
        rep     cmpsb
        jz      ok
error:  lea     dx, unk
        jmp     @ok
ok:     lea     dx, okay
@ok:    push    dx
;;
; добавляем '$' в хвост строки
.386c           ;;; TASM - АЦЦКИЙ АЦЦСТОЙ !!!
        movzx   bx, byte ptr len
.286
        add     bx, offset buf
        mov     byte ptr [bx],'$'
 
; новая строка
        mov     ah, 09h
        lea     dx, crlf
        int     21h
 
; Вывод на экран 
        mov     ah, 09h
        lea     dx, buf
        int     21h
        pop     dx
        int     21h
; выход
        mov     ah, 4Ch
        int     21h
 
        end     start
Миниатюры
Проверка строк  
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
24.12.2011, 02:56
Цитата Сообщение от CVB
название вашей программы, где вы писали этот код?
Гм. писал - в FAR'e, транслятор - TASM.
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
24.12.2011, 03:33  [ТС]
Charles Kludge, можете скинуть отлинкованный exe файл? или скриншот работы программы. Спасибо!
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
24.12.2011, 03:49
CVB, ловите.
Вложения
Тип файла: zip cmp_ext.zip (308 байт, 9 просмотров)
2
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
24.12.2011, 05:00  [ТС]
Charles Kludge, ОГРОМНОЕ СПАСИБО, ЗА ПРОДЕЛАННУЮ ВАМИ РАБОТУ!!!

Добавлено через 1 час 5 минут
Charles Kludge, я когда спрашивал какую программу вы используюте, то думал там будет попроще... Ну как там в Visual Studio 2010. По интернету лазил, то рекомендомали FAR с подцветкой синтаксиса.

Я так не разобрался с ним и попросил файлик отлинкованный.

Вот тут посидел и нашёл чудеснейшую программу, там и справка по коммандах есть при нажатии соответствующих функциональных клавиш. Компиляции MASM, TASM, FASM. Там вот.. вставил код.. нажал компилировать в тасм и сохранить ексешник и готово.

В общем вот конечная страница для закачки http://asmtool.info/download.php?list.2 (нажать синюю стрелку для закачки). Ну это если заинтресовало..
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
24.12.2011, 05:12
CVB, Спасибо, но... Я люблю текстовый режим. Это ещё с "больших ЭВМ" и терминалов. Поэтому и пользую FAR и старенький MultiEdit v7 в текстмоде.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2011, 05:12
Помогаю со студенческими работами здесь

Проверка строк
Вот есть например строка AnsiString msg= &quot;gold 50, hp=100; mv=200&quot;; как сделать вот такую проверку: if (msg==&quot;gold %d, hp=%d,...

Проверка строк
Доброго времени суток. Подскажите как можно проверить в строке наличие 2 стрингов? К примеру есть строка &quot;Мама мыла раму&quot; и 2...

Проверка на дублирование строк
Добрый день! В очередной раз прошу о помощи. Существует форма с полями Дата, Сумма, Сотрудник, Статья затрат. Необходимо, чтобы при...

Проверка последовательности строк
Напишите функцию isSubsequenceOfMy:: Eq a =&gt; -&gt; -&gt; Bool, проверяющую является ли одна строка подпоследовательностью другой.

Проверка упорядоченности строк
Дана строка. Напечатать те слова, перед которыми в последовательности находятся только меньшие (по алфавиту) слова, а за ними - только...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru