Найти минимальное из чисел, встречающихся в целочисленном массиве ровно два раза - Assembler
Формулировка задачи:
Прошу помощи с такой задачей, можно без ввода и вывода
26. Найти минимальное из чисел, встречающихся в целочисленном
массиве X=(x1,x2,...,xn) ровно два раза.
Решение задачи: «Найти минимальное из чисел, встречающихся в целочисленном массиве ровно два раза»
textual
Листинг программы
Sseg segment para stack 'Stack' db 64 dup(0) Sseg ends Dseg segment n dw 11 x db 8,9,1,4,2,16,1,21,34,13,2 x1 db ? nx1 dw ? k10 dw 10 mes1 db 13,10,'Љ®«ЁзҐбвў® Ґ«Ґ¬Ґ*в®ў Њ*ббЁў* - $',13,10 mes2 db 13,10,'ќ«Ґ¬Ґ*вл Њ*ббЁў* X: $',13,10 mes3 db 13,10,'‚ ¬*ббЁўҐ *Ґв 2-е ¬Ё*Ё¬*«м*ле н««Ґ¬Ґ*в®ў! $',13,10 mes4 db 13,10,'Њ*ббЁў *Ґ ўўҐ¤с*, Ё«Ё ўўҐ¤с* *ҐЇа*ўЁ«м*®!$',13,10 mes7 db 13,10,' $',13,10 mes8 db 13,10,'2 ¬Ё*Ё¬*«м*ле н««Ґ¬Ґ*в* - $',13,10 mes9 db 13,10,'н«Ґ¬Ґ*вл *Ґ **©¤Ґ*л$',13,10 Dseg ends Cseg segment assume cs:cseg, ss:sseg, ds:dseg; Start: ; Ё*ЁжЁ*«Ё§Ёа㥬бп push ds sub ax, ax push ax mov bx, dseg mov ds, bx ; ўў®¤ ¬*ббЁў* ; call InputArr ; test ax, ax ; jz the_end ; ўлў®¤ ¬*ббЁў* call OutputArr ;------------------------------------------------------------------------------ mov dh, 0 mov dl ,255 xor ax, ax mov si, -1 mc: inc si mov al, x[si] mov di, si m1: cmp al, x[di] jne m2 inc ah m2: cmp ah, 2 jne m3 cmp al, dl jge m3 mov dl, al mov dh, 1 m3: inc di mov ah, 0 cmp si, n jl mc jge me me: ; ®вўҐв ў dl, Ґб«Ё *Ґв в*ЄЁе н«Ґ¬Ґ*в®ў в® ў dh 0, Ё**зҐ 1 ;------------------------------------------------- cmp dh, 0 jz not_found mov dx, offset mes8 call WriteStr xor ax, ax mov al, dl call WriteInt jmp found not_found: mov dx, offset mes9 call WriteStr found: ; §*ўҐаиЁвм Їа®Ја*¬¬г the_end: call ReadChar ; we are waiting for... xor ax, ax mov ah, 4Ch int 21h ret ;------------------------------------------------------------------------------ ; ўў®¤ ®¤*®Ј® бЁ¬ў®«* ReadChar proc mov ah, 1 int 21h xor ah, ah ret ReadChar endp ;---------------------- ; ўлў®¤ ¬*ббЁў* OutputArr proc push ax push si mov dx, offset mes2 call WriteStr xor ax, ax mov si, ax out_loop: mov al, x[si] call WriteInt mov al, ' ' ; ўлў®¤Ё¬ Їа®ЎҐ« ¬Ґ¦¤г зЁб«*¬Ё call WriteChar inc si cmp si, n jl out_loop jmp norm_out norm_out: pop si pop ax ret OutputArr endp ;-------------------------------------------------------- ; ўлў®¤ 10-®Ј® зЁб«* ; AX = зЁб«® WriteInt proc push ax push cx push bx push dx xor cx, cx mov bx, 10 ; зЁб«® ®ваЁж*⥫м*®Ґ? cmp al, 0 jge count_digits ; *Ґв ; ўлўҐбвЁ ¬Ё*гб Ё Ї®¬Ґ*пвм §**Є push ax mov dl, '-' mov ah, 2 int 21h pop ax neg al ; Ї®«гзЁвм 10-*лҐ жЁдал Ё Ї®¬ҐбвЁвм Ёе ў б⥪, ; ў cx - Є®«ЁзҐбвў® Ї®«гзҐ**ле жЁда count_digits: xor dx, dx idiv bx push dx inc cx cmp al, 0 jg count_digits ; ¤®бв*вм Ё§ б⥪*, ЇҐаҐўҐбвЁ ў Є®¤ ASCII Ё ўлўҐбвЁ print_loop: pop ax add al, '0' call WriteChar loop print_loop pop dx pop bx pop cx pop ax ret WriteInt endp ;-------------------------------------------------------- ; ўлў®¤ ®¤*®Ј® бЁ¬ў®«* ; AX = char WriteChar proc push ax push dx mov dl, al mov ah, 2 int 21h pop dx pop ax ret WriteChar endp ;------------------------------------------------------------------------------ ; ўлў®¤ бва®ЄЁ ; DX = offset of string WriteStr proc mov ah, 09h int 21h ret WriteStr endp ;------------------------------------------------------------------------------ ; ўлў®¤ ЇҐаҐ*®б* бва®ЄЁ WriteCRLF proc mov al, 13 call WriteChar mov al, 10 call WriteChar ret WriteCRLF endp ;--------------------------------------------------- cseg ends end Start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д