본문 바로가기

emu808610

emu8086으로 어셈블리어 연습 [ROL 명령어로 2의 거듭제곱 단위로 수 나열하기] .MODEL SMALL .CODE ORG 100h PROG: CALL MAIN MAIN PROC NEAR MOV CL, 1 ; 비트를 왼쪽으로 1만큼 이동시키기 위해서 CL에 1을 넣습니다. MOV AL,1 ; AL레지스터에 1을 넣어줍니다. ROLAL: ROL AX,CL ; AX 레지스터에 있는 비트들을 왼쪽으로 한 칸 움직입니다. 한 칸씩 움직일 때마다 2배씩 수가 증가합니다. PUSH CX ; 데이터를 스택에 저장. PUSH AX ; 데이터를 스택에 저장. MOV CX,0 ; 진수변환 앞서서 CX레지스터 청소 DECA: MOV DX,0 ; 진수변환 앞서서 DX레지스터 청소 MOV BL,10 ; 10을 곱해주기 위하여 BL에 10 입력. DIV BX ; AX 레지스터를 10으로 나눎. PUSH DX .. 2019. 8. 18.
emu 8086으로 어셈블리어 연습 [16진수 음수(보수) 10진수로 출력하기] 어셈블러에 10진수를 입력하게되면 메모리에는 16진수 형태로 저장되어 집니다. 때문에 10진수로 데이터를 입력했다고해도 출력할 때는 10진수로 변환해줄 필요가 있습니다. ​ 그 중에서도 십진수 음수는 2의 보수형태의 16진수로 저장되어 지는데, 이 2의 보수를 10진수로 그대로 변환하면 전혀 엉뚱한 값이 나옵니다. 때문에 음수는 특별한 처리를 해주어야 하는데 그 예제를 살펴보겠습니다. 예제에서는 1135와 -1135를 입력받았다고 가정했습니다. .MODEL SMALL .CODE ORG 100h ;--------------- PROG: CALL MAIN ;전체적인 흐름입니다. 메인 프로시저가 끝나면 HLT로 프로그램을 중단합니다. HLT ;--------------- NUM1 DW 1135 ; DW 단위 .. 2019. 8. 18.
emu8086으로 어셈블리어연습 [99 Bottles of Beer] Hello World 다음으로 예제로 많이 사용되고있는 99 Bottles of Beer 노래 가사 출력하기 입니다. .MODEL SMALL .CODE ORG 100h PROG: JMP MAIN ;------------------------------ BEERS DB 63h ;맥주의 갯수 99개. BEER1 DB ' BOTTLES OF BEER ON THE WALL, $' BEER2 DB ' BOTTLES OF BEER.$' BEER3 DB 'TAKE ONE DOWN AND PASS IN AROUND ,$' BEER4 DB ' BOTTLES OF BEER ON THE WALL.$' NOBEER DB 'no more bottles of beer on the wall.$' NOBEER1 DB 'No more.. 2019. 8. 18.
emu8086으로 어셈블리어연습 [어셈블리어 구구단] .MODEL SMALL .CODE ORG 100h PROG: CALL MAIN ;MAIN 프로시저 불러오기 HLT ;MAIN 프로시저가 끝나면 프로그램을 중단시킨다. BLANK1 DB 'X$' ;구구단 출력시에 x 출력을 담당하는 데이터영역입니다. BLANK2 DB '=$' ;구구단 출력시에 = 출력을 담당하는 데이터영역입니다. CRLF DB 0Dh,0Ah,'$' ;캐리지리턴, 라인피드 (줄바꿈)를 담당하는 데이터영역입니다. MAIN PROC NEAR ;메인 프로시저 시작. MOV AL,2 ;구구단의 시작은 2 x MOV BL,1 ;1 이니까 사용할 레지스터에 데이터를 수록합니다. MOV CX,0 ;구구단 출력에 앞서서 cx레지스터를 청소합니다. TOP: PUSH AX ;AX값을 잠시 스택에 저장합니다... 2019. 8. 18.
emu8086으로 어셈블리어연습 [비디오램에 직접 접근 하여 테트리스 미노 그리기] BLUE EQU 11h ;EQU 어셈블리어 명령어는 고급언어에서 변수선언이랑 비슷하다고 보시면 됩니다. GREEN EQU 22h ;즉 GREEN 을 오퍼랜드 자리에두면 실제로는 22h가 입력되는겁니다. CYAN EQU 33h RED EQU 44h PINK EQU 55h ORGE EQU 66h GARAY EQU 77h BLOCK EQU 20h .MODEL SMALL .CODE ORG 100h PROG: ;메인루틴 CALL MAIN ;이건 메인프로시저 CALL DISPCLR MOV CORTYPE,BLUE ;(J미노) MOV SI,0 MOV CX,2 CALL BLOCK MOV SI,160 MOV CX,6 CALL BLOCK MOV CORTYPE,ORGE ;(L미노) MOV SI,176 MOV CX,6 CALL.. 2019. 8. 18.
emu8086 어셈블리어 연습 [이중루프문] .MODEL SMALL .CODE ORG 100h PROG: CALL DOUBLELOOP HLT DOUBLELOOP PROC NEAR MOV CX,2000h ;루프를 2000h 만큼 돌리기 LOOPHERE2: PUSH CX ;첫 번째 루프값 저장하기 MOV CX,2000h ;두 번째 루프값 전달하기 LOOPHERE: ;2000h만큼 루프 LOOP LOOPHERE ; POP CX ;첫 번째 루프값 가져오기 LOOP LOOPHERE2 ;맨 위로 RET DOUBLELOOP ENDP END PROG emu8086에선 코드를 실행하면 느리게 실행되지만, 도스환경에선 엄청 빠르게 처리됩니다. 그래서 게임같은것을 만들땐 이중루프문이나 삼중루프문으로 프로그램 속도를 잡을 필요가 있습니다. 프로그램이 너무 느리면 루프횟.. 2019. 8. 18.