在汇编程序中从数组中查找最大数
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
我编写了一个程序来从 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