Найти минимальное из чисел, встречающихся в целочисленном массиве ровно два раза - 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

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


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

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

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