어셈블리 문법 보강 4월 10일
MASM 어셈블리 OPCODE OPRAND1, OPRAND2 JMP명령 숫자 지정 오퍼레이션 방향 주의 교재의 9장 참조 각 명령어와 관계된 플래그들 이해 ex) 명령어 JA 현재 C=0 and Z=0 일 때 Jump수행 숫자 지정 MOV AX, 0x300 (MOV AX, 300H) MOV AX, 0x1A3F (MOV AX, 1A3FH) MOV AX, 0xFFFF (MOV AX, 0FFFFH)
MASM 어셈블리 입출력 포트 설정 RAM의 100H에서 프로그램 시작 어셈블 시 사라지는 것들 (Directives) 8255 레지스터 설정 (이전 수업시간에 배웠음) TEST.ASM 참고 RAM의 100H에서 프로그램 시작 ORG 100H 어셈블 시 사라지는 것들 (Directives) 지시자들 code segment assume cs:code code ends end 각종 라벨들 START, SH_LOOP, …
어셈블리 주의사항 <일반적인 코드 설정> <8086 보드를 위한 설정> CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 100H // 코드 작성 CODE ENDS DATA SEGMENT ORG 10000H // 데이터 작성 DATA ENDS END CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 100H // 코드 작성 // 데이터 작성 CODE ENDS END 하나의 세그먼트 안에 코드와 데이터를 모두 설정하세요.
어셈블리 기초 MASM 명령어 MOV AX(레지스터), 데이터값 XOR AX(레지스터), 데이터값 레지스터에 값을 저장해야 할 경우 XOR AX(레지스터), 데이터값 MOV AX, F0F0H XOR AX, FFFFH AX : 0F0FH CMP AX(레지스터), 데이터값 레지스터 값과 데이터값의 비교가 필요할 경우 JMP <라벨이름> 현재 실행라인에서 라벨위치로이동 Ex) LOOP: XOR AX, FFFFH MOV AH, 00H START: MOV AX, FFFFH JMP LOOP
어셈블리 기초 MASM 명령어 JE <라벨이름> JNE <라벨이름> CMP 명령결과, 레지스터 값과 비교 데이터값이 같을 경우 JMP Ex) MOV AX, F0H CMP AX, FFH JE LOOP JNE <라벨이름> CMP 명령결과, 레지스터 값과 비교 데이터값이 다를 경우 JMP Ex) MOV AX, FFH JNE LOOP OUT <입출력 포트 주소>, <레지스터> 레지스터 값을 출력포트로 Write할 경우 출력되는 값이 1이면 해당 LED는 OFF, 0이면 ON IN <레지스터>, <입출력 포트 주소> 입력포트로부터 데이터값을 레지스터로 Read할 경우 입력되는 값이 1이면 해당 스위치는 OFF, 0이면 ON
어셈블리 기초 MASM 명령어 루프문 레지스터 C의 While문 역할, 어떤 조건을 만족할때까지 명령을 실행해야할 경우 Ex) MOV AX, FFH LOOP: SHL AX, 1 CMP AX, 0 JNE LOOP OUT PORT_B, AX 레지스터 AX, BX, CX, DX는 16비트 레지스터 AH, BH, CH, DH는 상위 8비트 레지스터 AL, BL, CL, DL은 하위 8비트 레지스터 Ex) MOV AX, 1111111100000000B(0FF00H) MOV AH, 00000000B MOV AL, 11111111B AX 0000000011111111B(00FFH)