User Tag List

Страница 6 из 9 ПерваяПервая ... 23456789 ПоследняяПоследняя
Показано с 51 по 60 из 82

Тема: Вопрос по ассемблеру Z80

  1. #51

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,289
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    бейсик компилятор думает так-же
    a=x
    b=y
    c=x-y

    Код:
    	LD   HL,(40074)
    	PUSH HL
    	LD   HL,(40078)
    	PUSH HL
    	POP  HL
    	POP  DE
    	AND  A
    	EX   DE,HL
    	SBC  HL,DE
    	LD   (40082),HL
    в этом примере кстати хорошо видно почему применение всяких ЯВУ компиляторов даёт такой унылый результат
    (лишние команды жрут память/такты)
    Последний раз редактировалось goodboy; 25.07.2022 в 10:00.

  2. #52

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    есть подозрение что глючило как раз из-за пары команд LET x=USR 30000: RANDOMIZE x
    Ну эт уже конкретно прогу надо смотреть. Именно в таком виде она неправильная: сперва надо записать значение командой RANDOMIZE, а уже потом запускать код командой USR.
    Просто в Спектрум-Бейсике запуск кодов обычно идет конструкцией RANDOMIZE USR, отсюда и путаница. Первым может быть почти любой оператор, требующий параметры.
    Но запускается машкод именно через USR - это функция, передающая через пару BC данные, причем в оба направления. На входе BC будет равно адресу старта кодов.

    - - - Добавлено - - -

    Цитата Сообщение от goodboy Посмотреть сообщение
    хорошо видно почему применение всяких ЯВУ компиляторов даёт такой унылый результат
    Логичней было бы объявлять тип переменных, как в Паскале или где еще, по типу "это целочисленный var до 65535 макс"
    Что дало бы возможность привязать переменную к регистровой паре в большинстве случаев, и можно прямо в тексте.

  3. #53

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Исходя из моих знаний о работе компиляторов Basic-кода и был сделан вывод о необходимости разбираться в ассемблере "ручками", а не полагаться на инструменты. И я весьма признателен местным гуру за терпеливую помощь и ускоряющие пинки в нужном направлении.

  4. #54

    Регистрация
    06.11.2020
    Адрес
    г. Санкт-Петербург
    Сообщений
    167
    Спасибо Благодарностей отдано 
    80
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    в этом примере кстати хорошо видно почему применение всяких ЯВУ компиляторов
    Это какой из компиляторов такой код выдал ?

  5. #55

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,289
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    mcoder 1983
    ........
    HiSoft ColtCompiler (от тех-же авторов, но 1985) сделал чуть более оптимальный код
    Код:
    	LD   HL,(51569)
    	PUSH HL
    	LD   HL,(51575)
    	POP  DE
    	AND  A
    	EX   DE,HL
    	SBC  HL,DE
    Последний раз редактировалось goodboy; 25.07.2022 в 22:35.

  6. #56

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    в этом примере кстати хорошо видно почему применение всяких ЯВУ компиляторов даёт такой унылый результат
    (лишние команды жрут память/такты)
    Потому что забыли (поленились) сделать оптимизации кода, сокращение push/pop. Ради смеха прогнал в ZX Like Pascal:
    Код:
    program abc;
    var
    	a,b,c,x,y: byte;
    begin
    a:=x;
    b:=y;
    c:=x-y;
    end.
    Выдало:
    Код:
          ld    a,(_X)
          ld    (_A),a
          ld    a,(_Y)
          ld    (_B),a
          ld    a,(_X)
          ld    l,a
          ld    h,0
          ld    a,(_Y)
          ld    e,a
          ld    d,0
          and   a
          sbc   hl,de
          ld    a,l
          ld    (_C),a
    Если все переменные типа word (а не byte), то еще лучше:
    Код:
          ld    hl,(_X)
          ld    (_A),hl
          ld    hl,(_Y)
          ld    (_B),hl
          ld    hl,(_X)
          ld    de,(_Y)
          and   a
          sbc   hl,de
          ld    (_C),hl
    Последний раз редактировалось Andrew771; 25.07.2022 в 22:41.

  7. #57

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    все равно весьма далеко от чисто ассемблерного кода. примерно так это будет в асме:

    LD HL,X
    LD BC,Y
    PUSH HL
    AND A
    SBC HL,BC
    EX DE,HL ;DE=C=X-Y
    POP HL ; восстанавливаем X

    если же нужно просто арифметическое действие без сохранения исходных значений, все еще проще.

  8. #58

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Если все переменные типа word (а не byte), то еще лучше:
    лучше было бы, если бы компилятор переупорядочил операторы
    Прихожу без разрешения, сею смерть и разрушение...

  9. #59

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    goodboy и reddie, а где в ваших примерах присвоение a=x, b=y и c=x-y? Я вижу только взятие x и y и их вычитание

  10. #60

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    а где в ваших примерах присвоение a=x, b=y и c=x-y?
    А зачем оно в ассемблере? За редким исключением, переменные можно хранить прямо в регистрах, либо модифицировать код.
    Не, если речь идет о компиляции программы на каком-то языке с кучей переменных - тогда другое дело. Но в асме никто так кодить не будет.

Страница 6 из 9 ПерваяПервая ... 23456789 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Книга по ассемблеру Z80
    от Shwartz в разделе Пресса
    Ответов: 11
    Последнее: 06.07.2018, 14:29
  2. Книги по бейсику и Ассемблеру Z80
    от stepmotor в разделе Программирование
    Ответов: 3
    Последнее: 30.01.2018, 19:53
  3. вопрос по z80 stealh
    от scl^mc в разделе Эмуляторы
    Ответов: 11
    Последнее: 17.08.2007, 15:32
  4. ламерский вопрос о временных диаграммах шин Z80
    от boo_boo в разделе Несортированное железо
    Ответов: 3
    Последнее: 30.01.2006, 13:14

Ваши права

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