2014-12-31 6 views
-3

Я хочу найти максимум для списка. Эта программа ничего не отображает.Найти и отобразить максимальное значение в массиве

.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 
+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 процедуры.

+0

спасибо, Майкл, он работает – dfkmmQKDS

 Смежные вопросы

  • Нет связанных вопросов^_^