Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;.model tiny
  2. ;.code
  3. ;org 100h
  4. ;start:
  5. ;huy db 'huy','$'
  6. ;kuni db 'kuni','$'
  7. ;uebok db 'uebok','$'
  8. ;idiot db 'idiot','$'
  9. ;suka db 'suka','$'
  10. ;mov AH,9
  11. ;mov DX,offset Data
  12. ;int 21h
  13. ;int 20h
  14. ;end start
  15.  
  16.  
  17.  
  18. model tiny
  19. .code
  20. org 100h
  21.  
  22. start:
  23. ;в cx будет номер состояния(от 0 до 13) (фактически номер строки)
  24. mov cx, 0
  25. mov si, 82h
  26. jmp go
  27.  
  28. ;автомат выглядит как таблица, у которой строки это состояния а в
  29. ;каждой строке указания на какое состояние идти
  30. ;в случае если очередная буква равна n, s или а
  31.  
  32. automat db 1,  9,  9,  9,  9,  9, 9, 9, 9
  33.         db 9,  9,  9,  9,  9,  9, 2, 9, 9  
  34.         db 9, 10, 10, 10, 10, 10, 9, 9, 9
  35.  
  36. ;в T таблица, где буква а закодирована как 2, буква n как 0, буква s как 1, остальные буквы как 3
  37. 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)
  38.  
  39. line_length db 9
  40. no db "huy not found$"
  41. yes db "huy found$"
  42.  
  43. go:
  44. mov bx, offset T ;закинули таблицу в bx
  45. lodsb ;прочитали очередной символ из аргументов и закинули его в ax
  46. xlat ;перекодировали ax в цифру из таблицы Т(новое значение в ax будет задавать смещение по столбцам в таблице automat)
  47. push ax ;сохраняем ах, он понадобится еще
  48. mov bx, offset automat
  49. mov ax, cx ;закинем в ах номер текущей строки в автомате
  50. mul line_length ;умножим ее на 9(ведь у нас на самом деле не таблица а одномерный массив)
  51. pop cx
  52.  
  53. add ax, cx ;здесь смещаем по столбцам на нужное количество ячеек
  54. xlat
  55. cmp ax, 1
  56. je h
  57. mov cx, ax
  58.  
  59. h:
  60. mov cx, ax
  61. cmp cx, 4
  62. je found
  63. cmp si, 100h
  64. je not_found
  65. jmp go
  66.  
  67. not_found:
  68. mov ah, 09h
  69. mov dx, offset no
  70. int 21h
  71. ret
  72.  
  73. found:
  74. mov ah, 09h
  75. mov dx, offset yes
  76. int 21h
  77. ret
  78.  
  79. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement