2014-03-13 2 views
1

내 프로그래밍 클래스에 대한 또 다른 질문은, 실제로는 몇 가지입니다. 프로그램은 이미 작성되었으며 코드는 아래에서 찾을 수 있습니다.보호 모드 또는 실제 주소 모드에서 실행할 수 있습니다. 실행중인 모드를 어떻게 변경합니까?

질문 # 1 :

이제 지침에 명시 적으로 프로그램이 보호 모드 또는 실제 주소 모드에서 수행 할 수 있다고. 나는 Windows가 보호 모드에서 실행된다는 것을 확실히 알고 있으며 이러한 방식으로 연습을 완료했다는 것을 의미합니다. 원한다면 프로그램이 어떤 모드를 실행하게 할까? Windows가 보호 모드에서 작동한다고 말하는 것이 맞습니까?

질문 # 2 : 나는 아래의 어셈블리 코드에서 몇 가지 의견을 작성했습니다

는 사람은 레지스터의 처음 16 비트가 올바른 채워진 어떻게 주장합니까?

질문 # 3 : 최종 제출에 목록 파일지도 파일의 포함을위한

마지막 명령어 호출, 나는이 파일을 찾을 수 없습니다.


TITLE Subtracting Three Integers 

; This program takes three integers in hexidecimal and then subtract the 2nd and 3rd from the first. 

INCLUDE Irvine32.inc 

.code 
main PROC 

    mov ax,0109h  ;stores integer 265 in ax(16-bit register) 
    mov bx,0041h  ;stores integer 65 in bx(16-bit register) 
    mov cx,0064h  ;stores integer 100 in cx(16-bit register) 

    sub ax,bx 
    sub ax,cx 
    call DumpRegs 

    comment ! 
    The dump regs returns the value of EAX=763B0064 BAX=7FFD0041 CAX=00000064 
    because EAX EBX and ECX are 32-bit registers they fill the first 16-bits with 
    unallocated data from other programs 
    ! 

    exit 
main ENDP 
END main 

답변

0

1- 실수 및 보호 모드 간의 주된 차이점은 실시간 모드에서, 어떤 프로그램이 어떤 메모리 위치를 액세스 할 수 있으며, 보호 모드에서, 프로그램은 전용 특정 메모리 위치를 액세스 할 그들을 위해 마련했습니다. 리얼 모드의 문제는 분명합니다. 컴퓨터의 모든 프로그램이 모든 움직임을 볼 수 있습니다. 이것이 거대한 보안 문제이기 때문에 실제 모드는 쓸모 없게되었고, 현재 거의 모든 최신 운영 체제가 보호 모드로 실행됩니다.

프로그램이 범위를 벗어나는 메모리 위치에 액세스하지 않으므로 두 가지 모드로 프로그램을 실행할 수 있습니다. 모든 코드는 메모리에 배치되며 제한 범위 내에 있습니다. 범용 레지스터는 메모리에 없으므로 안전하게 사용할 수 있습니다.

정확합니다. 하지만 이 서명 된 경우 265 값이 16 비트 레지스터에 비해 너무 큽니다.

3- "맵"파일은 세그먼트에서 코드가 어떻게 배치되는지 보여주는 파일입니다. 또한 기호와 가상 주소를 표시 할 수 있습니다. "링커"파일은 명령 위치, 값 및 사용자가 입력 한 개별 opcode와의 관계를 보여줍니다.이 두 가지 모두 컴파일러에서 생성 할 수 있습니다.

+0

이 경우 제 컴파일러는 포함 된 컴파일러를 사용하여 x86 용으로 어셈블 된 Microsoft의 Visual Studio입니다. 어떻게 파일을 추출 할 수 있습니까? 또한 16 비트는 +/- 65,535까지 처리 할 수 ​​있고 8 비트는 +/- 255로 제한되어 있다고 생각합니다. 비트가 레지스터에 다른 양을 저장합니까? –

+0

@ Mr.Kruel 약 16 비트 - 0 ~ 65,535 또는 -256 ~ 256이 될 수 있습니다. -65,535 ~ 65,535 일 수 없습니다. –

+0

@ Mr.Kruel 목록 파일은 [여기] (http://msdn.microsoft.com/en-us/library/367y26c6.aspx)를 참조하십시오. 맵 파일은 [here] (http://msdn.microsoft.com/en-us/library/k7xkk3e2.aspx)를 참조하십시오. –

관련 문제