【发布时间】:2020-01-12 03:31:33
【问题描述】:
我编写了以下程序,它从 10 个数字的数组中找到最大和最小数字,但它没有给我正确的最小值,
[org 0x0100]
start:
mov byte [swap],0
mov bx,0
loop1:
mov al,[data+bx]
cmp al,[data+bx+1]
jbe noswap
hswap:
mov dl,[data+bx+1]
mov [data+bx+1],al
mov [data+bx],dl
noswap:
add bl,1
cmp bx,9
jnz loop1
heckswap:
cmp byte [swap],0
jnz start
store:
mov al,[data]
mov [min],al
mov bl,[data+9]
mov [max],bl
mov ax,0x4c00
int 0x21
data: db 2,10,3,4,7,8,6,5,9,1
swap: db 0
max: db 0
min: db 0
它应该给出最小值 1,但它给出了第一个内存地址的值,即交换后存储在 [data] 中的任何值。代码使用8086架构编译。
【问题讨论】:
-
顺便说一下,在我看来,对数组进行排序以找到最大值和最小值是多余的。只需遍历数组并存储迄今为止找到的最小和最大的。
标签: assembly nasm x86-16 bubble-sort dosbox