【发布时间】:2016-03-26 12:32:26
【问题描述】:
我想编写一个简单的程序来查找数组中的最小值。我使用的是 Intel 8086 架构(如果我是对的?)。问题是我对汇编语言完全陌生,而且我只是无法弄清楚我在代码中做错了什么,我被卡住了。
最后(退出前)我的ax 寄存器不包含我的结果。
恐怕它甚至没有把它放在那里(我用 Turbo Debugger 工具检查寄存器的值)。
.MODEL TINY
Data SEGMENT
arr_len EQU 5
arr DB 07h, 02h, 03h, 10h, 12h
minimum DB 255
Data ENDS
Code SEGMENT
ORG 100h
ASSUME CS:Code, DS:Data, SS:Code
Start:
mov ax, SEG Data
mov ds, ax ;load data to ds reg
mov cx, arr_len ;arr_length to counter
mov bx, OFFSET arr ;load first elem.
Search:
inc bx
cmp bl, [minimum] ;compare loaded elem with min
jb Swap ;if bl<minimum
Swap:
mov minimum, bl
loop Search
mov al, minimum ;result here?
mov ax, 4C00h
int 21h
Code ENDS
END Start
谁能给我建议这里有什么问题?提前致谢。
【问题讨论】:
-
你总是交换,即使当前元素不是最小值。
-
@user786653,我明白了,我将
loop指令替换为jb的正下方。现在它应该Swap只有当我发现价值较小的时候,对吧?或者我还是不明白... -
CMP BL, [minimum]比较的是 BL 中的值,而不是您想要的 arr 中的值。你永远不会从数组中加载任何值,这就是为什么你没有得到你想要的结果。而是将 AL 设置为 255,将 [BX] 的值与 AL 进行比较,然后从那里开始。