GNUSim 8085

GNUSim8085
GNUsim8085
원저작자스리다르 라트나쿠마르
초기 릴리즈2003년, 18~19년 전
안정된 릴리스
1.4.1 / 2018년 7월 30일, 4년 전(2018-07-30)
저장소
기입처C
운영 체제Linux, Microsoft Windows
이용가능기간:영어, 아랍어, 아스투리아어, 브라질 포르투갈어, 에스페란토, 프랑스어, 독일어, 그리스어, 구자라티어, 이탈리아어, 칸나다어, 러시아어, 스페인어, 타밀어
유형컴퓨터 시뮬레이션
면허증.GNU 일반 공중 라이선스
웹 사이트gnusim8085.srid.ca

GNUSim8085는 Linux Windows용 인텔8085 마이크로프로세서용 그래픽 시뮬레이터, 어셈블러 및 디버거입니다.이는 [1]2008년 2월에 발표된 FOSS India Awards의 20개 수상자 중 하나이다.GNUSim8085는 2003년 가을 Sridhar Ratnakumar가 Linux용 시뮬레이터가 존재하지 않는다는 것을 깨달았을 때 작성되었습니다.GNUSim8085 [2]커뮤니티에서는 몇 가지 패치, 버그 수정 및 소프트웨어 패키징을 제공하고 있습니다.GNUSim8085 사용자는 [3]시뮬레이터의 코딩, 문서화, 테스트, 번역 및 포팅을 통해 시뮬레이터에 기여할 것을 권장합니다.

GNUSim8085 개발은 2016년 [4]9월 현재 진행 중입니다.

특징들

에디터

  1. 모든 표준 지침을 위한 대화형 입력 마법사가 있는 프로그램 편집기
  2. 명령, 오퍼랜드, 코멘트 등을 구별하기 위한 에디터의 구문 강조 표시.
  3. 조립된 코드를 16진수로 표시하는 별도의 opcode 뷰

어셈블러

  1. 8085의 모든 표준 명령 지원
  2. 데이터 로케이션을 제어하기 위한 3개의 어셈블러 디렉티브(.equ, .db, .ds)에 대한 최소한의 지원.코드 로케이션을 직접 제어하는 디렉티브는 없습니다.
  3. 코드 시작은 소스 코드 외부에서 정의됩니다("load me at" entry)". 정의되지 않은 경우(기본값), 코드가 4200h(실제 리셋 벡터 0000h가 아닌)부터 생성됩니다.
  4. 어셈블리 결과를 목록 파일로만 저장할 수 있습니다(바이너리 파일 출력 없음).

디버거

  1. 레지스터 및 플래그 전체 보기
  2. 중단점 지원
  3. 프로그램의 단계별 실행/디버깅
  4. 16진수/10진수 변환기
  5. 정의된 스택 및 소스 코드 변수의 런타임 검사
  6. 메모리 및 I/O 포트 런타임 검사 및 조작

인쇄

  1. 에디터에서 프로그램 인쇄 및 조립된 16진수 코드(Windows에서는 잘 작동하지 않는 것으로 알려져 있음)

코드 예시

  • 나눗셈의 기능.
jmp 개시하다 데이터 v_divisor: ds 1; v_module: ds 1; v_rest: ds 1; v_result: ds 1; 코드  function to_party는 각 "division"에 1을 추가하여 나눗셈을 수행합니다. para_parair_parte: 하지 않다   반송주소를 지정합니다.    d;   ; BC의 파라미터를 취득합니다.    b;  A의 배당금을 삭감하다   움직이다 a,b;  cmp c; 제수가 배당보다 크지 않은지 비교합니다.   jc end_division   여기서부터 분할이 이루어지다.   디비전: 후보선수 c; 배당 제수의 값을 감소시킵니다.              입력 h; 결과 값을 증가시킵니다.              cmp c; 배당이 제수보다 큰지 여부를 비교합니다.              jnc 나누기더 크지 않으면 디비전으로 뛰어내린다.  fim_divisao: 움직이다 b,a;가 나머지 부분을 차지합니다.            밀다 h결과를 예측하다                   밀다 b나머지를 처리하다                        밀다 d;반환필 리트 시작: 하지 않다   ;모든 레지스터를 삭제합니다.   mvi b,00h;   mvi c,00h;   mvi d,00h;   mvi e,00h;   mvi h,00h;   mvi l,00h;   ;196 = 10   mvi a,02h;   스타 v_filename(v_module);   ;divisor = 2   mvi a,02h;   스타 v_divisor;   ;zera 결과   mvi a,00h;   스타 v_result(결과);  값을 BC에 로드합니다.   lda v_filename(v_module);  움직이다 b,a;  lda v_divisor;   움직이다 c,a;  스택에 파라미터를 배치합니다.   밀다 b;  부서를 호출하다   불러 para_param_para_parts;  나머지 부서원들.    b;  움직이다 a,b;   스타 v_rest  나머지 부서원들.    h;   움직이다 a,h;   스타 v_result(결과)  할 수 없다; 
  • 요인 대화형.
jmp 개시하다  ;변수: fat, i, n; v_fat: ds 1; v_i: ds 1; v_n: ds 1; 선언의 끝  시작: 하지 않다; 프로그램 시작;    mvi a, 05h; n < = 5 (표준 A);  스타 v_n; 변수 v_n은 값 기록기 A를 저장합니다.  불러 보이드_지방; 메서드 void_fatiter를 호출한다.  void_fatiter: 하지 않다; 메서드 뚱뚱{    mvi a, 01h; 지방 < = 1 (표준 A);  스타 v_fat; 변수 v_fat은 값 기록기 A를 저장합니다.  ;contrace do if(n>0){       lda v_n; 변수 v_n의 값을 기록기 A에 로드합니다.  움직이다 b, a; 레지스터 A의 값을 기록기 B로 이동합니다.  mvi a, 00h; 레지스터 A를 클리어합니다.  cmp b; 레지스터 B의 값을 기록기 A와 비교한다.  jnz fim_if; 0이 아닌 경우(= 0에 대해 값이 B인 경우) end_함수로 점프한다.  fim_if: jnc 리턴_지방함수가 생성되지 않은 경우 return_fat case o 함수를 호출한다.  inicio_용: 하지 않다; 시작(i = 1, i <= n; i++){   mvi a, 01h; i < = 1 (레코더 A);  스타 v_i; 변수 v_i는 값 기록기 A를 저장합니다.  r1: 하지 않다; 로티나 1;  움직이다 c, a; 레지스터 A의 값을 기록기 C로 이동합니다.  lda v_n; 변수 v_n의 값을 기록기 A에 로드합니다.  cmp c; 레지스터 C의 값을 기록기 A와 비교한다.  jc r4; 루틴 4 se der carry로 점프;  r4:  불러 복수; 루틴 4, 함수를 멀티 호출;  r3: lda v_i; 로티나 3, 변수 v_i의 값을 기록기 A에 로드한다.  입력 a; 기록기 A의 값을 증가시킨다.  스타 v_i; 변수 v_i는 값 기록기 A를 저장합니다.  jmp r1; 루틴 1로 이동합니다.  r2: 불러 리턴_지방; 루틴 2; 함수를 호출한다.return_fat;  멀티:  하지 않다; 펑상 멀티;  lda v_fat; 변수 v_fat의 값을 기록기 A에 로드합니다.  움직이다 b, a; 레지스터 A의 값을 기록기 B로 이동합니다.  lda v_i; 기록장치 A에 대한 용기 v_i;  움직이다 d, a;는 기록기 A의 값을 기록기 D에 로드합니다.  움직이다 e, a; 레지스터 A의 값을 기록기 E로 이동합니다.  cmp b; 기록기 B의 값을 기록기 A와 비교한다.  jz r3;가 0이 아니면 루틴 3으로 점프한다.  DCR d; 기록기 D의 값을 감소시킵니다.  lda v_fat; 변수 v_fat의 값을 기록기 A에 로드합니다.  r5: 더하다 b; 로티나 5, soma o valor do registrador A com o valor do registrador B;  DCR d; registerrador D의 용기 감소;  jnz r5; pula para rotina 5 se nao der zero;  스타 v_fat; 변수 v_fat은 값 기록기 A를 저장합니다.  lda v_n;는 기록기 v_n의 값을 기록기 A에 로드합니다.  cmp e; 기록기 E의 값을 기록기 A와 비교한다.  jz r2; 루틴 2 se der 0으로 점프;  리트; calling multi로 돌아갑니다.  ;종료: } ;종료: }  return_fat: 하지 않다; 함수 return_fat;   lda v_fat;는 변수 v_fat para o registrador A의 값을 로드합니다.  할 수 없다;종료; 

레퍼런스

외부 링크