일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- mp4fpsmod
- Value too long for column
- 겨울 부산
- Spring Batch
- JanusGateway
- terminal
- preemption #
- JanusWebRTCGateway
- python
- JanusWebRTCServer
- 개성국밥
- pytest
- table not found
- 코루틴 컨텍스트
- 자원부족
- kotlin
- k8s #kubernetes #쿠버네티스
- PersistenceContext
- PytestPluginManager
- 깡돼후
- vfr video
- JanusWebRTC
- 코루틴 빌더
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 오블완
- tolerated
- 달인막창
- 티스토리챌린지
- taint
- VARCHAR (1)
목록Programming Language/Assembly (7)
너와 나의 스토리
1) 사용자에게 원의 반경을 묻고 원의 면적을 계산하고 화면에 표시하라 call readfloat ; 사용자 입력 받아서 ST(0)에 넣음 fmul st(0),st(0) ; st(0)=st(0)*st(0) fldpi ; st(0)=pi, st(1)=사용자 입력값^2 fmul ; st(1)=st(1)*st(0), st(0) pop call writefloat 2) ax^2+bx+c=0 에서 다항식 근 구하기 (사용자로부터 a,b,c 값 받아서 구하기) 할 일: 1. a,b,c 사용자 입력 받기 2. B^2-4AC 구하기 3. 첫 번째 근 (-B+root(B^2-4AC))/2A 구하기 4. 두 번째 근 (-B-oot(B^2-4AC))/2A 구하기 include irvine32.inc .data coeffA ..
● FPU 피연산자 규칙 1) 0~2개의 피연산자가 올 수 있다 2) 즉시값은 피연산자로 올 수 없다 ㄴ 메모리나 FPU레지스터만 가능 3) 범용 레지스터는 사용할 수 없다. (eax,ebx이런 것) 4) 정수 피연산자의 메모리에서 FPU로 적재된다. 5) 만약 두 개의 피연산자를 가지면 하나는 무조건 FPU레지스터이여야 한다. ● 데이터 타입 1) REAL4: 32비트 (4byte)
● push / pop include irvine32.inc .data val1 byte 1h val2 byte 2h val3 byte 3h .code main proc mov eax,0 mov ah,val1 mov al,val2 push eax call tmp1 pop eax call dumpregs exit main endp tmp1 proc mov ah,5h mov al,10h ret tmp1 endp end main main에서 ah=1,al=2 값을 넣고 이 eax 값을 stack에 push해놓은 후 tmp1을 호출해서 여기서 eax 값을 바꾼다고 해도 나중에 main에 돌아와서 원래 stack에 저장해 둔 것을 pop하면 tmp1 호출 전 값으로 되돌아옴 ● pushad / popad 32bi..
● JMP 명령어 형태: top: . . jmp top jmp top하면 top:이 있는 곳으로 간다 (EIP가 top:이 있는 곳을 가리키게 됨) -> 루프처럼 쓸 수 있음 ● Local / Global Lables main PROC jmp L2 ; error L1:: ; global label exit main ENDP sub2 PROC L2: ; local label jmp L1 ; ok ret sub2 ENDP 다른 프로시저에서 이동해 오려면 "L1::"처럼 :를 2개 붙인다. L1::로 하면 현재 프로시저에서도, 다른 프로시저에서도 올 수 있다 ● Loop 명령어 형태: mov ecx,3 L1: . . loop L1 ecx만큼 루프를 돌게된다.
● 프로시저 호출 - call 명령어 사용 ● 프로시저 Procedure 역할 Clrscr 콘솔 클리어 (커서는 왼쪽 상단에 위치) Crlf 줄 바꿈 (0Dh,0Ah 출력) Delay 매개변수: eax(delay할 시간) eax에 넣은 시간만큼 (ms 단위) 작동 멈춤 DumpMem 매개변수: esi(배열의 시작주소), ecx(배열의 원소의 개수). ebx(배열의 타입크기) esi에서부터 값을 ecx개 출력하며 한번 출력시마다 주소를 ebx만큼 증가시킨다. DumpRegs 범용레지스터와 플래그들을 전부 출력 GetCommandtail 매개변수: edx(buffer주소) 프로그램의 command-line 인자를 byte 배열에 복사 GetMaxXY(32) 매개변수: dh(행), dl(열) 콘솔 윈도우 버퍼..
●지역 변수 ex) proc1 PROC LOCAL curX:DWORD,curY:DWORD ; 지역 변수 mov curX,3 mov curY,4 ret proc1 ENDP ●프로시저에 매개변수 넘겨 주기 invoke명령어를 통해 다른 프로시저를 호출하면서 매개변수를 넘겨준다 ex) include irvine32.inc proc2 PROTO val1:DWORD, val2:DWORD ; proc2의 프로토타입을 선언해주면 ; proc2가 proc1 밑에 있어도 호출 가능해진다. .data .code main proc call proc1 exit main endp proc1 proc LOCAL curX:DWORD,curY:DWORD mov curX,3 mov curY,4 invoke proc2, curX,cur..
C/C++와 유사 구조체 형태 예시 [구조체이름] STRUCT [data] [구조체이름] ENDS COORD STRUCT x WORD ? y WORD ? COORD ENDS COORD 구조체는 MS-Window 라이브러리에 이미 존재하는 것으로 따로 선언해 줄 필요없이 바로 사용가능하다. PosXY COORD 이런식으로 사용 가능 ㄴ PosXY.x = 3 ㄴ PosXY.y = 30 으로 초기화 된다. ● 구조체 배열 ex1) .data MaxVal=3 AllPoints COORD MaxVal DUP() ; MaxVal개의 쌍 선언 .code ; index 직접 지정해서 사용하는 방법 mov (COORD PTR AllPoints[0]).X, 4 ; AllPoints[0].X =4 mov (COORD PTR..