我想搜索列表的最大值。 该程序不显示任何内容。
.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
条指令。