Assembly 8086汇编语言程序:从一个数字输入数组中找出大于单个输入数字的所有数字的程序
我不知道我是否清楚,但我需要一个程序,它将接受我输入的数字(#1),一个单一的输入数字(#2),它需要从给定的数字数组中找到所有大于数字#2的数字Assembly 8086汇编语言程序:从一个数字输入数组中找出大于单个输入数字的所有数字的程序,assembly,x86-16,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,'$' .c
.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
目前,您的程序只是在sir的输入数组中找到最大的数字,即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?汇编程序将拒绝此操作。所以我照你说的做了,当它需要显示所有比我输入的数字大的数字时,它只显示一个笑脸?m1翻译为“输入一个数组”,m2翻译为“输入一个数字”,m3(第二个m2)“较大的数字是”。@Alex你的数组实际上是一个字符串,您的单个数字实际上是一个字符,而较大的数字列表实际上是一个(略短的)字符串。这就是您定义输入的方式,也是您(和我的)代码生成的内容。