Программа на 8086 ассемблере: программа, которая находит все большие числа, чем один входной номер из входного массива чисел - PullRequest
0 голосов
/ 07 января 2019

Я не знаю, ясно ли мне, но мне нужна программа, которая будет принимать числа (# 1), которые я ввожу, одно входное число (# 2), и ему нужно найти все числа, большие, чем число # 2, из массива из приведенных номеров.

.model small
.stack 100
.data
sir db 80 dup('$')
m1 db 'Introduceti sirul:$'
m2 db 13,10,'Introduceti un caracter:$'
m2 db 13,10,'Cel mai mare caracter este: $'
max db 0,'$'
.code
mov ax,@data
mov ds,ax
mov ah,9h
mov dx,offset m1
int 21h

mov bx,0
mov cx,80
mov ah,3fh
mov dx,offset sir
int 21h

mov ah,9h
mov dx,offset m2
int 21h

mov ah,1
int 21h

mov si,offset sir
mov ah,[si]
next: mov al,[si]
cmp al,13 
jz sfarsit
cmp al,ah 
jle nu
mov ah,al
nu: inc si
jmp next

sfarsit:
mov bl,ah 
mov ah,9
mov dx,offset m2
int 21h

mov dl,bl
mov ah,2
int 21h

mov ah,4ch
int 21h
end 

1 Ответ

0 голосов
/ 07 января 2019

В настоящее время ваша программа просто находит наибольшее число aka ASCII (код символа) во введенном массиве в sir . Вы не используете отдельный вход вообще! Начните с сохранения этого ввода:

    mov     ah, 01h    ; DOS.InputCharacter
    int     21h
    mov     char, al

Тогда посмотрите в массиве, чтобы найти что-нибудь большее. Каждый элемент, который больше, отображается немедленно.

    mov     si, offset sir
next:
    mov     dl, [si]
    cmp     dl, 13 
    je      sfarsit
    cmp     dl, char
    jbe     nu         ; Ignore if not bigger

    mov     ah, 02h    ; DOS.DisplayCharacter
    int     21h

nu:
    inc     si
    jmp     next
sfarsit:

Обратите внимание, что элементы массива действуют символов и вам следует рассматривать их как беззнаковые величины. Поэтому не используйте jle для сравнения со знаком, а используйте jbe для сравнения без знака.

Вам придется заново продумать, когда выводить 3-е сообщение.

Вы видели, что ваши 2-е и 3-е сообщения оба помечены м2 ? Ассемблер отклонит это.

...