Сб сен 21, 2019 20:27:13
Сб сен 21, 2019 21:10:50
Ага, два раза. Первую ЕС-ку, конкретно - ЕС 1022, наш Политех получил около 77-го, с 256К ферритовой памяти и двумя болгарскими клонами IBM2311, диски 6.25М, не помню, как их звали у нас. Вторую, тоже 1022, в 80-м. Чуть поновее - с 512К электронной памяти ( куча м/с К565РУ1) и тремя ЕС5061, болгарский клон IBM2314, диски 29М. А первую из Ряда 2 - кажется 1036, точно не помню, я уже там не работал - в 86 или 87. И наш Политех был довольно продвинутый: на ВЦ ПО Карагандауголь - самая наша крутизна тех времен - были те же самые машинки, только числом поболее.ПростоНуб писал(а):во-первых, уже в начале 80-х, найти IBM/360 было нереально.
Это было разовое действие, была какая-то "железная" формула, что-то связанное с учетом заданий в ДОС ЕС aka DOS/TOS 360, подробностей совсем не помню. А цеплять туда куски фортрановской ран-тайм системы и соблюдать соглашения о связях не было ни малейшего желания.ПростоНуб писал(а):Во-вторых, мне совершенно непонятно, нахрена было усложнять сборку проекта
; R4 to HEX
; Вход: R4 - исходный байт
; Выход - два байта по X+
; Рабочий регистр - R18
HEX:
add r2,r4
mov r18,r4
swap r18
rcall hex1
mov r18,r4
HEX1: andi r18,0x0F
cpi r18,10
brlt hex2
subi r18,('0'-'A'+10)
HEX2: subi r18,0xD0 ; -'0'
st x+,r18
ret
Сб сен 21, 2019 21:19:25
в ЯВУ почти никогда не возникает такой необходимости, так как его назначение несколько иное. да и в ассемблере показанный вами пример полезен только при острой нехватке памяти... или при "спортивном" программированииafz писал(а):Какой ЯВУ на такое способен?
Сб сен 21, 2019 21:41:12
Вс сен 22, 2019 08:24:00
#include <ioavr.h>
#include <stdint.h>
uint8_t NibleToHex(uint8_t x)
{
return x<10?x+'0':x+'A'-10;
}
uint16_t ToHex(uint8_t x)
{
return (NibleToHex(x>>4)<<8) + NibleToHex(x&0xF);
}
int main()
{
return ToHex(PINB);
}
//uint8_t NibleToHex(uint8_t x)
??NibleToHex:
//{
// return x<10?x+'0':x+'A'-10;
CPI R16, 10
BRCC ??NibleToHex_1
SUBI R16, 208
RET
??NibleToHex_1:
SUBI R16, 201
RET
//}
//uint16_t ToHex(uint8_t x)
??ToHex:
//{
// return (NibleToHex(x>>4)<<8) + NibleToHex(x&0xF);
MOV R17, R16
SWAP R17
ANDI R17, 0x0F
CPI R17, 10
BRCC ??ToHex_1
SUBI R17, 208
RJMP ??ToHex_2
??ToHex_1:
SUBI R17, 201
??ToHex_2:
ANDI R16, 0x0F
CPI R16, 10
BRCC ??ToHex_3
SUBI R16, 208
RET
??ToHex_3:
SUBI R16, 201
RET
//}
//int main()
main:
//{
// return ToHex(PINB);
IN R18, 0x16
MOV R17, R18
SWAP R17
ANDI R17, 0x0F
CPI R17, 10
BRCC ??main_0
SUBI R17, 208
RJMP ??main_1
??main_0:
SUBI R17, 201
??main_1:
ANDI R18, 0x0F
CPI R18, 10
BRCC ??main_2
SUBI R18, 208
RJMP ??main_3
??main_2:
SUBI R18, 201
??main_3:
MOV R16, R18
RET
//}
Вс сен 22, 2019 15:09:09
Ну, в общем-то, да, хотя однажды, когда я что-то впихивал в какую-то мелкую тиньку, это было в тему. Кстати, этот приём я не сам сочинил. Так вполне официалльно рекомендовалось делать в руководстве по программированию для PDP-11, но годится оно практически, для любой машинки со стеком.ARV писал(а):да и в ассемблере показанный вами пример полезен только при острой нехватке памяти... или при "спортивном" программировании
Во-первых, я указал 83-85. И при этом погорячился, надо было указать 83-84. Поскольку (вспомнил точнее) в первой половине 84-го я уже переключился на Электронику-60 (PDP-11/рус.) и за ЕС-ками больше не следил. Во-вторых, мало ли что-то где-то выпускалось? Я рассказал реальное положение, которое было в нашей глубинке в 84-м.1036 - это уже ряд-3 или IBM/380. Она выпускалась с 1983 по 1989 год. Ряд-2 или IBM/370 начался с ЕС1035, выпускавшейся с 1977 по 1986. Вы же указали 1983-86 годы, когда ряд-1 уже почил в бозе. Я же в 1984 уже 1046 осваивал.
Ага, больше всего в полтора раза. 11 команд против 16. Я не считаю первую команду у себя - это подсчет байтовой контрольной суммы, и у тебя - моя программа получает байт сразу в R4, а ты его еще добываешь откуда-то.VladislavS писал(а):По размеру на несколько команд больше (в прошивку линкер сами функции не добавит, компилятор их заинлайнил), а по скорости выполнения, которая зачастую важнее, я бы даже поспорил.
Пн сен 23, 2019 06:46:36
Пн сен 23, 2019 16:59:27
Тогда компилятор не станет его разворачивать дважды, а сгенерит два нормальных вызова. Не знаю, учтет ли он, что не нужны массовые сохранения/восстановления регистров и пр.VladislavS писал(а):А если будет код хотя бы в сотню строк?
Пн сен 23, 2019 19:00:47
Пн сен 23, 2019 19:34:04
Вт сен 24, 2019 19:06:57
Вт сен 24, 2019 19:43:38
Вт сен 24, 2019 22:57:30
Чт окт 17, 2019 21:19:58
Пт окт 18, 2019 06:38:59
прошу вас, не томите, дайте ссылку на хороший ассемблер!AQ29 писал(а):На хорошем ассемблере для AVR это будет:
V = Name#4
Пт окт 18, 2019 10:07:51
Вт окт 22, 2019 09:30:57
Вт окт 22, 2019 10:17:05
интрига! любопытство накалено до пределаAQ29 писал(а):С которым я сейчас разбираюсь - его нет в общем доступе. Пока нет.
Вт окт 22, 2019 11:41:29
Вт окт 22, 2019 13:07:26
я остаюсь при мнении, что avrasm2 - очень убогий ассемблер, которому крайне далеко до звания "приличного". я уже писал, что gnu-as, точнее, в контексте нашей темы, avr-as на самом деле представляет собой "приличный" ассемблер. как с моего дилетантского взгляда, так практически лучший из.BOB51 писал(а):вполне достаточно для качественной работы