반복문(2)

2025. 5. 25. 22:47어셈블리 프로그래밍

FOR문

  • 3,8,12,16.. 4의 배수를 50개의 합을 AX에 저장하는 프로그램
    MOV CX, 50
    MOV BX, 4
    MOV AX, 0
@TOP:
    ADD AX, BX
    ADD BX, 4
    LOOP @TOP
  1. CX 횟수를 50으로 지정
  2. BX,4를 활용하여서 4의 배수들을 저장
  3. AX, 0에는 전체 합을 저장
  4. ADD BX,4로 4의 배수를 모두 구해줌
  5. LOOP @TOP에서 계속 @TOP으로 이동하다가 CX가 0이면 다음으로 넘어감
LOOP횟수AX(누적합)BX(4의 배수)AX+BX (이진)
10+440000 0000 0000 0100
10180+40400000 0000 1101 1100
504900+2002000001 0011 1110 1100
  • 16비트 스택을 표로 구성하여 값 저장한 상태를 묘사하면 다음과 같음
주소저장된 값상태
0FF4HBZ=12현 상태에서는 가장 마지막에 PUSH
0FF6HAX=8AX레지스터에 8 저장 후 PUSH
0FF8HBX=8BX에 8 저장 후 PUSH
0FFAHAX=4AX에 4 저장 후 PUSH
0FFCHBX=4BX에 4 저장 후 PUSH
0FFEHAX=0첫번째로 AX에 저장 후 PUSH
  • SP는 PUSH 될 때마다 16비트 기준으로 2바이트씩 감소함

DO-WHILE

  • 입력 받은 한 문장에서 알파벳 순서상 가장 앞에 오는 대문자를 출력하는 프로그램
MOV BL, '['        ; '['는 'Z'보다 큰 문자 → 최소값 초기화
MOV AH, 1

@DO_WHILE:
    INT 21H         ; AL에 문자 입력
    CMP AL, 'A'
    JB @END_IF      ; AL < 'A' → 대문자 아님

    CMP AL, 'Z'
    JA @END_IF      ; AL > 'Z' → 대문자 아님

    CMP AL, BL
    JAE @END_IF     ; AL >= BL → 더 작지 않음

    MOV BL, AL      ; AL이 더 작으면 저장

@END_IF:
    CMP AL, 13      ; Enter 키 입력? (ASCII 13)
    JNE @DO_WHILE   ; 아니면 계속 반복

; 여기서 BL에 가장 작은 대문자 저장됨
MOV AH, 4CH
INT 21H

실습 예제

  • N+(N+1)+...+1을 구하기
MOV AH, 1        ; 문자 입력
INT 21H
SUB AL, 30H      ; ASCII → 숫자

MOV CL, AL       ; 반복 횟수 = 입력값
MOV BL, 0

@TOP:
ADD BL, CL       ; BL += CL (입력값)
LOOP @TOP

MOV AH, 4CH
INT 21H
  • 2진수에서 1의 개수를 카운트하여 출력하는 프로그램
MOV BL, 0          ; 숫자 개수 초기화

@WHILE:
    MOV AH, 1      ; 문자 입력
    INT 21H

    CMP AL, 0DH    ; Enter(0DH) 입력?
    JE @END_WHILE

    CMP AL, '0'    ; '0'인가?
    JE @WHILE      ; 0이면 넘김

    INC BL         ; 0이 아닌 숫자면 개수 증가

    ; 개수를 출력 (BL은 8비트 정수)
    MOV DL, BL
    ADD DL, 30H    ; 숫자를 ASCII 문자로
    MOV AH, 2
    INT 21H

    JMP @WHILE

@END_WHILE:
    MOV AH, 4CH
    INT 21H
  • 1,2,4,7....처럼 3개의 숫자의 합을 BX에 저 정하는 프로그램
MOV CX, 30     ; 반복 횟수 (예: 30번)
MOV BX, 1      ; 첫 번째 수열 값
MOV DX, 0      ; 증가값 (1부터 시작하게 INC DX 사용)
MOV AX, 0      ; 누적 합

@TOP:
    ADD AX, BX     ; 현재 수를 누적합에 더함
    INC DX         ; 증가값 +1 (1,2,3,...)
    ADD BX, DX     ; 다음 수열 값 계산
    LOOP @TOP      ; CX번 반복

MOV AH, 4CH
INT 21H

'어셈블리 프로그래밍' 카테고리의 다른 글

조건문 심화  (0) 2025.05.25
반복문  (0) 2025.05.25
조건문 구조(2)  (0) 2025.05.22
조건문 구조  (0) 2025.05.22
플래그 래지스터&디버거  (0) 2025.04.27