반복문, 배열, 함수
1518 단어 어셈블리 언어 입문어셈블리 언어 입문
반복문
어셈블리 언어에서 반복문의 구현은 두 가지 방법이 있다.
첫번째는 cmp, jmp를 이용하여 구현
CMAIN:
;1에서 100까지의 합을 구하는 문제
;ecx를 100에서 1씩 감소시키면서 eax에 더함
mov ecx, 100
mov eax, 0
LABEL_LOOP:
add eax, ecx
dec ecx
cmp ecx, 0
jne LABEL_LOOP
PRINT_DEC 1, eax
NEWLINE
두번째 방법은 loop문을 이용
CMAIN:
mov ecx, 100
xor ebx, ebx
LABEL_SUM:
add ebx, ecx
loop LABEL_SUM ; ecx를 1씩 감소시켜서 0이 되면 루프를 빠져나옴
배열
배열 선언 및 초기화
section .data
a db 0x01, 0x02, 0x03, 0x04, 0x05 ; 1Byte * 5 = 5 Bytes
b times 5 dw 1 ; 5 * 2 = 10Bytes
배열 순회 출력
CMAIN:
mov rax, a
xor ecx, ecx
LABEL_LOOP_A:
;배열의 데이터가 연속되어 저장되기 때문에 주소값을 1씩 올려 참조
PRINT_DEC 1, [a+ecx]
NEWLINE
inc ecx
cmp ecx, 5
jne LABEL_LOOP_A
xor ecx, ecx
LABEL_LOOP_B:
; B의 경우 word(2Bytes)로 선언되어 주소가 *2씩 건너뜀
PRINT_DEC 2, [b+ecx*2] ; [시작 주소 + 인덱스 * 크기]
NEWLINE
inc ecx
cmp ecx, 5
jne LABEL_LOOP_B
함수
두개의 입력값 중 큰값을 출력하는 함수
CMAIN:
;함수 (프로시저, 서브루틴)
;맥스값 출력 함수
mov eax, 10
mov ebx, 20
call MAX ;call 문법으로 함수 호출
PRINT_DEC 1, ecx
NEWLINE
MAX:
cmp eax, ebx
jg L1
mov ecx, ebx
jmp L2
L1:
mov ecx, eax
L2:
ret
xor rax, rax
ret
Author And Source
이 문제에 관하여(반복문, 배열, 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@doidoi88/반복문-배열-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)