我对汇编编程非常陌生,说实话,这是我在计算机上编写的第一个代码(用于汇编)。
最大数字显然是' 9'但它显示了一些字符(键盘中没有)。为什么这样?日Thnx。
.model small
.stack 64
.data
array db 2,5,6,3,9,8
count db 7
large db ?
.code
main proc far
start:
mov ax,@data
mov ds,ax
lea si, array
mov dl,[si]
mov large, dl
inc si
dec count
l1:
mov al,[si]
cmp al,large
jg largefound
nochange:
inc si
dec count
cmp count,00h
jnz l1
largefound:
mov large,al
inc si
dec count
cmp count,00h
jnz l1
mov dl,large
add dl,30h
mov ah,02h
int 21h
mov ah,4ch
int 21h
main endp
end main
答案 0 :(得分:1)
数组中有6个值,但count是7.还要看看nochange块中count变为零时会发生什么。它逐渐变大。它应该跳过它而不是。
答案 1 :(得分:1)
您的计划存在两个问题:
dec count
。您最好使用相反的条件跳转来绕过新的最大值的设置,而不是使用2个单独的代码块来复制多个指令:
lea si, array
mov al, [si] ;First element
mov large, al
l1:
inc si
mov al, [si] ;Next elements
cmp al, large
jng NotLarger
mov large, al ;New largest element
NotLarger:
dec count
jnz l1
请注意,您不需要编写cmp count, 0
,因为dec count
指令已经为jnz l1
的操作设置了必要的标记。
请注意,只需将 l1 标签移动一行,就不再需要单独的inc si
。
研究这个例子,看看代码有多小,效率更高!