2012-03-18 3 views
0

저는 3과 5와 같은 2 개의 변수를 가지고 있습니다. 사용자가 연산 연산자를 입력하면 프로그램은 연산 결과를 반환합니다.8086 어셈블리로 기본 계산기를 만들려면 어떻게해야합니까?

예를 들어 사용자가 *을 입력하면 프로그램은 15을 출력해야합니다. 나는 회의에서 초보자이다.

도움 주셔서 감사합니다.

+3

먼저 순서도를 그리거나 "의사 코드"에서 수행 할 작업을 작성하십시오. 그런 다음 어셈블리로 변환하는 방법을 파악하십시오. 그리고 2/3가 쓰여졌을 때 가지고있는 것을 버리고 다시 시작하십시오. 그러면 문제가 더 잘 이해 될 것입니다. (제가 8086 어셈블러를 한 지 약 30 년이 지났습니다. 그래서 당신에게 줄 수있는 유일한 충고에 관한 것입니다.) –

+0

BTW, 먼저 [중절 표기법] (http : // ko)을 사용할지를 결정해야합니다. wikipedia.org/wiki/Infix_notation) 또는 [postfix notation] (http://en.wikipedia.org/wiki/Reverse_Polish_notation)을 참조하십시오. (Postfix는 코드 작성이 쉽고 강력하지만 사용자에게는 좀 덜 직관적입니다.) –

+1

8086 어셈블리에서 왜해야합니까? 이것은 숙제일까요? – Griwes

답변

1
start: 
    a = 3 
    b = 5 
    i = input 
    if i != '*' 
     goto not_mul 
    r = a * b 
    goto print_result 
not_mul: 
    if i != '/' 
     goto not_div 
    r = a/b 
    goto print_result 
not_div: 
    ... 
print_result: 
    print r 
    end 

특정 어셈블러로 한 줄씩 번역하십시오.

1

일반적으로 프로그래밍의 첫 번째 단계는 문제를 정의하는 것입니다. 계산기가 명령 줄 도구일까요, 멋진 GUI를 가지고 있습니까? 극한의 정확도를 얻기 위해 정수 수학 (예 : "5/3 = 1") 만 사용하거나 부동 소수점 (예 : "5/3 = 1.6666667")을 사용하거나 임의의 크기의 유리수를 사용합니까? 입력 된 순서대로 작업을 수행하거나 현재 수식을 추적하고이를 재정렬하여 정확도 및/또는 성능을 향상시키고 작업자 우선 순위 규칙 (예 : "5 + 3/2")에 따라 작업을 수행합니까? = 8/2 = 4 "또는"5 + 3/2 = 5 + 1.5 = 6.5 ")?

다음으로 (더 큰) 문제를 작은 문제로 나누고 메소드/함수/루틴으로 구현할 수있을만큼 작은 조각을 얻을 때까지 계속하십시오.

예를 들어, "계산기"는 "사용자 인터페이스", "운영자 추적"(예 : 사용자가 요청했으나 선행 규칙으로 인해 아직 수행되지 않은 작업 추적) 및 "운영자 취급 ". 이 조각들은 더 분리 될 수 있습니다 (예 : "사용자 인터페이스"는 "STDIN에서 연산 얻기"와 "계산기 상태 표시"로 나눌 수 있습니다.) 그리고 "연산자 처리"는 "곱셈", "나누기", "덧셈" 기타).

참고 : 어셈블리의 경우 최종본은 고수준 언어보다 약간 작습니다. C에서 "do_addition()"함수를 사용하는 것은 어리석은 일이며, 어셈블리에서 "do_addition :"루틴을 가지지 않는 것은 어리석은 일입니다.

일단 모든 것을 분리했다면 적어 두십시오. 이것은 UML 다이어그램 또는 플로우 차트 또는 무언가를 설명하는 텍스트 파일 일 수 있습니다. 소프트웨어가 얼마나 오랫동안 유지되고 얼마나 복잡한 지에 따라 달라집니다 (명령 행 "정수 전용"계산기는 매우 간단 할 수 있지만 고/무한 정밀도 GUI 계산기는 매우 복잡 할 수 있습니다).

마지막으로 모든 작은 조각을 구현하십시오. 위에서 아래로 작업 (예 : 사용자 인터페이스로 시작)하는 것이 좋지만 아래에서 위로 작업하는 것이 좋습니다 (예 : 더하기, 빼기 등을 수행하는 루틴으로 시작). 중요한 것은 당신이 한대로 수행 한 작업을 테스트 할 수 있다는 것입니다 (수행 한 작업을 테스트하기위한 임시 코드 작성 또는 공식적인 단위 테스트 구현 포함).

관련 문제