Search code examples
assemblymaxx86-16emu8086

Assembly language: AL=max(AL,BL,CL)


I have to calculate the max value from 3 values using registers, and store the max value in AL. It is required to use jumps and compares.
For example I wrote how to determine the max value from 2 numbers, but I can't do it using 3.

mov bl,1
mov cl,2
cmp bl,cl
jg label1   ;jump if greater
mov al,bl   ;al keeps the maximum
jmp stop

  label1: mov al,bl
  stop:nop;

I should do the AL=max(AL,BL,CL) after this model.


Solution

  • Currently your code will always report BL for greatest! The line mov al,bl ;al keeps the maximum should read mov al, cl.

    For AL=max(AL,BL,CL), first find the max between AL and BL and keep it in AL that is to be modified anyway as it will be the result. Then find the max between the possibly new AL and CL yielding the final AL:

      cmp al, bl
      jg  OK1
      mov al, bl
    OK1:
      cmp al, cl
      jg  OK2
      mov al, cl
    OK2:
      ; AL is max(AL,BL,CL)
    

    This way registers BL and CL are not modified, if that's important.