Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;.model tiny
- ;.code
- ;org 100h
- ;start:
- ;huy db 'huy','$'
- ;kuni db 'kuni','$'
- ;uebok db 'uebok','$'
- ;idiot db 'idiot','$'
- ;suka db 'suka','$'
- ;mov AH,9
- ;mov DX,offset Data
- ;int 21h
- ;int 20h
- ;end start
- model tiny
- .code
- org 100h
- start:
- ;в cx будет номер состояния(от 0 до 13) (фактически номер строки)
- mov cx, 0
- mov si, 82h
- jmp go
- ;автомат выглядит как таблица, у которой строки это состояния а в
- ;каждой строке указания на какое состояние идти
- ;в случае если очередная буква равна n, s или а
- automat db 1, 9, 9, 9, 9, 9, 9, 9, 9
- db 9, 9, 9, 9, 9, 9, 2, 9, 9
- db 9, 10, 10, 10, 10, 10, 9, 9, 9
- ;в T таблица, где буква а закодирована как 2, буква n как 0, буква s как 1, остальные буквы как 3
- T db 13 dup (8), 7, 18 dup (8), 0, 60 dup (8), 6, 12 dup (8), 1, 2, 8, 5, 7 dup (8), 3, 8, 4, 137 dup (8)
- line_length db 9
- no db "huy not found$"
- yes db "huy found$"
- go:
- mov bx, offset T ;закинули таблицу в bx
- lodsb ;прочитали очередной символ из аргументов и закинули его в ax
- xlat ;перекодировали ax в цифру из таблицы Т(новое значение в ax будет задавать смещение по столбцам в таблице automat)
- push ax ;сохраняем ах, он понадобится еще
- mov bx, offset automat
- mov ax, cx ;закинем в ах номер текущей строки в автомате
- mul line_length ;умножим ее на 9(ведь у нас на самом деле не таблица а одномерный массив)
- pop cx
- add ax, cx ;здесь смещаем по столбцам на нужное количество ячеек
- xlat
- cmp ax, 1
- je h
- mov cx, ax
- h:
- mov cx, ax
- cmp cx, 4
- je found
- cmp si, 100h
- je not_found
- jmp go
- not_found:
- mov ah, 09h
- mov dx, offset no
- int 21h
- ret
- found:
- mov ah, 09h
- mov dx, offset yes
- int 21h
- ret
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement