'ASM'에 해당되는 글 4건

  1. 2009.10.27 색상 행렬
  2. 2009.10.27 무작위 문자열
  3. 2009.10.27 숫자 리스트 거꾸로 출력하기 1
  4. 2009.10.27 문자열 거꾸로 출력하기
INCLUDE Irvine32.inc

CHAR_VALUE = '!';

.code
main PROC
    call Clrscr
    mov eax, 0

    mov ecx, 16
L1:
    push ecx ;vary the background colors

    mov ecx, 16
L2:
    SetTextColor ;vary the foreground colors
    push eax
    mov al, CHAR_VALUE
    call WriteChar
    pop eax

    inc al ;next foreground color
    loop L2

    sub al, 16 ;reset forground color to zero
    add al, 16 ;select next backtround color
    call Crlf

    pop ecx
    loop L1

    mov eax, 7
    call SetTextColor

    exit
main ENDP
END main

문자를 모든 가능한 전경색과 배경색의 조합(16*16=256)으로 출력하는 프로그램
색상은 0부터 15까지의 번호가 부여되어서 모든 가능한 조합을 생성하기 위해서 중첩된 루프를 사용할 수 있다
Posted by 정훈승
INCLUDE Irvine32.inc

STR_COUNT = 20
STR_SIZE = 10

.data
aString BYTE STR_SIZE DUP(0), 0

.code
main PROC
    mov ecx, STR_COUNT ;outer loop count

L1:
    push ecx ;save outer loop count

    ;generate a single string
    mov ecx, STR_SIZE ;loop counter
    mov esi, OFFSET aString ;string index

L2:
    mov eax, 26 ;generate random int 0~25
    cal RandomRange
    add eax, 'A' ;range A~Z
    mov [esi], al ;store the character
    inc esi ;next character position
    loop L2

    mov edx, OFFSET aString ;dispay the string
    call WriteString
    call Crlf

    pop ecx ;restore outer loop count
    loop L1 ;repeat outer loop

    exit
main ENDP
END main

A부터 Z까지 중에서 10개의 대문자로 구성되는 20개의 임의의 문자열을 생성하여 표시하는 프로그램
Posted by 정훈승
INCLUDE Irvine32.inc

.data
aName BYTE 10, 20, 30, 40, 50
nameSize = ($ - aName)


.code
main PROC
    mov ecx, nameSize ;리스트 길이만큼 루프 돌린다
    mov esi, 0 ;스택에 리스트 삽입
L1:
    movzx eax, aName[esi] ;리스트 얻는다
    push eax ;스택을 민다
    inc esi ;esi + 1
    loop L1

    mov ecx, nameSize ;다시 루프횟수 설정
    mov esi, 0

L2:
    pop eax ;리스트 얻는다
    mov aName[esi], al
    inc esi

    mov edx, OFFSET aName
    call WriteDec ;리스트출력
    loop L2
    exit

main ENDP
END main

말그대로 숫자 거꾸로 출력하기
Posted by 정훈승
INCLUDE Irvine32.inc

.data
aName BYTE "Hoonseung Jeong", 0
nameSize = ($ - aName) - 1
;마지막에 0은 빼줌

.code
main PROC
    mov ecx, nameSize ;문자열 길이만큼 루프 돌린다
    mov esi, 0 ;스택에 문자열 삽입
L1:
    movzx eax, aName[esi] ;문자열 얻는다
    push eax ;스택을 민다
    inc esi ;esi + 1
    loop L1

    mov ecx, nameSize ;다시 루프횟수 설정
    mov esi, 0

L2:
    pop eax ;문자열 얻는다
    mov aName[esi], al
    inc esi
    loop L2

    mov edx, OFFSET aName
    call WriteString ;문자열출력
    call Crlf ;c++의 \n과 같음
    exit

main ENDP
END main

그냥 말 그대로 문자열 거꾸로
Posted by 정훈승