代码之家  ›  专栏  ›  技术社区  ›  Alex

汇编程序任务-数组的最小值和最大值

  •  0
  • Alex  · 技术社区  · 15 年前

    我遇到了汇编程序代码的问题。我是装配工的新手,所以我自己解决它似乎很困难。

    任务是:“找到数组的最小和最大元素。”

    我所做的就是搜索最大元素。我不知道,如何检查最小元素,以及应该在哪里进行这种验证。或者,也许,我应该在找到最大元素后第二次循环遍历元素?

    代码:

    #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();
    }
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Wayne Conrad    15 年前

    如果用“jle”替换“jge”,会发生什么?试试看。

        2
  •  0
  •   Alex    15 年前

    如果有人感兴趣,下面是我的问题的解决方案(我今天在导师的帮助下发现了这个问题):

    #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 要比较的标签 斧头 用价值 MAX . 什么时候? 化学机械抛光 返回正值,脚本将赋值为 斧头 登记到 变量,然后跳到 m2 递减循环计数器的标签。求最大值的算法同样有效(标签 M1 )