User Tag List

Страница 7 из 12 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя
Показано с 61 по 70 из 111

Тема: Кросскомпилятор Си под 8080

  1. #61

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А если просто вычесть и знак результата проверить?
    MOV A,N1
    MOV B,N2
    SUB B
    JM less

  2. #61
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #62

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ааа... спать надо больше. Точно ведь. А мне лень даже в яндекс вбить слово.

    ---------- Post added at 00:39 ---------- Previous post was at 00:33 ----------

    У меня получилось, что myFunction(1, myFuction(2, 3)) некорректно работает

    mvi a, 1
    sta myFunction_paramA
    mvi a, 2
    sta myFunction_paramA
    mvi a, 3
    call myFunction
    call myFunction

    Но это можно обойти

    ---------- Post added at 00:40 ---------- Previous post was at 00:39 ----------

    В среду дам первую версию. Эта еще сырая очень.

    2100 строк 66 Кб

  4. #63

    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    336
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Это компромисс между
    1) Программой, которая умеет рекурсию.
    2) И программой, которая работает в 3 раза быстрее.
    И всё-таки по причинам реентерабельности, стоит подумать о размещении локальных переменных на стеке. Дело здесь не только в interrupt функциях, для которыз кстати надо ещё PUSHALL делать. Просто, если компилятор будет использоваться для написания оконных интерфейсов, почти неизбежны локальные стеки и переключения контекстов.

    Возможно, Вы подумаете о чём-нибудь типа
    #pragma recursion:ON/OFF

    Также пожелание поддерживать несколько calling conventions, по крайей мере extern "C" / _stdcall, _pascal, _memblock (это-Ваш вариант) и _fast (передача до 2х параметров в регистрах)

  5. #64

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделаю рекурсию. Добавлю модификаторы _static, _stack. Пока не до этого, пока у меня даже комментарии не поддерживаются.

    ---------- Post added at 01:22 ---------- Previous post was at 00:52 ----------

    Прикольно. Написал

    x=32; y=15;

    while(1) {
    i=getch();

    print(x, y, "+");

    if(i==0x19) { if(y>0) --y; } else
    if(i==0x08) { if(x>0) --x; } else
    if(i==0x1A) { if(y<24) ++y; } else
    if(i==0x18) { if(x<63) ++x; }

    print(x, y, "O");
    }

    сижу рисую. Теперь жизнь станет проще, а программы круче.

    ---------- Post added at 01:36 ---------- Previous post was at 01:22 ----------

    Код:
    Программа
    
    struct File {
      ushort some1, size;
      uchar name[11];
      uchar some2;
    };
    
    File files[24];
    
    void main() {
      register uchar i;
      File* f;
    
      clrscr();
    
      for(f=files, i=0; i<24; ++i, ++f)
        itoa(f->name, i);
    
      for(i=0; i<16; ++i)
        print(0, i, files[i].name);
    
      while(1);
    }
    
    
    files ds 384
    main_f ds 2
    main:
      push bc
      ; 49 clrscr();
      call clrscr
      ; 51 for(f=files, i=0; i<24; ++i, ++f)
      ld hl, files
      ld (main_f), hl
      ld b, 0
    l12:
      ld a, b
      cp 24
      jp nc, l13
      ; 52 atoi(f->name, i);
      ld hl, (main_f)
      inc hl
      inc hl
      inc hl
      inc hl
      ld (atoi_str1), hl
      ld l, b
      ld h, 0
      call atoi
      inc b
      ld hl, (main_f)
      ld de, 16
      add hl, de
      ld (main_f), hl
      jp l12
    l13:
      ; 54 for(i=0; i<16; ++i)
      ld b, 0
    l15:
      ld a, b
      cp 16
      jp nc, l16
      ; 55 print(0, i, files[i].name);
      xor a
      ld (print_x), a
      ld a, b
      ld (print_y), a
      ld l, b
      ld h, 0
      add hl, hl
      add hl, hl
      add hl, hl
      add hl, hl
      ld de, files
      add hl, de
      inc hl
      inc hl
      inc hl
      inc hl
      call print
      inc b
      jp l15
    l16:
      ; 57 while(1);
    l18:
      jp l18
    l19:
    l11:
      pop bc
      ret
    Последний раз редактировалось vinxru; 15.09.2012 в 03:25.

  6. #65

    Регистрация
    08.01.2012
    Адрес
    г.Винница, Украина
    Сообщений
    94
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    А если просто вычесть и знак результата проверить?
    MOV A,N1
    MOV B,N2
    SUB B
    JM less
    Если сравнивать только положительные или только отрицательные - то да.
    Например.
    10-8 = 2. бит 7 нулевой. 10>8
    (-1)-(-2)=255-254=1. бит 7 нулевой. -1>-2
    А вот если одни с другими...
    127 - (-2) = 127 - 254 = -127 = 0х81 бит 7 ненулевой. 127<-2. Но это неверно!
    Тут надо не только знак учитывать, но и флаг переполнения. И если есть переполнение - реверсировать результат.

    MOV A,N1
    MOV B,N2
    SUB B
    MOV B,A
    RRA
    XOR B
    JM less
    В коде не совсем уверен, сейчас несколько нетрезв.
    Последний раз редактировалось predatoralpha; 15.09.2012 в 02:10.

  7. #66

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Возможно пригодится - сравнение 16 битных знаковых чисел
    Код:
    ;DE и HL - знаковые 16 битные целые
    ;Портит A и B
    CmpDEHL:	mov	a,d
    		xra	h
    		jm	DiffSigns
    		mov	a,e
    		sub	l
    		mov	b,a
    		mov	a,d
    		sbb	h
    		rc			;DE<HL (CY=1)
    		ora	b
    		ret			;или DE>HL (CY=0;Z=0) или DE=HL (CY=0;Z=1)
    DiffSigns:	xra	h
    		rp			;DE>HL (CY=0;Z=0)
    		stc
    		ret			;DE<HL (CY=1)
    Чуть измененный вариант из книги
    Григорьев В.Л. Программное обеспечение микропроцессорных систем. М.: Энергоатомиздат, 1983 (с. 173-174)
    Последний раз редактировалось ivagor; 15.09.2012 в 08:04.

  8. #67

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если автор топика задумал написть свой компилятор Си под ВМ80, то может ему пригодится книга "Компилятор Си для микроЭВМ" Д.Хендрикс. В ней описывается Смолл-Си.

    Вот ссылки из инета.
    http://net.lg.ua/~cray/compilers/jhc.djvu
    http://net.lg.ua/~cray/compilers/smallc21.rar
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  9. #68

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от predatoralpha Посмотреть сообщение
    Тут надо не только знак учитывать, но и флаг переполнения. И если есть переполнение - реверсировать результат.
    Согласен. Про переполнение я уже потом подумал, когда выключил комп

  10. #69

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    8-битное сравнение из 16-битного варианта вроде тоже неплохо получается:
    Код:
    ;A и E - знаковые 8 битные целые
    ;Кроме флагов ничего не портит
    CmpAE:	xra	e
    	jm	DiffSigns
    	xra	e
    	cmp	e
    	ret		;A<E (CY=1) или A>E (CY=0;Z=0) или A=E (CY=0;Z=1)
    DiffSigns:
    	xra	e
    	rp		;A>E (CY=0;Z=0)
    	stc
    	ret		;A<E (CY=1)

  11. #70

    Регистрация
    08.01.2012
    Адрес
    г.Винница, Украина
    Сообщений
    94
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мой вариант сравнения с инверсией флага переноса неверен.
    vinxru, используй свою версию с +80. Похоже, на 7-й бит нельзя опираться.

Страница 7 из 12 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

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

Похожие темы

  1. Ассемблер 8080
    от Kakos_nonos в разделе Утилиты
    Ответов: 0
    Последнее: 21.09.2011, 23:35
  2. Продам пару платок с процами 8080
    от RedLine в разделе Барахолка (архив)
    Ответов: 15
    Последнее: 23.12.2010, 18:39
  3. схема АОН на 8080/z80
    от sergey2b в разделе Разный софт
    Ответов: 7
    Последнее: 07.02.2010, 22:43
  4. An 8080/Z80 C Compiler
    от breeze в разделе Программирование
    Ответов: 1
    Последнее: 18.08.2005, 06:54

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •