Как улучшить этот код на ассемблере, чтобы я мог включить 10 цифр? - PullRequest
0 голосов
/ 31 октября 2019

Я написал этот код, чтобы найти максимальный элемент из массива из 3 элементов. Что бы вы, ребята, предложили изменить в коде, чтобы я мог включить 10 элементов?

Я перепробовал много изменений, но не могу понять, как получить максимальный элемент для массива из 10 элементов.

[ORG 0x100]

jmp start
num: dw 10,20,30
max: dw 0

start: mov ax,[num]
   mov bx,0
   mov [max],ax

add bx,2
mov ax,[num+bx]
cmp ax,[max]
jl next
mov [max],ax


next: add bx,2
mov ax,[num+bx]
cmp ax,[max]
jl end
mov [max],ax

end: mov ax,0x4c00
int 0x21

1 Ответ

0 голосов
/ 01 ноября 2019

Согласен, мой комментарий был меньше ожидаемого, но чтобы быть более информативным, нужно фактически выполнить упражнение, так что вот оно, и оно определенно не сложно.

    mov     si, Data
    xor     cx, cx
    mov     dx, Crunch

Crunch:
    lodsw
    test    ax, ax
    jz      Exit
    push    dx
    cmp     cx, ax
    ja      Exit
    mov     cx, ax
Exit:
    ret                  ;Either turns to another iteration or terminates

Data:   dw       4, 7, 21, 32, 208, 18, 44, 92, 244, 61, 108, 11, 0

Это динамично, так чтоон просто продолжит обрабатывать данные до нуля. Технически это цикл, но, по крайней мере, не в обычном смысле, где есть специальная инструкция, которая вынуждает двигаться вверх в коде.

...