2012-04-30 3 views
2

첫 번째 어셈블리 프로그램을 작성하고 싶습니다. 필자는 논문에 몇 가지 프로그램을했지만 컴파일러를 처음 사용했습니다. ideone을 사용하고 있습니다. 내 프로그램은 기본 어셈블리 프로그램

NEG A 
ADD A, 5 

지금 내가이 프로그램을 실행하고 그것을 확인하고 싶은 조립

A = 5 - A 번역 , 매우 간단합니다. 컴파일러로 어떻게 할 수 있습니까? 제발 도와주세요. 감사합니다

+0

왜이 프로세서는이 어셈블리입니까? –

+0

그것의 8086 마이크로 프로세서 –

답변

2

이것은 꽤 유효한 8086 어셈블리 언어입니다. 적어도, 내가 아는 어셈블리 구문은 아닙니다.

  • 8086 레지스터의 이름에는 AX, BX, CX, DX, BP, SP, SI 및 DI라는 이름의 두 개의 문자가 있습니다. 일부 특수 "세그먼트 레지스터" 수학에는 사용할 수 없습니다).
  • A이 메모리 위치 인 경우 어딘가에 레이블이 필요합니다. 그리고 어셈블러에 레지스터에 넣지 않기 때문에 단어 포인터라고 가정해야합니다. (레지스터 크기가 포인터 의미가 분명 할 수 있습니다,하지만 당신은 여기 레지스터를 사용하지 않을 :. P)는

(매우 유사) 8086 코드를 대응하는 것

neg ax 
add ax, 5 

또는, 메모리 :

neg word [A] 
add word [A], 5 

... other stuff here ... 
A: resw 1    ; some assemblers say this; others say `dw ?` 

(MASM 때로는 괄호없이 내가 아 그래서 다른 희망 누군가가 그 부분을 지울 수, MASM 구문을 모른다 할 수 있고, 거의 모든 다른 어셈블러가하는 방식이 아니다.. 물건 : P)

이제는 코드를 실행 파일로 바꾸기 위해 어셈블러 (예 : Yasm)가 필요합니다. (더 많은 코드가 필요할 것입니다. 여기에있는 코드는 그대로 실행되지 않습니다. 최소한 CPU가 레일에서 벗어나지 않도록 끝에 ret이 필요합니다.) 아마도 컴파일러를 사용하고 __asm 블록 (또는 컴파일러의 해당)에 모든 것을 포함 시키겠다.하지만 순수 어셈블리 언어로 작성하는 경우에는 일반적으로 그렇게하지 않을 것이다. 그것은 마치 망치로 망치를 쥐는 데 쓰레기를 사용하는 것과 같습니다.

+0

'(b | w | d | q)'는 초기화되지 않은 데이터를'.bss' 섹션에 선언하는 데 사용되며'd (b | w | d | q) '-'.data'에 초기화 된 데이터. :) –

+0

@ 대니얼 : 일부 어셈블러 (MASM/TASM?)는 초기화되지 않은 데이터를 선언하는 데'd [bwdq]'를 사용합니다. 그들의 db는 다른 사람들의 resb 1과 비슷합니다. – cHao

2

당신이 제공 한 사이트가 특정 언어를 설정하므로이 코드를 실행할 수있는 것처럼 보이지 않습니다. 어셈블리는 언어가 아니라 일련의 프로세서 지침입니다. 8086 에뮬레이터를 다운로드하여 실행하십시오.

-1

emu8086을 사용하기 시작하면 8086 용 어셈블리에서 더 쉽게 프로그래밍 할 수 있습니다.

관련 문제