Вывод символов строки, отсутствующих в другой строке - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте.=) Хорошего Вам настроения ) Стоит условие - Заданы два символьных массива с малых латинских букв и знаков препинания S (n), n <= 500 и C (m), m <= 400. Разработать программу, которая выводит в алфавитном порядке буквы первого массива, которые не принадлежат втором, и буквы второго массива не принадлежащих первому. Раньше писал на делфи.. Но сейчас нужно на асемблере. Код делфи
Листинг программы
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var s,c:set of char;
  3. i:integer;
  4. m:char;
  5. begin
  6. s:=[];
  7. c:=[];
  8. if Memo1.Lines.Count <=500 then
  9. for i:=1 to Memo1.Lines.Count do s:=s+[memo1.lines[i-1][1]] else
  10. Showmessage('Забагато символів');
  11. if Memo2.Lines.Count <=400 then
  12. for i:=1 to Memo2.Lines.Count do c:=c+[Memo2.Lines[i-1][1]] else
  13. Showmessage('Забагато символів');
  14. for m:= 'a' to 'z' do begin
  15. if (m in s) and (not (m in c)) then Memo5.Lines.Add(m);
  16. if (m in c) and (not (m in s)) then Memo6.Lines.Add(m);
  17. end;
  18. end;
Буду благодарен, если кто то поможет переписать. С ув.

Решение задачи: «Вывод символов строки, отсутствующих в другой строке»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         Nmax    equ     500
  9.         Mmax    equ     400
  10.  
  11.         S       db      'Connection of fuel valves with direct sparkflame burners.'
  12.         N       dw      $-S
  13.         C       db      'For additional examples of air damper control, refer to "Connection examples".'
  14.         M       dw      $-C
  15.  
  16.         CrLf    db      0Dh, 0Ah, '$'
  17.         SetOfS  db      (256/8) dup(?)
  18.         SetOfC  db      (256/8) dup(?)
  19.  
  20.         msgUniqueFirst  db      'The unique symbols from the first string: ', '$'
  21.         msgUniqueSecond db      'The unique symbols from the second string: ', '$'
  22. .code
  23. .386
  24. main    proc
  25.         mov     ax,     @data
  26.         mov     ds,     ax
  27.  
  28.         ;заполнение множества используемых символов строки S(N)
  29.         lea     si,     S
  30.         mov     cx,     N
  31.         lea     di,     SetOfS
  32.         call    FillSet
  33.  
  34.         ;заполнение множества используемых символов строки C(M)
  35.         lea     si,     C
  36.         mov     cx,     M
  37.         lea     di,     SetOfC
  38.         call    FillSet
  39.  
  40.         ;вывод символов первой строки, отсутсвующих во второй строке
  41.         mov     ah,     09h
  42.         lea     dx,     msgUniqueFirst
  43.         int     21h
  44.         lea     si,     SetOfS
  45.         lea     di,     SetOfC
  46.         call    UniqueChars
  47.         mov     ah,     09h
  48.         lea     dx,     CrLf
  49.         int     21h
  50.         ;вывод символов второй строки, отсутсвующих в первой строке
  51.         mov     ah,     09h
  52.         lea     dx,     msgUniqueSecond
  53.         int     21h
  54.         lea     si,     SetOfC
  55.         lea     di,     SetOfS
  56.         call    UniqueChars
  57.         mov     ah,     09h
  58.         lea     dx,     CrLf
  59.         int     21h
  60.  
  61.         mov     ax,     4C00h
  62.         int     21h
  63. main    endp
  64.  
  65. ;заполнение множества символов, присутствующих в строке
  66. ;на входе
  67. ; ds:si - адрес строки
  68. ; cx    - длина строки
  69. ; ds:di - адрес множества
  70. ;на выходе
  71. ; ds:di - заполненное множество
  72. FillSet proc
  73.         push    ax
  74.         push    bx
  75.         push    cx
  76.         push    dx
  77.         push    si
  78.         push    di
  79.         pushf
  80.  
  81.         cld
  82.         ;очистка множества
  83.         push    cx
  84.         push    di
  85.         push    es
  86.         push    ds
  87.         pop     es
  88.         mov     al,     0
  89.         mov     cx,     256/8
  90.         rep     stosb
  91.         pop     es
  92.         pop     di
  93.         pop     cx
  94.         ;заполнение множества
  95.         mov     ax,     0
  96.         jcxz    @@Break
  97. @@For:
  98.         lodsb
  99.         mov     bx,     ax
  100.         shr     bx,     3
  101.         and     ax,     0111b
  102.         bts     ds:[di+bx],ax
  103.         loop    @@For
  104. @@Break:
  105.  
  106.         popf
  107.         pop     di
  108.         pop     si
  109.         pop     dx
  110.         pop     cx
  111.         pop     bx
  112.         pop     ax
  113.         ret
  114. FillSet endp
  115.  
  116. ;вывод символов первой строки, отсутсвующих во второй строке
  117. ;на входе:
  118. ; ds:si - адрес множества символов 1 строки
  119. ; ds:di - адрес множества символов 2 строки
  120. UniqueChars     proc
  121.         push    ax
  122.         push    bx
  123.  
  124.         mov     ax,     0
  125.         mov     al,     'a'
  126. @@Repeat:
  127.         mov     bx,     ax
  128.         shr     bx,     3
  129.         mov     dx,     ax
  130.         and     dx,     0111b
  131.         bt      [si+bx],        dx
  132.         jnc     @@Next
  133.         bt      [di+bx],        dx
  134.         jc      @@Next
  135.         int     29h
  136. @@Next:
  137.         inc     al
  138.         cmp     al,     'z'
  139.         jbe     @@Repeat
  140.  
  141.         pop     bx
  142.         pop     ax
  143.         ret
  144. UniqueChars     endp
  145.  
  146. end     main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы