Auswerten von Zahlen

OP #2673541
Lesenswert?

Guten Tag liebe Programmierer Gemeinde,

ich hänge grad an einer kleinen Sache fest wie werte ich das Ergebnis 
einer Rechnung richtig aus.

Ich kann ja mit einem Register Zahlen von 0 - 255 darstellen aber was 
ist wenn die Rechnung über 255 geht, gut dafür hat man ja den überlauf 
und würde diesen einfach in ein anderes Register speicher.

Sagen wir in R17 wird immer der Überlauf von R16 Gespeichert dann würde 
die zahl 300 so aussehen

R17 0b0000-0001 und R16 0b0000-0101 aber wie bringe ich das nun auf ein 
Display woher weiß der Uc das wenn die Register so gesetzt sind sie den 
wert 300 haben ?

Mfg Bqube
Gast #2673686
Lesenswert?

Naja. Es scheint um ASM zu gehn. Man merkt sich, dass eine Variable 
16bit ist.

myvar: .byte 2

Dann wandelt man die 16 bit nach BCD indem man schaut, ob groesser als 
10000, falls ja 10000 sooft abzieht bis kleiner, und das ist dann die 
erste Zahl, dann sooft 1000 abziehen, bis kleiner als 1000, das ist dann 
die naechste Zahl. Dann sooft 100 abziehen, bis kleiner 100. Das ist 
dann die naechste Zahl. Dann sooft 10 abziehen, bis kleiner 10. Das ist 
dann die naechste Zahl. Und die letzte Zahl steht dann ja da.

Diese Prozedur sollte man fertig codiert finden.
OP #2674687
Lesenswert?

Damit könntest du recht haben nur mein problem ist bei C die ganzen ()/= 
{} usw wofür die auch immer in den Codes gebraucht werden

z.b

PORTB |= (1 << PB0);    Setzen
PORTB &= ~(1 << PB0);   Löschen

Da finde ich Assm leichter zu verstehen...

sbi PORTB, 0
cbi PORTB, 0

oder etwa nicht :)

Mfg Bqube
OP #2674854
Lesenswert?

So kann man es natürlich auch machen ... aber mal wieder eine frage zum 
Thema Rechnen

wenn ich 3-2 Rechnen möchte also

 0b0000-0011
-0b0000-0010
------------

Muss ich ja erst das 2er Komplement bilder also 
0b0000-0010=0b1111-1101+1
Dann addiere ich das ganze

 0b0000-0011
+0b1111-1110
------------
 0b0000-0001

bekomme ich darbei dann auch einen überlauf ?

Mfg Bqube
Gast #2675001
Lesenswert?

Hi

>Das Problem ist das wenn ich in den Negativen bereich komme müsste das
>MSB doch 1 sein und das N Flag gesetz werden oder etwa nicht ?

Ja. Das N-Flag ist immer das MSB des Resultats einer Operation.

MfG Spess
OP #2675003
Lesenswert?

Nur bei meiner Rechnung kommt immer der falsche wert raus z.b

1
.include "m8def.inc"
2

3
LDI R16, 0xff
4
OUT DDRB, R16
5
LDI R17, 0b00000001
6
LDI R18, 0b00000000
7
Sub R17, R18
8
OUt PORTB, R17
9
A:
10
Rjmp A

Das Ergebniss ist dann immer 0000-0001 und nicht 1111-1111 (zusätzlich 
noch die Flags gesetz).

Mfg Bqube

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren