저는 초심자 인 asm입니다. 그래서 잠시 내 질문을 연구했지만 답은 만족스럽지 못했습니다. 표준 출력에 PSW 내용을 표시하는 방법이 궁금합니다. 다른 건, 어떻게 지시 포인터 값을 표시할까요? ypu가 나에게 힌트 (또는 더 나은 코드 스크래치)를 줄 수 있다면 나는 매우 감사 할 것입니다. 그것은 masm이나 8086 일 수도 있습니다. (사실 저는 차이점을 모르겠습니다.)PSW 내용 표시
0
A
답변
0
명령어 포인터는 x86 패밀리에서 직접 액세스 할 수 없지만 그 값을 검색하는 것은 매우 간단합니다. 그래도 정확하지 않을 것입니다. 서브 루틴 호출이 반환 주소를 스택에 배치하기 때문에 거기에서 복사 한 후 바이올라로 복사하면됩니다. 는 x86의 PSW는 플래그 등록라고
proc getInstructionPointer
push bp
mov bp,sp
mov ax,[word ptr ss:bp + 2]
mov sp,bp
pop bp
ret
endp getInstructionPointer
: 당신은 call
지시에 따라 옵 코드의 주소를 가지고있다. 명시 적으로 참조하는 두 가지 작업이 있습니다 (pushf
및 popf
). 당신이 짐작 하듯이, 당신은 단순히 스택에 플래그를 밀어 당신이 좋아하는 등록 어떤 일반적인 목적에로드 할 수 있습니다
pushf
pop ax
이 값을 표시하는 ASCII에 그 값을 변환하여 화면에 그들을 쓰기로 구성되어 있습니다. 이 작업에는 여러 가지 방법이 있습니다. "문자열 출력 어셈블리"를 검색하면 대답을 찾을 수 있습니다.
사소한 혼란을 없애기 위해 : 8086은 CPU 자체이지만 MASM은 어셈블러입니다. 구문은 어셈블러에 따라 다릅니다. MASM 어셈블리는 x86 어셈블리입니다. TASM 어셈블리는 NASM 어셈블리와 마찬가지로 x86 어셈블리입니다. "x86 어셈블리"라고 말하면, 그 또는 그녀는 이들 중 하나 (또는 다른 것)를 참조하고, 방언이 아닌 명령 집합에 대해 말합니다.
참고 위의 예는 16 비트 것으로, 8086에 대한 indtended 및 32 비트 모드에서 80386+에서 작동하지 않습니다