Login
Дайте направление решения задачи.
NEW 15.05.15 13:32
in Antwort lisenkalejka 15.05.15 12:56, Zuletzt geändert 15.05.15 15:03 (BorisL0)
Как я понимаю, подпрограмма должна найти остаток от деления числа из Puffer с десятичной записью: a_n a_{n-1} a_{n-2} ... a_0 на
число, записанное в Teiler.
Десятичное число в Puffer нужно представить так:
((((( a_n * 10 + a_{n-1} )*10 + a_{n-2})*10 + .... ) *10 + a_0
А далее поиск остатка от деления X ищется в цикле:
X <- остаток от деления ( a_n * 10 + a_{n-1} ) на Teiler
X <- остаток от деления X*10 + a_{n-2} на Teiler
X <- остаток от деления X*10 + a_{n-3} на Teiler ....
X <- остаток от деления X*10 + a_0 на Teiler.
Вот, вроде, и все.
P.S. a_{...} это я так обозначал индекс, "a маленькое ... снизу" (запись из LaTeX :)) )
число, записанное в Teiler.
Десятичное число в Puffer нужно представить так:
((((( a_n * 10 + a_{n-1} )*10 + a_{n-2})*10 + .... ) *10 + a_0
А далее поиск остатка от деления X ищется в цикле:
X <- остаток от деления ( a_n * 10 + a_{n-1} ) на Teiler
X <- остаток от деления X*10 + a_{n-2} на Teiler
X <- остаток от деления X*10 + a_{n-3} на Teiler ....
X <- остаток от деления X*10 + a_0 на Teiler.
Вот, вроде, и все.
P.S. a_{...} это я так обозначал индекс, "a маленькое ... снизу" (запись из LaTeX :)) )
NEW 15.05.15 14:08
in Antwort lisenkalejka 15.05.15 12:56, Zuletzt geändert 15.05.15 14:17 (AlexNek)
тут есть описание с примером
http://de.wikipedia.org/wiki/IBAN
1.Setze die beiden Prüfziffern auf 00 (die IBAN beginnt dann z. B. mit DE00 für Deutschland).
2.Stelle die vier ersten Stellen an das Ende der IBAN.
3.Ersetze alle Buchstaben durch Zahlen, wobei A = 10, B = 11, …, Z = 35.
4.Berechne den ganzzahligen Rest, der bei Division durch 97 bleibt.
5.Subtrahiere den Rest von 98, das Ergebnis sind die beiden Prüfziffern. Falls das Ergebnis einstellig ist, wird es mit einer führenden Null ergänzt.
Хотя надо еще с заданием сравнить, может они по другому хотят. Но в принципе нужно по определенному алгоритму, подсчитать контрольное число.
А в чем именно проблемы возникли?
Это оказывается задание 3, а второе как бы подготовка к нему
http://de.wikipedia.org/wiki/IBAN
1.Setze die beiden Prüfziffern auf 00 (die IBAN beginnt dann z. B. mit DE00 für Deutschland).
2.Stelle die vier ersten Stellen an das Ende der IBAN.
3.Ersetze alle Buchstaben durch Zahlen, wobei A = 10, B = 11, …, Z = 35.
4.Berechne den ganzzahligen Rest, der bei Division durch 97 bleibt.
5.Subtrahiere den Rest von 98, das Ergebnis sind die beiden Prüfziffern. Falls das Ergebnis einstellig ist, wird es mit einer führenden Null ergänzt.
Хотя надо еще с заданием сравнить, может они по другому хотят. Но в принципе нужно по определенному алгоритму, подсчитать контрольное число.
А в чем именно проблемы возникли?
Это оказывается задание 3, а второе как бы подготовка к нему
NEW 15.05.15 15:24
in Antwort BorisL0 15.05.15 13:32
Это, я так понимаю, схема Горнера?
Но мне сначала нужно дать определение мода. У меня же нет ее в списке. Может это глупость, что пишу. Но у меня на ум приходит только это. С мат. точки зрения mod (a, b) = a kleiner b, dann a/ Wenn a groser b, dann mod (a-b, b)/
Тогда можно написать так?
mod :
blt $a0, $a1, fertig
subbu $a0, $a0, $a1
beq $zero, $zero, mod
fertig:
addu $v0, $zero, $a0
jr $ ra
А дальше это нужно вписать в формулу Горнера с этим модом, как в двух формулах в задании при сложении и умножении чисел. Так? Каким кодом это показать?
Но мне сначала нужно дать определение мода. У меня же нет ее в списке. Может это глупость, что пишу. Но у меня на ум приходит только это. С мат. точки зрения mod (a, b) = a kleiner b, dann a/ Wenn a groser b, dann mod (a-b, b)/
Тогда можно написать так?
mod :
blt $a0, $a1, fertig
subbu $a0, $a0, $a1
beq $zero, $zero, mod
fertig:
addu $v0, $zero, $a0
jr $ ra
А дальше это нужно вписать в формулу Горнера с этим модом, как в двух формулах в задании при сложении и умножении чисел. Так? Каким кодом это показать?
NEW 15.05.15 15:30
in Antwort lisenkalejka 15.05.15 15:24
Да, это схема Горнера. Функцию вычисления остатка mod(a,b) Вы записали правильно. К сожалению, с
непосредственным кодом в ассемблере ничего не могу посоветовать -- не знаю :(((
непосредственным кодом в ассемблере ничего не могу посоветовать -- не знаю :(((
NEW 15.05.15 17:50
Можно и рекурсивно сделать но при больших числах будет неээфективно.
http://borlpasc.narod.ru/docym/le/pract/scalar/ostat.htm
Res := X - Trunc (X / Y) * Y;
Но я тоже не знаю как на вашем ассемблере реализуются операции с плавающей точкой и как real преобразовать в integer (это делает Trunc - не округляет, а отсекает дробную часть)
Пишите лучше на псевдокоде, тогда больше людей смогут его понять.
in Antwort lisenkalejka 15.05.15 15:24
В ответ на:
Но у меня на ум приходит только это
Но у меня на ум приходит только это
Можно и рекурсивно сделать но при больших числах будет неээфективно.
http://borlpasc.narod.ru/docym/le/pract/scalar/ostat.htm
Res := X - Trunc (X / Y) * Y;
Но я тоже не знаю как на вашем ассемблере реализуются операции с плавающей точкой и как real преобразовать в integer (это делает Trunc - не округляет, а отсекает дробную часть)
Пишите лучше на псевдокоде, тогда больше людей смогут его понять.
NEW 15.05.15 22:50
in Antwort lisenkalejka 15.05.15 12:56
Привет. Вопрос не по теме. А зачем так подробно изучают вирташафтсинформатики ассемблер? Есть же abap или vba
NEW 16.05.15 10:52
in Antwort Kvint 15.05.15 22:50
Не знаю, я программу обучения не составляю. У нас за семестр дают 2 недели на изучения Гита,2 недели ассемблер,3 недели Ява, 3 недели С, 3 недели С++. После каждого языка нужно сдать миниклаузур и проект. Я как лошадь в мыле(((
NEW 16.05.15 12:26
in Antwort lisenkalejka 16.05.15 10:52
Я как лошадь в мыле
-----
Еще раз скажу - вполне нормальное состояние.
Так, кстати, будет до окончания работы в ИТ...
5-10 дней на изучение проблемы и вперед, код
лепить...
-----
Еще раз скажу - вполне нормальное состояние.
Так, кстати, будет до окончания работы в ИТ...
5-10 дней на изучение проблемы и вперед, код
лепить...

NEW 16.05.15 13:10
Довольно странно, что за этот период с нуля можно изучить? А что они потом в бумажке напишут?
Конечно будет везде всё непонятно.
in Antwort lisenkalejka 16.05.15 10:52
В ответ на:
2 недели ассемблер,3 недели Ява, 3 недели С, 3 недели С++
2 недели ассемблер,3 недели Ява, 3 недели С, 3 недели С++
Довольно странно, что за этот период с нуля можно изучить? А что они потом в бумажке напишут?
Конечно будет везде всё непонятно.
NEW 16.05.15 14:15
in Antwort AlexNek 16.05.15 13:10, Zuletzt geändert 16.05.15 14:17 (lisenkalejka)
Вот поэтому помощи и прошу. Хотя читаю очень много. Пытаюсь во все вникнуть, но как только открываю задания, сразу паника, спустя 2-4 дня абсолютного погружения без отдыха, что-то начинаю понимать. Но зверски тяжело. Просто тут много ребят пришли из гимназий специализированных, а я лишь обычный пользователь, чуть выше среднего. Я тут дорешиваю, можно потом скину на проверку с пояснениями? А то отдавать в среду надо, но очень хочется заранее исправить ошибки, если они есть (а они, я чувствую, у меня будут обязятельно((((( )
NEW 16.05.15 14:25
in Antwort lisenkalejka 16.05.15 14:15
NEW 16.05.15 14:26
in Antwort lisenkalejka 16.05.15 14:15, Zuletzt geändert 16.05.15 14:29 (BorisL0)
Да, и еще замечание по поводу операции вычисления остатка от деления 2-х целых 4-байтовых чисел mod(a,b).
Похоже, что в этом ассемблере есть операция
Похоже, что в этом ассемблере есть операция
div $t5,$t6 # Lo = $t5 / $t6 (integer quotient)
# Hi = $t5 mod $t6 (remainder)
которая его (remainder) и возвращает. Так что сложности вроде алгоритма
mod (a, b) = a kleiner b, dann a/ Wenn a groser b, dann mod (a-b, b)/
как Вы написали, вроде как не нужны.
NEW 16.05.15 14:39
in Antwort lisenkalejka 16.05.15 14:28
Это было взято с сайта http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm --
краткий обзор команд этого ассемблера.
краткий обзор команд этого ассемблера.
NEW 16.05.15 16:29
in Antwort lisenkalejka 16.05.15 14:15
2-3 недели на язык, толком не разберешься а больше запутаешься.
Вот кстати ссыль на скрипт. Незнаю почему лежит в открытом доступе, но мне помог очень хорошо разобраться в ассемблере
www.mobile.ifi.uni-muenchen.de/studium_lehre/sose15/rechnerarchitektur/in...
Вот кстати ссыль на скрипт. Незнаю почему лежит в открытом доступе, но мне помог очень хорошо разобраться в ассемблере
www.mobile.ifi.uni-muenchen.de/studium_lehre/sose15/rechnerarchitektur/in...
NEW 16.05.15 16:32
in Antwort Kvint 16.05.15 16:29
NEW 16.05.15 18:50
in Antwort AlexNek 16.05.15 14:25, Zuletzt geändert 16.05.15 19:28 (lisenkalejka)
Nummer Name cs Bedeutung
$0 $zero — Hat beim Lesen immer den Wert 0
$1 $at — Wird vom Assembler verwendet; darf nicht vom Programmierer verwendet werden
$2–$3 $v0–$v1 nein Rückgabewerte eines Unterprogramms
$4–$7 $a0–$a3 nein Erste vier Argumente eines Unterprogramms
$8–$15 $t0–$t7 nein Temporäre Werte, Sichern durch Aufrufer
$16–$23 $s0–$s7 ja Temporäre Werte, Sichern durch Aufgerufenen
$24–$25 $t8–$t9 nein Temporäre Werte, Sichern durch Aufrufer
$26–$27 $k0–$k1 — Reserviert für das Betriebssystem
$28 $gp ja global pointer. Zeigt in die Mitte des ersten 64K Blockes im Datensegment
$29 $sp ja stack pointer. Kellerpegel
$30 $fp ja frame pointer. Schachtelzeiger
$31 $ra nein return address. Rücksprungadresse
A.3 Befehle
Art Opcode Operanden Bedeutung Kommentar
Arithmetik
addu $d $s t $d ← $s + $t
addiu $t $s i $t ← $s + sext32 16(i)
subu $d $s t $d ← $s − $t
Bitoperationen
and $d $s $t $d ← $s & $t
andi $d $s i $t ← $s & zext32 16(i)
or $d $s $t $d ← $s | $t
ori $d $s i $t ← $s | zext32 16(i)
xor $d $s $t $d ← $s ̂ $t
xori $d $s i $t ← $s ̂ zext32 16(i)
nor $d $s $t $d ← $s | $t
Shifts
sll $d $s n $d ← $s[31 − n ∶ 0] ⋅ 0n
srl $d $s n $d ← 0n ⋅ $s[31 ∶ n]
sra $d $s n $d ← ($s31)n ⋅ $s[31 ∶ n]
sllv $d $s $t $d ← s31−n … s0 ⋅ 0n
srlv $d $s $t $d ← 0t ⋅ s31 … st
srav $d $s $t $d ← st 31 ⋅ s31 … st
Vergleiche
slt $d $s $t $d ← if $s s< $t then 1 else 0
sltu $d $s $t $d ← if $s u<$t then 1 else 0
slti $d $s i $d ← if $s s<sext32 16(i) then 1 else 0
sltiu $d $s i $d ← if $s u< sext32 16(i) then 1 else 0
lui $d i $t ← i15 … i0 ⋅ 016
Laden
lw $d i($s) $d ← M[$s + sext32
16(i)] ($s + sext32
16(i)) & 3 = 0
lh $d i($s) $d ← sext32
16(M[$s + sext32
16(i)]) ($s + sext32
16(i)) & 1 = 0
lb $d i($s) $d ← sext32 8 (M[$s + sext32 16(i)])
lhu $d i($s) $d ← zext32 16(M[$s + sext32 16(i)]) ($s + sext32 16(i)) & 1 = 0
lbu $d i($s) $d ← zext32 8 (M[$s + sext32 16(i)])
Speichern
sw $d i($s) M[$s + sext32 16(i)] ← $d ($s + sext32 16(i)) & 3 = 0
sh $d i($s) M[$s + sext32 16(i)] ← $d[15 ∶ 0] ($s + sext32 16(i)) & 1 = 0
b $d i($s) M[$s + sext32 16(i)] ← $d[7 ∶ 0]
Sprung
beq $s $t offset pc ← pc + 4 + if $s = $t then sext32 16(offset) else 0
bne $s $t offset pc ← pc + 4 + if $s ≠ $t then sext32 16(offset) else 0
blez $t offset pc ← pc + 4 + if $t ≤ 0 then sext32 16(offset) else 0
bgtz $t offset pc ← pc + 4 + if $t > 0 then sext32 16(offset) else 0
bltz $t offset pc ← pc + 4 + if $t < 0 then sext32 16(offset) else 0
bgez $t offset pc ← pc + 4 + if $t ≥ 0 then sext32 16(offset) else 0
jal addr $31 ← pc + 8, pc ← addr
jr $s pc ← $s
syscall Rufe Betriebssystem
Pseudo
li $d i $d ← i
la $d l $d ← addr Lädt Adresse der Marke l
mul $d $s t $d ← $s × $t
div $d $s t $d ← $s/$t
not $d $s $d ← $s
neg $d $s $d ← −$s
b{lt, gt, le, ge} $d, $d, offset pc ← pc + 4 + if $s cmp $t then offset else 0
Это расшифровка...
$0 $zero — Hat beim Lesen immer den Wert 0
$1 $at — Wird vom Assembler verwendet; darf nicht vom Programmierer verwendet werden
$2–$3 $v0–$v1 nein Rückgabewerte eines Unterprogramms
$4–$7 $a0–$a3 nein Erste vier Argumente eines Unterprogramms
$8–$15 $t0–$t7 nein Temporäre Werte, Sichern durch Aufrufer
$16–$23 $s0–$s7 ja Temporäre Werte, Sichern durch Aufgerufenen
$24–$25 $t8–$t9 nein Temporäre Werte, Sichern durch Aufrufer
$26–$27 $k0–$k1 — Reserviert für das Betriebssystem
$28 $gp ja global pointer. Zeigt in die Mitte des ersten 64K Blockes im Datensegment
$29 $sp ja stack pointer. Kellerpegel
$30 $fp ja frame pointer. Schachtelzeiger
$31 $ra nein return address. Rücksprungadresse
A.3 Befehle
Art Opcode Operanden Bedeutung Kommentar
Arithmetik
addu $d $s t $d ← $s + $t
addiu $t $s i $t ← $s + sext32 16(i)
subu $d $s t $d ← $s − $t
Bitoperationen
and $d $s $t $d ← $s & $t
andi $d $s i $t ← $s & zext32 16(i)
or $d $s $t $d ← $s | $t
ori $d $s i $t ← $s | zext32 16(i)
xor $d $s $t $d ← $s ̂ $t
xori $d $s i $t ← $s ̂ zext32 16(i)
nor $d $s $t $d ← $s | $t
Shifts
sll $d $s n $d ← $s[31 − n ∶ 0] ⋅ 0n
srl $d $s n $d ← 0n ⋅ $s[31 ∶ n]
sra $d $s n $d ← ($s31)n ⋅ $s[31 ∶ n]
sllv $d $s $t $d ← s31−n … s0 ⋅ 0n
srlv $d $s $t $d ← 0t ⋅ s31 … st
srav $d $s $t $d ← st 31 ⋅ s31 … st
Vergleiche
slt $d $s $t $d ← if $s s< $t then 1 else 0
sltu $d $s $t $d ← if $s u<$t then 1 else 0
slti $d $s i $d ← if $s s<sext32 16(i) then 1 else 0
sltiu $d $s i $d ← if $s u< sext32 16(i) then 1 else 0
lui $d i $t ← i15 … i0 ⋅ 016
Laden
lw $d i($s) $d ← M[$s + sext32
16(i)] ($s + sext32
16(i)) & 3 = 0
lh $d i($s) $d ← sext32
16(M[$s + sext32
16(i)]) ($s + sext32
16(i)) & 1 = 0
lb $d i($s) $d ← sext32 8 (M[$s + sext32 16(i)])
lhu $d i($s) $d ← zext32 16(M[$s + sext32 16(i)]) ($s + sext32 16(i)) & 1 = 0
lbu $d i($s) $d ← zext32 8 (M[$s + sext32 16(i)])
Speichern
sw $d i($s) M[$s + sext32 16(i)] ← $d ($s + sext32 16(i)) & 3 = 0
sh $d i($s) M[$s + sext32 16(i)] ← $d[15 ∶ 0] ($s + sext32 16(i)) & 1 = 0
b $d i($s) M[$s + sext32 16(i)] ← $d[7 ∶ 0]
Sprung
beq $s $t offset pc ← pc + 4 + if $s = $t then sext32 16(offset) else 0
bne $s $t offset pc ← pc + 4 + if $s ≠ $t then sext32 16(offset) else 0
blez $t offset pc ← pc + 4 + if $t ≤ 0 then sext32 16(offset) else 0
bgtz $t offset pc ← pc + 4 + if $t > 0 then sext32 16(offset) else 0
bltz $t offset pc ← pc + 4 + if $t < 0 then sext32 16(offset) else 0
bgez $t offset pc ← pc + 4 + if $t ≥ 0 then sext32 16(offset) else 0
jal addr $31 ← pc + 8, pc ← addr
jr $s pc ← $s
syscall Rufe Betriebssystem
Pseudo
li $d i $d ← i
la $d l $d ← addr Lädt Adresse der Marke l
mul $d $s t $d ← $s × $t
div $d $s t $d ← $s/$t
not $d $s $d ← $s
neg $d $s $d ← −$s
b{lt, gt, le, ge} $d, $d, offset pc ← pc + 4 + if $s cmp $t then offset else 0
Это расшифровка...
NEW 16.05.15 18:57
in Antwort lisenkalejka 16.05.15 18:50, Zuletzt geändert 16.05.15 18:59 (BorisL0)
Попробуйте весь текст кода записать на форуме между pre в квадратных скобках
... и /pre тоже в квадр. скобках,
тогда не будет искажений форматирования, переносов итд.
... и /pre тоже в квадр. скобках,
тогда не будет искажений форматирования, переносов итд.