max.asm

조건분기명령(cmp, jmp) 명령어 사용을 최소한으로 사용하여
두 값들 중 최댓값을 찾는 프로그램
max.asm
;file: max.asm
%include "asm_io.inc"
segment .data
message1 db "Enter a number: ",0
message2 db "Enter another number: ",0
message3 db "The larger number is: ",0
segment .bss
input1 resd 1
segment .text
global _asm_main
_asm_main:
enter 0,0
pusha
mov eax,message1
call print_string
call read_int ;eax
mov [input1],eax
mov eax, message2
call print_string
call read_int ;eax
xor ebx,ebx ;ebx=0
cmp eax,[input1]
setg bl ;ebx=(input2>input1)?1:0
neg ebx ;ebx=(input2>input1)?0xFFFFFFFF:0
mov ecx,ebx ;ecx=(input2>input1)?0xFFFFFFFF:0
and ecx,eax ;ecx=(input2>input1)?[input2]:0
not ebx ;ebx=(input2>input1)?0:0xFFFFFFFF
and ebx,[input1] ;ebx=(input2>input1)?0:[input1]
or ecx,ebx ;ecx=(input2>input1)?[input2]:[input1]
mov eax,message3
call print_string
mov eax,ecx
call print_int
call print_nl
popa
mov eax,0
leave
ret
setg
두번째 입력값(eax>[input1])이 최대값이면 1, 아니면 0으로 BL 레지스터를 설정한다.
neg
명령어는 2의 보수로 만드는 명령어이다. 즉 값에 (-1)을 곱한값을 준다.