使用8086汇编语言编写的程序:从数字输入数组中查找比单个输入数字大的所有数字的程序

时间:2019-01-07 14:37:56

标签: assembly x86-16

我不知道我是否清楚,但是我需要一个程序来接收我输入的数字(#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 :(得分:1)

当前,您的程序只是在 sir 的输入数组中找到了最大的aka ASCII码(字符代码)。您根本不需要使用单独的输入!首先存储此输入:

    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用于无符号比较。

您将不得不重新考虑何时输出第三条消息。

您是否看到第二条和第三条消息都标记为 m2 ?汇编程序将拒绝此操作。