[英]Assembler task - min and max values of the array
我遇到了匯編代碼問題。 我是匯編程序的新手,所以我自己很難解決。
任務是:“查找數組的最小和最大元素。”
我已經做的就是搜索最大元素。 我不知道如何檢查最小元素以及將驗證放在何處。 或者,也許我應該在找到最大元素之后第二次遍歷元素?
碼:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() {
int N = 10, i;
clrscr();
// on this platform, int is 16-bit
int a[] = { 1, 4, -6, 12, -25, 10, 3, -4, 15, 7}, MAX, MIN, RESULT;
__asm{
mov cx, N
lea si, a
lodsw
mov bx, ax
mov dx, ax
dec cx }
m:
__asm{
lodsw
cmp dx, ax
jge m1
mov dx, ax
}
m1:
__asm{
loop m
mov MAX, dx
}
cout << "Max = " << MAX;
//cout << "Min = " << MIN;
getch();
}
如果將“ jge”替換為“ jle”會怎樣? 試試看。
如果某人感興趣,這是我的問題的解決方案(我今天在老師的幫助下找到了):
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() {
int N = 10, i;
clrscr();
int a[] = { 1, 4, -6, 12, -25, 10, 3, -4, 15, 7}, MAX, MIN, RESULT;
__asm{
mov cx, N
lea si, a
lodsw
mov MIN, ax
mov MAX, ax
dec cx
}
m:
__asm{
lodsw
cmp MIN, ax
jle m1
mov MIN, ax
jmp m2
}
m1:
__asm{
cmp MAX, ax
jge m2
mov MAX, ax
}
m2:
__asm{
loop m;
}
cout << "Max = " << MAX << "\n";
cout << "Min = " << MIN;
getch();
}
算法 :如果cmp MIN, ax
結果為負,則意味着ax
比MIN
。 因此腳本跳到m1
標簽以將ax
值與MAX
進行比較。 當cmp MIN, ax
返回正值,腳本將ax
寄存器的值分配給MIN
變量,然后跳轉到m2
標簽以遞減循環計數器。 尋找最大值的算法的工作原理相似(標簽m1
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.