본문 바로가기

어셈블리어 공부용/x86 어셈블리어(ASSEMBLY)21

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.
어셈블리어 INT 21h 정리 INT 21H - 01H 키보드로부터 문자를 기다린다. 호출 AH = 01H 리턴 AL = 입력된 문자의 ASCII 코드 ​ INT 21H - 02H 현재의 커서 위치에 문자를 출력한다. 속성은 커서 위치의 문자의 속성에 따른다. 호출 AH = 02H DL = 문자의 ASCII 코드 ​ INT 21H - 07H 키보드로부터 한 문자를 에코없이 입력받는다. 호출 AH = 07H 리턴 AL = 1byte의 ASCII 코드 ​ INT 21H - 09H 문자열을 화면으로 출력한다. 호출 AH = 09H DS:DX = 문자열의 세그먼트와 오프셋 ​ INT 21H - 0AH 키보드로부터 리턴키가 들어올때 까지 입력받은 문자를 버퍼에 저장한다. AH = 0AH DS:DX = 버퍼의 서그먼트와 오프셋 ​ INT 21H.. 2019. 8. 17.
윈도우 10에서 도스박스로 도스디버거(DOS DEBUG) 실행하기 간단히 어셈블이 가능한 도스 디버거를 구동하는 방법입니다. DOSBox ━ 도스용 게임 구동기 도스박스에 대한 모든 것, 도스용 게임 구동, 정식 버전과 차별화된 DOSBox SVN 버전 제공 cafe995.daum.net [준비물] 도스박스 (위 사이트로 들어가셔서 다운로드 하시면 됩니다.) 디버거(debug.exe) (첨부파일로 위에 올려두었습니다.) 외부저장장치 (USB 같은 것.) * 참고로 역슬래쉬 입력 하는 방법은 \ 키 입니다. 백스페이스 바로 옆에있는거 맞습니다. 일단 USB저장장치나 다른 외부 저장소가 필요합니다. 다운로드 받은 디버거(debug.exe)를 외부저장소에 넣어줍니다. 도스박스를 구동합니다. 그리고 드라이브 레터를 확인해 줍니다. 제 경우는 G: 네요. mount d(도스박스.. 2019. 8. 16.
emu8086으로 어셈블리어 연습하기 [로또번호용 난수 6자리 뽑기] .MODEL SMALL .CODE ORG 100h ;100h번지부터 코드시작. ;---------------------------------------------- PROG: CALL MAIN ; 난수를 만들고 출력하는 역활을 담당. CALL ENND ; 프로그램을 종료하는 역활. ;---------------------------------------------- BLANK DB ' $' ; 공백출력을 위한것. ;---------------------------------------------- MAIN PROC NEAR ; 메인 프로시저 시작 MOV CX,06 ; 6개의 수를 뽑는다. AGAIN: PUSH CX ; CX레지스터 데이터를 스택에 저장한다 (바로 위에서 수록한 데이터 보호를 위함.) DR.. 2019. 8. 15.
emu8086으로 어셈블리어 연습 [16진수를 10진수로 변환 후 출력하기] 이번엔 AX레지스터에 16진수를 입력받았다고 가정하고, 이것을 10진수로 처리하여 출력해보겠습니다. .MODEL SMALL .CODE ORG 100h ;100h번지부터 코드시작 CALL MAIN ;'MAIN'프로시저 호출 HLT ;프로그램 중단 (MAIN 프로시저가 실행이 끝나면 HLT로 프로그램을 중단합니다.) ;------------ DECADT DB 7 DUP ('$') ;DECADT라는 바이트크기의 데이터공간을 설정. 메모리에 '$'를 7개 채운다. ;----------- MAIN PROC NEAR ;MAIN 프로시저의 시작 MOV AX,1234h ;1234h라는 수를 입력받았다고 가정했습니다. MOV BX,10 ;10으로 나누어 주기위해 BX레지스터에 10을 수록. MOV CX,0 ;CX레지스터.. 2019. 8. 15.
emu8086을 이용한 어셈블리어 연습 [16진수를 입력하여 16진수로 저장하기] 어셈블리어에선 사용자가 어떤 값을 입력하면 그 값에 대응하는 아스키코드값을 저장하게 됩니다. 가령 'A'를 입력받으면 레지스터엔 41이 저장되게 됩니다. 때문에 저장받은 후에 또다른 처리를 해주어야 합니다. .MODEL SMALL .CODE ORG 100h ERRORMSG DB 'ERROR!$' START: INPUTNUM PROC NEAR INPUT: MOV AH, 1 ; 문자 하나를 입력받는 기능번호 1번을 수록합니다. INT 21h ; CMP AL, 0Dh ; 엔터키(아스키코드:0Dh)가 입력되면 입력을 종료하고 메인루틴으로 돌아가는 역활을 합니다. JE CRLF ; 입력받은 키가 엔터키라면 먼저 띄워쓰기 루틴(CRLF)으로. 그 다음 메인루틴으로 이동하게 됨. SUB AL, 30h ; 아스키코드상.. 2019. 8. 15.