본문 바로가기

어셈블리어26

DOS DEBUG로 어셈블리어 초간단 예제. [S.D.J. 출력하기] 어셈블리어에 익숙해지기 위한 간단하고 아주 좋은 예제입니다. MOV AH,02 ;AH 레지스터에 기능번호 02번 수록. 화면에 한 글자씩 출력하는 기능이다. MOV DL,53 ;53h를 DL 레지스터에 수록. (도스디버그에선 모든 수가 16진수로 취급됩니다.) INT 21 ;화면에 한 글자 출력실행. MOV DL,44 ;DL 레지스터에 44h 수록. INT 21 ;화면에 한 글자 출력실행. MOV DL,4A ;DL 레지스터에 4Ah 수록. INT 21 ;화면에 한 글자 출력실행. INT 20 ;프로그램 종료. 이 코드를 응용하면 Hello World! 도 출력이 가능합니다. 물론 아스키코드를 알고 있어야 합니다. 2019. 8. 18.
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.