Вывод символов строки, отсутствующих в другой строке - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д