떨어지는 리버스 노트 (7)

1.ADC 명령: 캐리로 추가

adc al,5를 실행할 것입니다. 이 시점에서 C0을 C1로 변경한 다음

08이어야 하는데 결과는 09입니다. ADC 덧셈을 할 때 C1을 빌렸기 때문입니다.

2. SBB 명령어: 차용을 통한 빼기

여기도 C1으로 변경한 다음 sbb al,2를 실행합니다.

 여기도 원래 연산은 7이고 결과는 6입니다.

3. XCHG 명령: 데이터 교환

형식: XCHG R/M, R/M/IMM 양면은 동시에 메모리가 될 수 없으며 너비는 동일해야 합니다.

그런 다음 XCHG AL, CL을 실행합니다.

두 사람은 데이터를 교환합니다

4. MOVS 명령: 모바일 데이터 메모리 메모리

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]는 MOVSB로 축약됩니다.

MOVS WORD PTR ES:[EDI], WORD PTR DS:[ESI] 약어: MOVSW

MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] 약어: MOVSD

예:

그런 다음 MOVSD를 실행합니다.

 여기에 메모리 번호 001DD60에 저장된 데이터를 001DD5C에 복사합니다.

여기서 ESI와 EDI의 저장된 데이터는 +4이다.

5. STOS 명령어: Al/AX/EAX의 값을 [EDI]에 의해 지정된 메모리 단위에 저장

STOS 바이트 ES: [EDI] STOSB

STOS 단어 ES: [EDI] STOSW

STOS DWORD ES: [EDI] STOSD

예:

여기에서 방금 mov eax,12124545 실행을 마친 다음 edi에 해당하는 메모리 번호에 저장된 데이터에 주의하십시오.

 여기서 EDI에 해당하는 원래 메모리 번호에 저장된 데이터는 12124545가 되고 EDI 메모리 번호 +4는 001DDF64가 됩니다(DF 플래그 값이 1이면 EDI의 해당 메모리 번호는 -4임)

6. REP 명령: 카운트 레지스터(ECX)에 지정된 횟수만큼 문자열 명령을 반복 실행

예:

mov ecx,2를 실행한 후 rep stosd를 실행합니다.

그림에서 알 수 있듯이 이것은 STOSD의 두 번의 연속 실행입니다.

추천

출처blog.csdn.net/m0_51295934/article/details/122615480