簡體   English   中英

匯編程序任務-數組的最小值和最大值

[英]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結果為負,則意味着axMIN 因此腳本跳到m1標簽以將ax值與MAX進行比較。 cmp MIN, ax返回正值,腳本將ax寄存器的值分配給MIN變量,然后跳轉到m2標簽以遞減循環計數器。 尋找最大值的算法的工作原理相似(標簽m1 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM