当前位置 - 무료 법률 상담 플랫폼 - 법률 자문 - 어셈블리 스크립트

어셈블리 스크립트

첫째, 데이터 전송 지침

1. 범용 데이터 전송 지침.

MOV 전송 단어 또는 바이트입니다.

MOVSX 는 전송 전에 기호를 확장합니다.

MOVZX 는 먼저 0 으로 확장한 다음 전송됩니다.

푸시는 단어를 스택에 밀어 넣습니다.

스택에서 단어를 꺼냅니다.

푸사는 AX, CX, DX, BX, SP, BP, Si, DI 를 차례로 스택에 밀어 넣었다.

POPA 는 Di, Si, BP, SP, BX, DX, CX, AX 스택을 차례로 꺼냅니다.

PUSHAD 는 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 를 차례로 스택에 밀어 넣습니다.

POPAD 는 EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX 를 차례로 스택으로 배출합니다.

BSWAP 는 32 비트 레지스터의 바이트 순서를 교환합니다.

XCHG 교환 단어 또는 바이트입니다. (하나 이상의 피연산자는 레지스터이며 세그먼트 레지스터는 피연산자로 사용할 수 없습니다. ) 을 참조하십시오

CMPXCHG 비교 및 교환 피연산자. (두 번째 피연산자는 누적기 AL/AX/EAX 여야 함)

XADD 를 교환한 다음 누적합니다. (결과는 첫 번째 피연산자에 있습니다.)

바이트 조회 테이블 변환. ── BX 는 256 바이트 테이블의 시작점을 가리키고, AL 은 테이블의 인덱스 값 (0-255 또는 0-FFH) 입니다. AL 반환은 조회 테이블의 결과입니다. ([BX+ 엘]-> 알루미늄)

2. 입/출력 포트 전송 명령.

입/출력 포트 입력. (구문: 누계기에서 {포트 번호 │DX})

OUT I/O 포트 출력. (구문: OUT {포트 번호 │DX}, 누적 기) 입력/출력 포트가 immediate mode 에 의해 지정된 경우 범위는 0-255 입니다. 레지스터 DX 가 지정된 경우 범위는 0-65535 입니다.

3. 대상 주소 전송 명령.

LEA 는 유효한 주소를 로드합니다. 예: LEA DX, string 은 오프셋 주소를 DX 에 저장합니다.

LDS 는 대상 포인터를 보내고 포인터 내용을 DS 에 로드합니다. 예: LDS SI, string 은 세그먼트 주소: 오프셋 주소를 DS:SI 에 저장합니다.

LES 는 대상 포인터를 전송하고 포인터 내용을 ES 로 로드합니다. 예: LES DI, string 은 세그먼트 주소: 오프셋 주소를 ES:DI 에 저장합니다.

LFS 는 대상 포인터를 전송하고 포인터 내용을 FS 로 로드합니다. 예: LFS 디, 현악; 세그먼트 주소: 오프셋 주소를 FS:DI 에 저장합니다.

LGS 는 대상 포인터를 전송하고 포인터 내용을 GS 에 로드합니다. 예: LGS 디, 현악; 세그먼트 주소: 오프셋 주소를 GS:DI 에 저장합니다.

LSS 는 대상 포인터를 전송하고 포인터 내용을 SS 에 로드합니다. 예: LSS 디, 현악; 세그먼트 주소: 오프셋 주소를 SS:DI 에 저장합니다.

4. 전송 명령에 서명하십시오.

LAHF 국기 등록 이전, 국기를 로딩했군요.

SAHF 플래그 레지스터 전송, AH 콘텐츠를 플래그 레지스터로 로드

PUSHF 마커 스택.

POPF 태그 스택.

PUSHD 32 비트 플래그가 스택에 배치됩니다.

POPD 32 비트 플래그가 스택에 없습니다.

둘째, 산술 연산 명령

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

부가물을 첨가하다

반올림 더하기가 있는 ADC.

INC 가 1 을 추가합니다.

AAA 덧셈의 ASCII 코드 조정.

DAA 덧셈의 소수 조정.

빼다.

SBB 는 차용 빼기를 사용한다.

12 월 빼기 1.

NEG 반전 (음수 0)

CMP 비교. (두 피연산자를 빼면 플래그 비트만 수정되고 결과는 반환되지 않습니다.)

AAS 빼기의 ASCII 코드 조정.

DAS 빼기의 소수 조정

MUL 부호 없는 곱셈입니다.

IMUL 정수 곱셈입니다. 위의 두 가지 결과는 AH 와 AL (바이트 연산) 또는 DX 와 AX (단어 연산) 로 반환됩니다.

AAM 곱셈 ASCII 코드 조정

부호 없는 나눗셈.

IDIV 정수 나누기. 위의 두 항목은 결과를 반환합니다. 몫은 AL 을 반환하고 나머지는 AH, (바이트 연산) 를 반환합니다. Or 몫은 AX 를 반환하고 나머지는 DX, (단어 연산) 를 반환합니다.

AAD 사 ASCII 코드 조정.

CBW 바이트를 단어로 변환합니다. (AL 의 바이트 기호를 AH 로 확장)

CWD 단어를 이중 단어로 변환합니다. (AX 에 있는 단어의 기호를 DX 로 확장)

CWDE 단어를 이중 단어로 변환합니다. (AX 의 단어 기호를 EAX 로 확장)

CDQ 이중 단어 확장. (EAX 에서 이 단어의 상징은 EDX 까지 확장되었습니다.)

셋째, 논리 연산 명령

및 연산.

역시 조작이다.

XOR 연산입니다.

반전은 없습니다.

테스트를 테스트합니다. (두 피연산자는 각각 및 이며 플래그 비트만 수정하고 결과는 보내지 않습니다.)

SHL 논리가 왼쪽으로 이동합니다.

살산수는 왼쪽으로 이동한다. (=SHL)

SHR 논리가 오른쪽으로 이동합니다.

SAR 알고리즘이 오른쪽으로 이동합니다. (=SHR)

ROL 루프는 왼쪽으로 이동합니다.

ROR 루프는 오른쪽으로 이동합니다.

반올림 주기에서 RCL 은 왼쪽으로 이동합니다.

RCR 은 반올림 주기 동안 오른쪽으로 이동합니다.

위의 8 개 이동 명령의 이동 횟수는 255 회에 달할 수 있다.

한 번 이동하면 SHL AX, 1 과 같은 opcode 를 직접 사용할 수 있습니다.

Shift > 1 에서 이동 횟수는 레지스터 CL 에 의해 제공됩니다.

예를 들어, MOV CL, 04

화학 발광 다이오드

넷째, 문자열 명령어

소스 문자열 세그먼트 레지스터: 소스 문자열 인덱스입니다.

ES:DI 대상 문자열 세그먼트 레지스터: 대상 문자열 인덱스.

CX 반복 카운터.

AL/AX 스캔 값입니다.

D 플래그 0 은 SI 와 DI 가 반복 작업 중에 자동으로 증가해야 함을 나타냅니다. 1 은 자동으로 줄여야 함을 나타냅니다.

Z 플래그는 스캔 또는 비교 작업의 끝을 제어합니다.

MOVS 현 전송. (MOVSB 전송 문자. MOVSW 전송 텍스트. MOVSD 전송 이중 단어. ) 을 참조하십시오

CMPS 문자열 비교. (CMPSB 비교 문자. CMPSW 비교어. ) 을 참조하십시오

SCAS 문자열 스캔. AL 또는 AX 의 내용을 대상 문자열과 비교하고 비교 결과를 플래그 비트에 반영합니다.

로드 코드. 소스 문자열의 요소 (단어 또는 바이트) 를 AL 또는 AX 로 하나씩 로드합니다. (LODSB 전송 문자. LODSW 에서 문자를 보냅니다. LODSD 전송 이중 단어. ) 을 참조하십시오

STOS 는 현을 구했다. 이것은 LODS 의 역과정이다.

CX/ecx 의 대표

REPE/REPZ ZF= 1 또는 비교 결과가 같을 때 CX/ecx

ZF=0 이거나 비교 결과가 같지 않은 경우 및 CX/ecx

REPC 및 CX/ecx 의 CF= 1 시간

CF=0 및 CX/ecx 의 REPNC

동사 (verb 의 약어) 프로그램 전송 명령

1. 무조건 분기 명령 (긴 분기)

JMP 무조건 전송 명령

호출 프로시저 호출

RET/RETF 프로그램이 반환했습니다.

2. 조건부 분기 명령 (-128 에서+127 까지의 거리 내에 있는 짧은 분기)

(그리고 (SF XOR OF)= 1, op 1

JA/JNBE 가 작거나 같지 않을 때 전송됩니다.

JAE/JNB 는 전송보다 크거나 같습니다.

JB/JNAE 가 transfer 보다 작습니다.

JBE/JNA 가 전송보다 작거나 같습니다.

위의 네 가지 테스트 부호 없는 정수 연산의 결과 (기호 c 와 z).

JG/JNLE 이 이적보다 큽니다.

JGE/JNL 은 전송보다 크거나 같습니다.

JL/JNGE 는 양도할 수 없습니다.

JLE/JNG 는 전송보다 작거나 같습니다.

위의 네 가지 테스트에는 기호 정수 연산 (기호 S, O, Z) 의 결과가 있습니다.

JE/JZ 는 전이와 같습니다.

JNE/JNZ 는 시간 전이와 같지 않습니다.

반올림할 때 JC 전이가 있습니다.

JNC 는 시간 전송을 반올림하지 않습니다.

JNO 가 넘칠 때 전송하지 않습니다.

JNP/JPO 우칭은 홀수일 때의 점프입니다.

JNS 기호 비트가 "0" 일 때의 변환입니다.

JO 가 오버플로우되어 전송되었습니다.

당일 원 /JPE 패리티가 짝수일 때 이체합니다.

JS 기호 비트가 "1" 일 때 전송됩니다.

3. 순환 제어 명령 (짧은 전송)

0 이 아닐 때 CX 루프입니다.

LOOPE/LOOPZ CX 는 0 이 아니며 플래그 Z= 1 주기입니다.

루프는 LOOPNE/LOOPNZ CX 가 0 이 아니고 플래그 Z=0 일 때 발생합니다.

JCXZ·CX 가 0 일 때 전송됩니다.

JECXZ·ECX 가 0 일 때 전송됩니다.

4. 프로그램을 중단하다

INT 인터럽트 명령

오버플로우 인터럽트로 들어가다

IRET 인터럽트 반환

5. 프로세서 제어 명령

HLT 프로세서는 인터럽트나 리셋 신호가 나타날 때까지 일시 중지됩니다.

WAIT 는 칩 리드 테스트가 높을 때 CPU 를 대기 상태로 만듭니다.

ESC 가 외부 프로세서로 전환됩니다.

잠그고, 버스를 막아라

NOP null 작업.

STC 반올림 플래그를 설정합니다.

CLC 는 반올림 플래그를 지웁니다.

CMC 반올림 플래그가 거꾸로 되어 있습니다.

STD 방향 플래그를 설정합니다.

CLD 명시적 방향 표시.

STI 설정 인터럽트 가능 비트.

CLI 지우기 인터럽트 비트.

여섯째, 거짓 설명

DW 정의자 (2 바이트).

프로시저 정의 프로시저. 예: name proc var 1, var2, var3.

ENDP 프로세스가 종료되었습니다. 예: 이름 endp

세그먼트는 하나의 세그먼트를 정의합니다. 샘플 이름 세그먼트

세그먼트 레지스터 주소 지정이 설정되어 있다고 가정합니다. 예: cs: 코드, DS: 데이터, SS: 스택을 가정합니다.

끝 세그먼트 끝점. 이름 끝

END 프로세스가 종료됩니다 (프로세스가 실행하는 첫 번째 명령인 명령 포털도 표시).

일곱째, 프로세서 제어 명령:

로고 처리 명령 CLC (반올림 위치 0 명령)

반올림 부정 명령

STC (반올림 위치가 1 인 명령)

CLD (방향 플래그 설정 1 명령)

STD (방향 표시 위치 1 명령)

CLI (인터럽트 플래그 설정 0 명령)

STI (인터럽트 플래그 설정 1 명령)

조작 없음

닫기

대기 (대기)

ESC (이스케이프 코드)

Lock++++++++++++++++++++++++++++++++++++++++++

먼저 다음 설명을 설명하겠습니다.

St(i): 부동 소수점 레지스터를 나타냅니다. 앞서 언급한 푸시 스택 및 스택 작업은 모두 st(i) 에 영향을 줍니다.

Src, dst, dest, op 등. 모두 지시어의 피연산자를 나타냅니다. 여기서 src 는 소스 피연산자를 나타내고 dst/dest 는 대상 피연산자를 나타냅니다.

Mem8, mem 16, mem32, mem64, mem80 등. 메모리 피연산자를 나타내고 다음 값은 피연산자의 메모리 비트 수 (8 비트는 1 바이트) 를 나타냅니다.

X & lt-y 는 y 의 값을 x 에 넣는 것을 의미합니다 (예: ST (0)

1. 상수의 데이터 전송 및 작동 지침

명령 형식

명령어의 의미

수행된 작업

FLD src

실수를 st(0) 에 로드합니다

St (0) < -src (mem32/mem64/mem80)

현장 서비스 센터

정수를 st(0) 에 로드합니다

St (0) < -src (mem 16/mem32/mem64)

FBLD src

BCD 로드 및 st(0) 로 계산

St (0) < -src (mem80)

FLDZ

0.0 을 st(0) 에 로드합니다

St (0) < -0.0

FLD 1

1.0 을 st(0) 에 로드합니다

St (0) < -1.0

FLDPI

St(0) 에 pi 로드

St (0) < -응? (즉 원주율)

FLDL2T

Log2( 10) 를 st(0) 에 로드합니다

St (0) < -로그 2( 10)

FLDL2E

Log2(e) 를 st(0) 에 로드합니다

St (0) < -log2(e)

FLDLG2

Log 10(2) 을 st(0) 에 로드합니다

St (0) < -로그 10(2)

FLDLN2

Loge(2) 를 st(0) 에 로드합니다

St (0) < -로그 (2)

FST 대상

실수 st(0) 를 dest 에 저장합니다.

Dest & lt- st(0) (mem32/mem64)

FSTP 대상

Dest & lt-ST (0) (mem32/mem64/mem80); 그런 다음 스택 작업을 다시 수행합니다.

제 1 목적지

St(0) 를 dest 에 정수로 저장합니다.

Dest & lt- st(0) (mem32/mem64)

FISTP 대상

Dest & lt-ST (0) (mem16/mem32/mem64); 그런 다음 스택 작업을 다시 수행합니다.

FBST 대상

St(0) 를 BCD 의 dest 에 저장합니다.

Dest & lt- st(0) (mem80)

FBSTP 대상

Dest & lt-ST (0) (mem 80); 그런 다음 스택 작업을 다시 수행합니다.

2. 비교 설명

명령 형식

명령어의 의미

수행된 작업

FCOM

실수 비교

플래그 비트를 st(0)-st( 1) 의 결과 플래그 비트로 설정합니다

FCOM op

실수 비교

플래그 비트를 st(0)-op (mem32/mem64) 의 결과 플래그 비트로 설정합니다.

FICOM op

정수와 비교

플래그 값을 st(0)-op op (mem 16/mem32) 로 설정한 결과.

FICOMP op

정수와 비교

St(0) 와 op (MEM 16/MEM32) 를 비교한 후 스택 작업을 다시 실행합니다.

FTST

제로 테스트

St(0) 와 0.0 을 비교합니다.

부강가 (한)

St(0) 와 ST (I) 비교 [486]

부강가 (한)

St(0) 와 st(i) 를 비교하고 꺼내기 작업을 수행합니다.

푸콤프 가 (1)

St(0) 와 st(i) 를 비교하고 스택 꺼내기를 두 번 수행합니다.

FXAM

확인: 안구 st(0) (조건 코드 설정)

3. 사용설명서

명령 형식

명령어의 의미

수행된 작업

추가

FADD

실수를 추가합니다

St (0) < -st(0)+st( 1)

FADD src

St (0) < -st(0)+src (mem32/mem64)

세인트 FADD 거리

St (I) < -st(i)+st(0)

제 1 가

St (I) < -ST (I)+ST (0); 그런 다음 스택 작업을 수행합니다.

FIADD src

정수를 추가합니다

St (0) < -st(0)+src (mem 16/mem32)

감산

FSUB

실수 하나를 빼다

St (0) < -st(0)-st( 1)

FSUB src

St (0) < -st(0)-src (레지스터/메모리)

세인트 FSUB 거리

St (I) < -st(i)-st(0)

FSUBP st(i), ST

St (I) < -st(i)-st(0) 를 선택한 다음 꺼내기 작업을 수행합니다.

제 1 차 세계대전

실수 하나를 빼다.

St (0) < -st(i)-st(0)

FSUBRP st(i), ST

St (0) < -st(i)-st(0) 를 선택한 다음 꺼내기 작업을 수행합니다.

FISUB src

정수를 빼다

St (0) < -st(0)-src (mem 16/mem32)

FISUBR src

정수를 빼다.

St (0) < -src-st(0) (mem 16/mem32)

증가

FMUL

실수 하나를 곱하다

St (0) < -st(0) * st( 1)

FMUL st(i)

St (0) < -st(0) * st(i)

FMUL st(i), ST

St (I) < -st(0) * st(i)

FMULP st(i), ST

St (I) < -st(0) * st(i) 를 선택한 다음 꺼내기 작업을 수행합니다.

FIMUL src

정수를 곱하다.

St (0) < -st(0) * src (mem 16/mem32)

분리하다

FDIV

하나의 실수로 나누다

St (0) < -st(0) /st( 1)

제 1 가

St (0) < -st(0) /t(i)

제 1 가

St (I) < -st(0) /st(i)

FDIVP st(i), ST

St (I) < -st(0) /st(i) 를 선택한 다음 꺼내기 작업을 수행합니다.

FIDIV src

하나의 정수로 나누다.

St (0) < -st(0) /src (mem 16/mem32)

제 1 가

실수로 나누다

St (0) < -st(i) /st(0)

FDIVRP st(i), ST

FDIVRP st(i), ST

FIDIVR src

정수로 나누다

St (0) < -src /st(0) (mem 16/mem32)

FSQRT

제곱근

St (0) < -sqrt st(0)

FSCALE

2 의 St(0) 제곱

St (0) < -거리 2 호 (0)

FXTRACT

추출 지수:

St (0) < -ST(0) 지수; 밀렸다

St (0) < -ST(0) 의 유효 비트

FPREM

나머지를 취하다

St (0) < -st(0) MOD st( 1)

FPREM 1

나머지 (IEEE) 는 FPREM 과 동일하지만 IEEE 표준 [486] 을 사용합니다.

FRNDINT

원 (원)

St (0) < -int (ST (0)); RC 플래그에 따라 다름

절대값

절대값을 구하다

St (0) < -ABS (ST (0)); 로고 제거

FCHS

부호 변경 (음수 찾기)

St (0) < -st(0)

F2XM 1

계산 (2 배)-1

St (0) < -(거리 2 호 (0))-1

FYL2X

Y * log2(X 계산 (x)

St(0) 는 y 입니다. St( 1) 는 x; St(0) 및 st( 1) 를 st(0) * log2( st( 1)) 값으로 변경합니다.

FCOS

코사인 함수 Cos

St (0) < -COS( st(0))

FPTAN

탄젠트 함수 tan

St (0) < -탄 (st(0))

FPATAN

아크탄젠트 함수

St (0) < -ATAN( st(0))

FSIN

사인 함수

St (0) < -SIN( st(0))

FSINCOS

사인 함수

St (0) < -SIN( st(0)) 을 누른 다음 st( 1) 를 누릅니다

St (0) < -COS( st(0))

FYL2XP 1

Y * log2 계산 (x+1)

St(0) 는 y 입니다. St( 1) 는 x; St(0) 및 st( 1) 를 ST (0) * log2 (ST (1)+1) 값으로 변경합니다

프로세서 제어 명령

FINIT

FPU 초기화

FSTSW AX

상태 단어의 값을 AX 에 저장합니다.

AX<- 도시 고형 폐기물

FSTSW 대상

상태 단어의 값을 dest 에 저장합니다.

Dest & lt-MSW (mem 16)

FLDCW src

Src 에서 FPU 의 제어자를 로드합니다.

FPU CW & lt-src (mem 16

FSTCW 대상

FPU 제어 단어를 dest 에 저장합니다.

Dest & lt- FPU CW

FCLEX

예외를 지우다

FSTENV 대상

환경을 스토리지 주소 dest 에 저장하여 상태 단어, 제어 단어, 플래그 단어 및 예외 포인터의 값을 저장합니다.

FLDENV src

메모리 주소 src 에서 저장된 환경을 로드합니다.

F 대상 저장

FPU 의 상태를 94 바이트 길이의 dest 에 저장합니다.

FRSTOR src

Src 에서 FSAVE 에 저장된 FPU 상태를 로드합니다.

FINCSTP

FPU 에 대한 스택 포인터 값 증가

St (6) < -ST (5); St (5) < -st(4), ..., ST (0) < -응?

FDECSTP

FPU 의 스택 포인터 값 감소

St (0) < -ST (1); St (1) < -st(2), ..., ST (7) < -응?

프리가 (1)

플래그 레지스터 st(i) 를 사용하지 않았습니다.

FNOP

Null 작업, CPU 의 nop 에 해당

St (0) < -st(0)

기다리다

FPU 와 CPU 동기화: FPU 가 현재 opcode 를 완료할 때까지 CPU 를 중지합니다.

FXCH

명령을 교환하고 st(0) 및 st( 1) 값을 교환합니다.

St (0) < -st( 1)

St (1) < -ST (0)+++++내 손이 아파! ! 내가 검사했어! +++++++++++++