在汇编程序中从数组中查找最大数

Find maximum number from array in assembly program

我编写了一个程序来从 15 个数字的数组中查找最大数字,但我的输出出错了。我将结果存储在 AX 寄存器中。

这是我的代码。

[org 0x0100]

array_nums: dw 19, 50, 30, 24, 19, 2, 5, 6, 40, 8, 23, 16, 17, 28, 86
max: dw 0
        mov bx, 0 ; initialize array index to zero
        mov ax, 0 ; initialize min to zero

        mov ax, [array_nums+bx]     ; max number to ax
        mov cx, 15

maxvalue:   cmp ax, [array_nums+bx]     ; find the maximun number
            jge maxloop                 ; if greater or equal number
            mov ax, [array_nums+bx]     ; ax contains the maximun number
maxloop:

        add bx, 2                   ; advance bx to next index
        loop maxvalue

        mov [max], ax               ; write back maximun in memory

        mov ax, 0x4c00              ; terminate program
        int 0x21

'I have to store the result in ...' 告诉我这可能是作业。

为了取悦你的老师,不要只写一个能够解决一个任务的程序。编写一个函数(使其可重用),使用 API(一些标准,或定义您自己的函数,如 "pointer in array must be defined in BX"。然后将此函数嵌入到程序中,以对其进行测试。

也许是这样的(从臀部开枪,在使用前先测试一下 ;-))

[org 0x0100]
jmp start

array_nums: dw 19, 50, 30, 24, 19, 2, 5, 6, 40, 8, 23, 16, 17, 28, 86

; ----------------------------------------------------------
; find the largest value in an array of ints
; in-params:
;   CX = number of values in array
;   BX = pointer to array
; out-params
;    AX = biggest value

findBiggest:
            mov ax, [bx]     ; first number to ax
            mov cx, 15

maxvalue:   cmp ax, [bx]     ; find the maximun number
            jge maxloop      ; if greater or equal number
            mov ax, [bx]     ; maximum number was larger
maxloop:
            add bx, 2        ; advance bx to next index
            loop maxvalue
            ret
; ----------------------------------------------------------

 start:     mov bx, offset array_nums     ; use find function on 'array_nums'
            mov cx, 15
            call findBiggest

            ; add some code here to show a
            ; message if AX is what you expected or not
            ; AX should be 86 for the example array    

            mov ax, 0x4c00              ; terminate program
            int 0x21