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