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

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

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

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

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        Nmax    equ     500
        Mmax    equ     400
 
        S       db      'Connection of fuel valves with direct sparkflame burners.'
        N       dw      $-S
        C       db      'For additional examples of air damper control, refer to "Connection examples".'
        M       dw      $-C
 
        CrLf    db      0Dh, 0Ah, '$'
        SetOfS  db      (256/8) dup(?)
        SetOfC  db      (256/8) dup(?)
 
        msgUniqueFirst  db      'The unique symbols from the first string: ', '$'
        msgUniqueSecond db      'The unique symbols from the second string: ', '$'
.code
.386
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;заполнение множества используемых символов строки S(N)
        lea     si,     S
        mov     cx,     N
        lea     di,     SetOfS
        call    FillSet
 
        ;заполнение множества используемых символов строки C(M)
        lea     si,     C
        mov     cx,     M
        lea     di,     SetOfC
        call    FillSet
 
        ;вывод символов первой строки, отсутсвующих во второй строке
        mov     ah,     09h
        lea     dx,     msgUniqueFirst
        int     21h
        lea     si,     SetOfS
        lea     di,     SetOfC
        call    UniqueChars
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
        ;вывод символов второй строки, отсутсвующих в первой строке
        mov     ah,     09h
        lea     dx,     msgUniqueSecond
        int     21h
        lea     si,     SetOfC
        lea     di,     SetOfS
        call    UniqueChars
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
;заполнение множества символов, присутствующих в строке
;на входе
; ds:si - адрес строки
; cx    - длина строки
; ds:di - адрес множества
;на выходе
; ds:di - заполненное множество
FillSet proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        pushf
 
        cld
        ;очистка множества
        push    cx
        push    di
        push    es
        push    ds
        pop     es
        mov     al,     0
        mov     cx,     256/8
        rep     stosb
        pop     es
        pop     di
        pop     cx
        ;заполнение множества
        mov     ax,     0
        jcxz    @@Break
@@For:
        lodsb
        mov     bx,     ax
        shr     bx,     3
        and     ax,     0111b
        bts     ds:[di+bx],ax
        loop    @@For
@@Break:
 
        popf
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
FillSet endp
 
;вывод символов первой строки, отсутсвующих во второй строке
;на входе:
; ds:si - адрес множества символов 1-й строки
; ds:di - адрес множества символов 2-й строки
UniqueChars     proc
        push    ax
        push    bx
 
        mov     ax,     0
        mov     al,     'a'
@@Repeat:
        mov     bx,     ax
        shr     bx,     3
        mov     dx,     ax
        and     dx,     0111b
        bt      [si+bx],        dx
        jnc     @@Next
        bt      [di+bx],        dx
        jc      @@Next
        int     29h
@@Next:
        inc     al
        cmp     al,     'z'
        jbe     @@Repeat
 
        pop     bx
        pop     ax
        ret
UniqueChars     endp
 
end     main

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


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

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

15   голосов , оценка 3.933 из 5
Похожие ответы