Pull to refresh

Comments 34

> Этот дедушка не умеет не то что делить — даже умножать.

Это нормально. Z80 тоже умножать не умеет.
Это точно :)

Между ними разницы-то — всего 5 лет. Собсно Z80 это 8080 с доп.банком регистров, как я помню из вики — а 8080 это улучшенная версия 8008. А он в свою очередь — 8-разрядная версия 4004.

Но делить даже некоторые младшие AVR не умеют как помню, хотя с ними я очень слабо знакома.
Делить AVR вообще все поголовно не умеют, а младшие (и старые) еще и умножать не умеют. А вот любой дедушка семейства MCS51 умеет и делить, и умножать.
Вы правы! Спасибо! Ну я честно сказала что слаба знакома :)
А вот у прадедушки 8048 MSC48 нет даже команды вычитания, что поначалу впечатляет.
Ну это-то мелочи, т.к. вычитание зачастую это то же сложение. Я вот час назад разглядывая инструкцию к AVR (разбираясь с комментом выше) обнаружила что есть инструкция SUBI но нет ADDI — т.е. вычесть непосредственное значение можно а прибавить нельзя (что конечно не мешает вычесть отрицательное значение).
mc51 — вообще отличный выбор для начинающего.
Собсно Z80 это 8080 с доп.банком регистров


Нет. Z80 просто обратно совместим с 8080. Помимо дополнительного банка регистров есть ещё ~500 дополнительных инструкций.

«Делить» не умеют даже совсем нескромные Itanium-ы
http://www.math.chalmers.se/Math/Grundutb/GU/MMG410/V11/FAQ/divsqrt.pdf
История создания Zilog и Z80

http://archive.computerhistory.org/resources/text/Oral_History/Zilog_Z80/102658073.05.01.pdf
Умножают, не умножают…

Помню когда впервые эту песенку услышал, и полез в вики, был удивлен что родной Z80 был таки без умножения. Хотя это единственный ассемблер который я таки знал хорошо, а не на уровне написать пару строк в паскале, для ускорения или вызова низкоуровневых вещей.

С эмуляторами тоже забавно недавно было. Знакомый сказал мол 580-й (клон 8080) он видел только в эмуляторе. Я сказал мол живьем видел, но лишь мельком, а на следующий день я нахожу у себя инструкцию по бейсику СМ1800, которая была моей первой машиной (у деда в лаборатории стояла, я собственно на этом бейсике и писал первые строчки кода). Открываю вики и вижу, что это тот самый 580...))
У меня не то, что клон. У меня оригинал работает стоит :) На голове появляется седина.

AMD 8088-1



8088


У меня Intel 386 работал — я его полюбил за то что это реально был прорыв в то, без чего сейчас жизнь невозможна — многозадачные многопользовательские ОС.
Вы не поверите!!!

80386



Вообще у меня много чего есть :)
Так это 8088, а не 8080, чей клон КР580ВМ80А. С этим имел дело любой пользователь икстишки.
Если не ошибаюсь — просто 8086 с узенькой шиной данных?

С программной точки зрения это ж почти никак не проявляется?
8086 — 16 битный процессор.
8088 — 8 битный.

Вообще надо будет как нить накатать статью про 80xx и вообще историю.
Перечитал и ужаснулся. Имел в виду разрядность шины данных.
Пыль… Пожалейте его!

А по сути: оно ещё и работает?
Да он вполне себе работает.
Пыли на самом деле тут не много, это он уже успел сново запылится.

вот тут у меня еще часть железок, если интересно.

fotki.yandex.ru/users/icce/album/155960

Правда не все.
В «Спектрумах» в РОМе был «язык калькулятора», кажется так назывался. АПИ для математики.
Забавная игрушка. Но для работы её, похоже, надо серьёзно изучать, а то получается ужас.

Умножение 8*8 => 16 бит. 41 байт, не больше 280 тактов
	fim p1,$23
	fim p2,$35

	fim p3,0
	fim p4,0
	fim p0,$08
repeat
	clc
	xch r9
	ral
	xch r9
	xch r8
	ral
	xch r8
	xch r7
	ral
	xch r7
	xch r6
	ral
	xch r6

	xch r5
	ral
	xch r5
	xch r4
	ral
	xch r4
	jcn $a,nadd
	
	clc
	xch r9
	add r3
	xch r9
	xch r8
	add r2
	xch r8
        jcn $a,nadd
        isz r7,nadd
        inc r6
nadd
        isz r1,repeat        


а то получается ужас


Да, ужас и есть — на сайте недавно задачу на минификацию кода э-э-э… вот она преобразовать BCD в HEX выложили — я пока и пробовать не стала. Хотя судя по тому что кто-то в 37 байт запилил — какой-то нюанс в условии, который я не вижу — а если втупую делать у меня кода на три страницы (и то не работает).
С битом «C» при вычитании, конечно, засада. Логичнее, если он устанавливается в 1 при «переполнении», а не наоборот.
Похоже, что в эмуляторе неправильно работает DAA: в инструкции написано, что при C=1 шестёрка прибавляется, а в эмуляторе — не хочет, и получается 9+9=12, а не 18.
Если я правильно понял задачу, то:
35 байт, которые работают в эмуляторе
repeat
	xch r0
	dac
	xch r0
	jcn c1,add1
	ldm 9
	xch r0

	xch r1
	dac
	xch r1
	jcn c1,add1
	ldm 9
	xch r1

	xch r2
	dac
	xch r2
	jcn c1,add1
	ldm 9
	xch r2

	xch r3
	dac
	xch r3
	jcn c0,end
add1
	isz r8,repeat
	isz r9,repeat
	isz r10,repeat
	inc r11
	jun repeat
end



30 байт, которые не работают (но, вроде бы, должны)
	ldm 9
	xch r4
repeat
	clc
	xch r0
	add r4
	daa
	xch r0
	xch r1
	add r4
	daa
	xch r1
	xch r2
	add r4
	daa
	xch r2
	xch r3
	add r4
	daa
	xch r3
	jcn c0,end
	isz r8,repeat
	isz r9,repeat
	isz r10,repeat
	inc r11
	jun repeat
end


32 байта :)
repeat
	xch r0
	dac
	jcn c1,add0
	ldm 9

	xch r1
	dac
	jcn c1,add1
	ldm 9

	xch r2
	dac
	jcn c1,add2
	ldm 9

	xch r3
	dac
	xch r3
	jcn c0,end
add2
	xch r2	
add1
	xch r1
add0
	xch r0
	isz r8,repeat
	isz r9,repeat
	isz r10,repeat
	inc r11
	jun repeat
end


Конечно, если r11:r8 изначально нулевые.
М-м-м, по хорошему их не имеет смысла сюда постить — можно ж прям там засабмитить попытаться. А то секрет украдут :D
Действительно. Но убирать уже поздно.
А там есть что-нибудь интересное?
Там? Пряников и денег вроде не раздают :)

Ну просто в статистике по этой задаче можно зависнуть в топе списка назло потомкам. Но в общем на любителя конечно… Я и не пыталась эту сдавать. Но подсматривать в Ваше решение не хочу пока. М.б. прозрение озарит! Тем не менее спасибо — вернусь к нему если отчаюсь!
Забавная вещь, в своё время по 8080 в институтские годы нас сильно гоняли. Были стенды с самим процессором и периферией и ручным набор машинных кодов на цифровой клавиатуре. Сами написали под него компилятор, чтобы всё время по табличке не переводить, но вводить в любом случае вручную приходилось.

Спасибо, за статью и нахлынувшие тёплые воспоминания.
Отсутствие умножения не значит невозможности создать сложную систему. У меня z80 решал систему нелинейных дифференциальных уравнений второго порядка (числа, естественно, были с плавающей запятой). Правда, очень медленно.
Ну с учетом того, что умножение — это краткая запись сложения, то действительно ничего удивительного.
Да умножение-то дело нехитрое, я смутно припоминаю что умножение последовательным удвоением еще древние вавилоняне умели (т.к. они считали в 60-ричной системе и таблицы умножения запоминать было нереально).

Деление обычно самое нудное…
Only those users with full accounts are able to leave comments. Log in, please.