查找并显示数组中的最大值

时间:2014-12-31 11:44:47

标签: assembly masm masm32

我想搜索列表的最大值。 该程序不显示任何内容。

.586
.model flat,stdcall
option casemap:none

include WINDOWS.INC
include user32.inc
includelib USER32.LIB
include kernel32.inc
includelib KERNEL32.LIB
include masm32.inc
includelib masm32.lib

.data 

Liste dw 100,24,326,-7,4,8
titlem db "le maximun:",0

.data?

Max dw ?

findmax proto :dword,:dword

.code 

start:

xor eax,eax
xor ebx,ebx
xor esi,esi

invoke findmax,addr Liste,6
invoke dwtoa,eax,addr Max
invoke MessageBox,NULL, addr Max,addr titlem,MB_OK
invoke ExitProcess,0

findmax proc list:dword,N:dword
xor ebx,ebx
mov ebx,offset Liste
xor ax,ax

;ax <- Max
xor esi,esi
mov ax,[ebx]

.while esi<N
.if ax>[ebx]
    mov ax,[ebx]
.endif
    inc ebx
    inc ebx
    inc esi
.endw
findmax endp

end start

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题:

  • 您已将Max声明为单词(2个字节),在大多数情况下,该单词不足以容纳dwtoa生成的字符串。你应该至少使用4个字节,8个甚至更好:

    Max db 8 dup(?)

  • if语句中的操作数顺序错误,您还在进行无符号比较。你应该改为:

    .if SWORD PTR [ebx]>ax ; the SWORD PTR specifier makes this a signed comparison

  • 您需要在ret程序结束时发出findmax条指令。