2014-02-28 3 views
1

두 개의 정수를 레지스터를 사용하여 추가하는 데 사용되는 다음 어셈블리 코드를 이해하는 데 어려움이 있습니다. 매우 성가신 문제는 아니며 구문을 익히기에 좋은 참고 자료가 부족합니다. 통찰력을 제게 줄 수 있다면. 나는 매우 감사 할 것이다. 두 개의 정수를 더하는 어셈블리 코드

MOV R1, #100 
MOV R2, #100 
MOV (R1), #50 
ADD R2,(R1) 

나는 주어진 레지스터에 숫자 100를 저장할 처음 두 줄, 나는 바로 옆에 두 줄에 괄호를 사용하는 목적을하지 않습니다 얻을. 그리고 이것은 숙제가 아니라, 그 뒤에있는 이론을 명확히하기위한 질문입니다.

질문은 지침을 실행 한 후 R1, R2의 값이 무엇입니까?

+0

답변은 무엇이며 그 이유는 무엇이라고 생각하십니까? 우리는 당신의 숙제를하기 위해 여기에 온 것이 아닙니다. 결국, 우리는 신용을 얻지 못합니다. –

+0

실제로, @Damien_The_Unbeliever 학문 정직은 그렇게 인정받을 것을 요구할 것입니다. 그렇지 않으면 대부분의 학교에서 심각한 범죄로 간주되는 표절이됩니다. –

+0

@Damien_The_Unbeliever : 이것은 숙제 문제가 아닙니다. 그리고 저는 대학생이 아니며, 저는 ISA를 스스로 공부하고 있습니다. (v.putha) – chamara

답변

-1

다른 웹 사이트에서 다음 설명을 발견 했으므로 대괄호 사용법을 이해하는 데 많은 도움이되었습니다. 나는 그것이 매우 너무 다른 사람들을 위해 명확하게 할 것입니다 생각, 그래서 아래에 게시 할 예정입니다 :


이 프로그램을 분석 할 수 있습니다 :

의 MOV AX, 47104 MOV DS, AX MOV의 [3998]을, 36 INT 32

... 첫 번째 명령 인 MOV AX (47104)는 컴퓨터에 번호 47104를 AX 위치에 복사하도록 지시합니다. 다음 명령 인 MOV DS, AX는 컴퓨터에 AX의 번호를 DS 위치에 복사하도록 지시합니다. 다음 명령 인 MOV [3998], 36은 36 번 메모리 위치에 메모리 위치를 지정합니다. 마지막으로 INT 32는 운영 체제로 돌아가서 프로그램을 종료합니다.

계속하기 전에이 프로그램의 작동 방식을 설명하고자합니다. CPU 내부에는 번호를 저장할 수있는 레지스터라고하는 여러 위치가 있습니다. AX와 같은 일부 레지스터는 일반적인 목적이며 특별한 작업을 수행하지 않습니다. DS와 같은 다른 레지스터는 CPU 작동 방식을 제어합니다.

DS는 단지 세그먼트 레지스터 일 뿐이며, CPU가 기록 할 수있는 메모리 영역을 선택하는 데 사용됩니다. 우리 프로그램에서는 CPU에 비디오 카드의 메모리에 액세스 할 것을 지시하는 DS에 47104라는 숫자를 넣습니다.

우리 프로그램이하는 다음 작업은 숫자 36을 비디오 카드의 메모리 3998에 넣는 것입니다. 36은 달러 기호의 코드이고 3998은 화면의 오른쪽 하단 모서리의 메모리 위치이므로 달러 기호는 몇 마이크로 초 후에 화면에 나타납니다.

마지막으로 우리 프로그램은 CPU에 인터럽트를 수행하도록 지시합니다. 인터럽트는 한 프로그램을 중지하고 다른 프로그램을 대신 실행하는 데 사용됩니다. 우리의 경우 우리는 프로그램을 끝내고 MS-DOS로 돌아가거나 우리 프로그램을 시작하는 데 사용 된 다른 프로그램으로 인터럽트 32를 원합니다.


이 예제에서 대괄호를 사용하면 레지스터가 아닌 메모리 위치에 값을 입력 할 수 있습니다. 최근에이 값은 비디오 카드에 의해 판독되어 화면에 기호를 표시합니다.

작성자의 크레딧 : http://www.swansontec.com/sprogram.html

관련 문제