Важная информация
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: МикроСтеплер. Разработка

  1. #1 МикроСтеплер. Разработка 
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Здесь будет освещаться ход написания МикроСтеплер'а - компилятора степлера для процессора intel 8080.

    На данный момент готовы операторы: +-*/^.:\#!|&S@g"$?
    На данный момент готовы команды байт-кода:ACEFBRTDH

    Код степлера будет транслироваться в код ассемблера 8080, который будет ассемблироваться в двоичный файл, готовый для запуска на компьютере.

    Также уже готово преобразование асмового листинга в код компьютера ЮТ-88. Тоесть сейчас можно написать прогу на ассемблере, запустить батник, и он откомпилирует, обработает и запустит эмулятор с загруженной программой.

    Вот такие вот дела.
    Последний раз редактировалось Kakos_nonos; 18.04.2012 в 17:31.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  2. #2  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Релизовал ещё несколько
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  3. #3  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Реализовал корень и чтение из стека параметров.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Ура! Реализовал все операторы.
    Теперь приступил к компиляции байт-кода.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  5. #5  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Реализовал три команды
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  6. #6  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Урааа!!!
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  7. Пользователь сказал cпасибо:

    >Quiet Snow< (24.05.2012)

  8. #7  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Что-же, Kakos_nonos, поздравляю вас первой рабочей программой, компилируемой вашим компилятором. Рад, что мои наработки также подбросили вам идею - это значит, что LInt разрабатывался мной не зря =)
    Ну, и как водится, буду рад видеть дальнейшие новости по этой теме - поэтому желаю вам и дальнейших успехов :P
    Дружба-магия-радость!
    Ответить с цитированием  
     

  9. #8  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Абадябер, спасибо за пожелания.
    Я пока ещё немного подработал над выводом строки, отказался от стандартной процедуры вывода строки, сделал свою.
    Вот пример откомпилированной программы. Она выводит на экран такое сообщение:

    ХЕЛЛО ВОРЛД!
    HELLO WORLD!

    Код asm:
    .ORG 0
    	JMP ES_DB
    ST_DB .BYTE 104,101,108,108,111,32,119,111,114,108,100,33,13,10,0
    ES_DB:
    	LXI H,ST_DB
    	MVI B,14
    	CALL OUTSTR
    	JMP ES_DBDF
    ST_DBDF .BYTE 72,69,76,76,79,32,87,79,82,76,68,33,13,10,0
    ES_DBDF:
    	LXI H,ST_DBDF
    	MVI B,14
    	CALL OUTSTR
    	HLT
    OUTSTR:
    	MOV A,M
    	PUSH H
    	PUSH B
    	CALL __OUT1
    	POP B
    	POP H
    	INX H
    	DCR B
    	MOV A,B
    	CPI 0
    	JNZ OUTSTR
    	RET
    __OUT1:
    	MOV C,A
    	CALL 0F809H
    	RET
    .END
    Что мы там видим? Вначале идут данные первой строки. Потом в регистровую пару HL заносится адрес начало строки. В регистр B - её длинну. И в конце идёт запуск процедуры OUTSTR, выводящую строку.
    Потом идёт такойже код, только для другой строки, и в конце - команда HLT - остановливающаю программу.

    Всё, программа кончилась. Далее идут процедуры, используемые в программе. Здесь это процедура OUTSTR, __OUT1.
    Процедура OUTSTR выводит строку, __OUT1 - выводит символ.

    Да, код немного избыточен, его можно было бы сделать покороче, но я сделал упор на платформонезависимости получаемого кода. Поэтому он получается длиннее.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  10. #9  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,535
    Сказал(а) спасибо
    126
    Поблагодарили 432 раз(а) в 293 сообщениях
    Записей в блоге
    6
    Я сегодня радостный, как суслик. Реализовал команду присваивания!
    Это результат выполнения программы $(2)(2560^781+)

    Код asm:
    .ORG 0
    	LXI H,2
    	CALL SETNUM
    	CALL SETSETNUM
    	LXI H,2560
    	CALL SETNUM
    	CALL UP
    	LXI H,781
    	CALL SETNUM
    	CALL SUMM
    	CALL SETVAR
    	HLT
    SUMM:
    	CALL LOAD2
    	DAD D
    	CALL SETNUM
    	RET
    UP:
    	LXI H,UKD
    	MOV D,M
    	INX H
    	MOV E,M
    	INX D
    	INX D
    	MOV M,E
    	DCX H
    	MOV M,D
    	RET
    SETVAR:
    	LXI D,UKDN
    	LXI H,N
    	MOV M,D
    	INX H
    	MOV M,E
    SETSTEPONE:
    	LXI H,NS
    	MOV D,M
    	INX H
    	MOV E,M
    	LXI H,1
    	CALL COMP16	
    	PUSH D
    	JNZ NOTONE
    	LXI H,N
    	MOV D,M
    	INX H
    	MOV E,M
    	XCHG
    	INX H
    	MOV A,M
    	CALL __OUT1
    	JMP ENDOFCOMP
    NOTONE:	
    	LXI H,2
    	POP D
    	CALL COMP16
    	PUSH D
    	JNZ NOTTWO
    	LXI H,N
    	MOV D,M
    	INX H
    	MOV E,M
    	XCHG
    	MOV D,M
    	INX H
    	MOV E,M
    	XCHG
    	CALL __OUT2
    	JMP ENDOFCOMP
    NOTTWO:	
    	POP H
    	DAD H
    	LXI D,PERS
    	DAD D
    	LDAX D
    	MOV H,A
    	INX D
    	LDAX D
    	MOV L,A
    	PUSH D
    	LXI H,N
    	MOV D,M
    	INX H
    	MOV E,M
    	LDAX D
    	MOV H,A
    	INX D
    	LDAX D
    	MOV L,A
    	POP D
    	PUSH D
    	XCHG
    	MOV M,D
    	INX H
    	MOV M,E
    ENDOFCOMP:
    	POP D
    	LXI H,N
    	MOV D,M
    	INX H
    	MOV E,M
    	LXI H,UKD
    	MOV B,M
    	INX H
    	MOV C,M
    	MOV H,B
    	MOV L,C
    	CALL COMP16
    	JZ EOFSET
    	LXI H,N
    	MOV D,M
    	INX H
    	MOV E,M
    	INX D
    	INX D
    	MOV E,M
    	DCX H
    	MOV D,M
    	LXI H,NS
    	MOV D,M
    	INX H
    	MOV E,M
    	INX D
    	INX D
    	MOV E,M
    	DCX H
    	MOV D,M
    	JMP SETSTEPONE
    EOFSET:       	   	
    	LXI H,UKD
    	LXI D,UKDN
    	MOV M,D
    	INX H
    	MOV M,E
    	RET
    LOAD2:
    	LXI H,UKD
    	MOV B,M
    	INX H
    	MOV C,M
    	DCX B
    	DCX B
    	DCX H
    	MOV M,B
    	INX H
    	MOV M,C
    	MOV H,B
    	MOV L,C
    	MOV D,M
    	INX H
    	MOV E,M
    	INX H
    	MOV C,M
    	INX H
    	MOV L,M
    	MOV H,C
    	XCHG
    	RET
    LOAD1:
    	LXI H,UKD
    	MOV B,M
    	INX H
    	MOV L,M
    	MOV H,B
    	MOV D,M
    	INX H
    	MOV E,M
    	XCHG
    	RET
          
    SETNUM:
    	XCHG
    	LXI H,UKD
    	MOV B,M
    	INX H
    	MOV L,M
    	MOV H,B
    	MOV M,D
    	INX H
    	MOV M,E
    	RET
    OUTSTR:
    	MOV A,M
    	PUSH H
    	PUSH B
    	CALL __OUT1
    	POP B
    	POP H
    	INX H
    	DCR B
    	MOV A,B
    	CPI 0
    	JNZ OUTSTR
    	RET
     
    SETSETNUM:
    	CALL LOAD1
    	XCHG
    	LXI H,NS
    	MOV M,D
    	INX H
    	MOV M,E
    	RET
    COMP16:
    	MOV A,D
    	XRA H
    	JM DIFF
    	MOV A,L
    	SUB E
    	JZ EQUAL
    	MOV A,H
    	SBB D
    	JC CYSET
    	JNC CYCLR
    EQUAL:
    	MOV A,H
    	SBB D
    	RET
    DIFF:
    	MOV A,L
    	SUB E
    	MOV A,H
    	SBB D
    	MOV A,H
    	JNC CYCLR
    CYSET:
    	ORI 1
    	STC
    	RET
    CYCLR:
    	ORI 1
    	RET
    __OUT1:
    	MOV C,A
    	CALL 0F809H
    	RET
    __OUT2:
    	XCHG
    	LXI H,BUFPTR
    	MVI B,0
    	MOV M,B
    	INX H
    	MOV M,B
    	INX H
    	MOV M,B
    	INX H
    	MOV M,B
    	LXI H,BUFFER
    	MOV M,B
    	INX H
    	MOV M,B
    	INX H
    	MOV M,B
    	CALL BIN2DEC
    	LXI H,BUFFER+2
    	MOV B,M
    	INX H
    	CALL OUTSTR
    	MVI A,13
    	CALL __OUT1
    	MVI A,10
    	CALL __OUT1
    	RET
    BUFFER .BYTE 0,0,0,0,0,0,0,0,0
    BIN2DEC:
     	SHLD BUFPTR
    	XCHG
    	MVI A,0
    	STA CURLEN
    	MOV A,H
    	STA NGFLAG
    	ORA A
    	JP CNVERT
    	SUB A
    	SUB L
    	MOV L,A
    	SBB A
    	SUB H
    	MOV H,A
    CNVERT:
    	MVI E,0
    	MVI B,16
    	ORA A
    DVLOOP:
    	MOV A,L
    	RAL
    	MOV L,A
    	MOV A,H
    	RAL
    	MOV H,A
    	MOV A,E
    	RAL
    	MOV E,A
    	SUI 10
    	CMC
    	JNC DECCNT
    	MOV E,A
    DECCNT:
    	DCR B
    	JNZ DVLOOP
    	RAL
    	ANI 1
    	DAD H
    	ORA L
    	MOV L,A
    CHINS:
    	MOV A,E
    	ADI 48
    	CALL INSERT
    	MOV A,H
    	ORA L
    	JNZ CNVERT
    EXIT:
    	LDA NGFLAG
    	ORA A
    	JP POS
    	MVI A,45
    	CALL INSERT
    POS:	
    	RET
    INSERT:
    	PUSH B
    	PUSH H
    	MOV C,A
    	LXI H,BUFFER+7
    	MVI B,6
    OLOLOSH:
    	MOV A,M
    	INX H
    	MOV M,A
    	DCX H
    	DCX H
    	DCR B
    	MOV A,B
    	CPI 1
    	JNZ OLOLOSH
    	INX H
    	MOV M,C
    	DCX H
    	MOV A,M
    	INR A
    	MOV M,A
    	POP H
    	POP B
    	RET
    BUFPTR .BYTE 0,0
    CURLEN .BYTE 0
    NGFLAG .BYTE 0
    UKD   .BYTE _ENDPROG/256,_ENDPROG%256
    UKP   .BYTE (_ENDPROG+0)/256,(_ENDPROG+0)%256
    TIMER .WORD 0
    RNDW  .WORD 0
    N     .WORD 0
    NS    .WORD 0
    .DEFINE UKDN=_ENDPROG
    .DEFINE PERS=_ENDPROG+0+0
    .DEFINE RNDS=0
    .DEFINE RNDN=_ENDPROG
    _ENDPROG:
    .END
    Работа потихоньку движется, но как-то слишком медленно. После 25-го мая должно ускорится.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  11. #10  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Имена меток. Если бы я мог, я бы любил и ласкал их. Но я не могу, ибо это простые латинские буквы, хоть и выстроенные в особом порядке. Приходится просто одобрять их.
    Kakos_nonos есть пару вопросов:
    Что-то смотрю, программа получается несколько длинноватой. Как понимаю, отчасти это вызвано тем, что целевая платформа - восьмибитная, и поэтому приходится очень неудобно реализовать 16-бит числа?
    Вы пользовались байт-кодом LINT'a? .
    Дружба-магия-радость!
    Ответить с цитированием  
     

Страница 1 из 3 123 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Разработка сайтов PHP/MYSQL/HTML/CSS/JS/PSD
    от dev_sites в разделе Изготовление сайтов и дизайн
    Ответов: 5
    Последнее сообщение: 02.10.2013, 05:52
  2. МикроСтеплер. Готовые версии.
    от Kakos_nonos в разделе Степлер
    Ответов: 15
    Последнее сообщение: 31.05.2013, 16:38
  3. Ответов: 45
    Последнее сообщение: 10.03.2013, 14:03
  4. Ответов: 0
    Последнее сообщение: 27.03.2012, 17:07
  5. Разработка каталога товаров
    от alexffh в разделе Архив
    Ответов: 2
    Последнее сообщение: 18.11.2011, 15:26
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •