Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert Negation - assembler


von Julian S. (julian_92)


Lesenswert?

Hallo,


könnt ihr mir helfen?

Wie negiert man?

also von 0000 0001 zu 1111 1110 zum Beispiel.

"NEG" geht nicht bei mir in Assembler ? Hat mir jemand ne inc datei 
dafür oder kann mir helfen wie ich negiere?

von spess53 (Gast)


Lesenswert?

HI

com rxy

MfG Spess

von 123abc (Gast)


Lesenswert?

- Man muss zuerst wissen welchen uC man verwendet.
- zu diesem uC gibt es Datenblätter.
- in einem dieser Datenblätter sind die Assembler Befehle aufegführt
- mit einem der aufgeführten Assember Befehle kann man negieren
=> Ganz einfach!

von MN (Gast)


Lesenswert?

Mit 0xFF verXodern

von Max H. (hartl192)


Lesenswert?

Lass mich raten: Es ist ein AT89C5131
Suchst du den Befehl "CPL?

BTW: Unter negieren versteht man normalerweise das 2er-Komplement.

: Bearbeitet durch User
von Julian S. (julian_92)


Lesenswert?

Max H. schrieb:
> Lass mich raten: Es ist ein AT89C5131
> Suchst du den Befehl "CPL?
>
> BTW: Unter negieren versteht man normalerweise das 2er-Komplement.

Jap, ist genau dieser.

von 456def (Gast)


Lesenswert?

123abc schrieb:
> - zu diesem uC gibt es Datenblätter.
> - in einem dieser Datenblätter sind die Assembler Befehle aufegführt

Was haben die als Mnemonic für den Assembler verwendeten 
Buchstabenkombinationen mit dem Datenblatt des µC zu tun? Da kann jeder 
Assembler, i.e. das Programm, dass die Umsetzung von Buchstabenkürzeln 
in Hex-Code macht, sein eigenen Süppchen kochen. Wenn im Datenblatt 
Mnemonics auftauchen, ist das genauso wie mit Beispielschaltplänen in 
anderen IC-Datenblättern: Es sind Vorschläge, um die Phantasie der 
Entwickler zu inspirieren oder um der Phantasielosigkeit anderer 
Anwender auf die Sprünge zu Helfen. Es bleiben Vorschläge, was man 
machen könnte, aber zwingend ist da überhaupt nichts.

von Karl H. (kbuchegg)


Lesenswert?

456def schrieb:
> 123abc schrieb:
>> - zu diesem uC gibt es Datenblätter.
>> - in einem dieser Datenblätter sind die Assembler Befehle aufegführt
>
> Was haben die als Mnemonic für den Assembler verwendeten
> Buchstabenkombinationen mit dem Datenblatt des µC zu tun? Da kann jeder
> Assembler, i.e. das Programm, dass die Umsetzung von Buchstabenkürzeln
> in Hex-Code macht, sein eigenen Süppchen kochen.

Im Prinzip richtig.
Nur hat jeder µC-Hersteller auch seinen eigenen Leib und Magen 
Assembler, an dem sich dann auch andere Hersteller meistens orientieren, 
wenn sie für einen bestimmten µC einen Assembler schreiben.
Benutzt man von vorne herein, den Assembler des µC-Herstellers dann 
gelten auch seine Unterlagen. Benutzt man einen anderen, dann gelten 
eben die Unterlage dieses Herstellers.

Die Grundaussage ist aber nach wie vor dieselbe: Das alles ist irgendwo 
dokumentiert und um das Studium dieser Doku kommt man nicht herum. 
Selbst wenn das einen überhaupt nicht freut.

von Julian S. (julian_92)


Lesenswert?

Danke, funktioniert glaube ich :)

Nun ne andere Frage:

habe eine 3x4 Matrix tastatur angeschlossen

in Reihe 1 kommen nun als Dezimal: "1"er

in Reihe 2: "2"er

in Reihe 3: "4"er

in Reihe 4: "8er"

Wie löse ich es das die Tasten kommen?

(0,1,2,3,4,5,6,7,8,9,*,0,#)

von Possetitjel (Gast)


Lesenswert?

Max H. schrieb:

> Unter negieren versteht man normalerweise das 2er-Komplement.

Ich habe schon immer geahnt, dass ich unnormal bin. Ich
verstehe unter Negieren das Einer-Komplement.

 NOT(0) = 1
 NOT(1) = 0

NOT(01001111) = 10110000

Das Zweierkomplement ist im Gegensatz dazu eben das
Zweierkomplement.

von Max H. (hartl192)


Lesenswert?

Possetitjel schrieb:
> Ich habe schon immer geahnt, dass ich unnormal bin. Ich
> verstehe unter Negieren das Einer-Komplement.
Richtig erkannt.
Beim AVR und beim PIC(18 & 24) ist es z.B. so dass der ASM-Befehl fürs 
2er-Komplement NEG bzw. NEGF und der fürs 1er-Komplement COM bzw. COMF 
heißt. "NEG" steht zumindest beim PIC für negate (engl. für negieren).

von TomA (Gast)


Lesenswert?

Hallo Leute,

bevor ihr euch jetzt noch verhaut, sollten wir die Begriffe klären.

Max hat völlig recht, wenn er sagt:

> Unter negieren versteht man normalerweise das 2er-Komplement.

Mit negieren macht man aus positiven Zahlen Negative und umgekehrt, dazu 
verwendet man das 2er-Komplement (X NICHT +1). Z.B: 1=0000001 -> 
-1=11111111.

So wie ich das sehe will Julian aber invertieren, also einfach jede "0" 
zu "1" und jede "1" zu "0" (00000001 -> 11111110). Dazu verwendet man 
das 1er-Komplement (X NICHT).

von Possetitjel (Gast)


Lesenswert?

Max H. schrieb:

> Beim AVR und beim PIC(18 & 24) ist es z.B. so dass der
> ASM-Befehl fürs 2er-Komplement NEG bzw. NEGF und der
> fürs 1er-Komplement COM bzw. COMF heißt.

Ahh. Ja.

Das ist absolut logisch. Wenn wir das (Zweier-)Komplement
berechnen, nennen wir den Befehl "NEG". Wenn wir bitweise
negieren, heißt der Befehl konsequenterweise "COM" (wie
"complement"). Tut mir leid, dass ich daran gezweifelt habe.

> "NEG" steht zumindest beim PIC für negate (engl. für negieren).

Und berechnet wird selbstverständlich das (Zweier-)Komplement,
nicht wahr?

Die Sprachverschandler sind überall. Dass der USB gar kein Bus
ist, obwohl er so heißt, war erst der Auftakt... Wobei... das
ging schon früher los, fällt mir gerade ein. Legendär ist ja
der "integrierte Coprozessor". Nunja.

von Possetitjel (Gast)


Lesenswert?

TomA schrieb:

> Max hat völlig recht, wenn er sagt:
>
>> Unter negieren versteht man normalerweise das 2er-Komplement.

Nein, hat er nicht.

> Mit negieren macht man aus positiven Zahlen Negative und umgekehrt,

Nein. Mit negieren macht man aus "Falsch" --> "Wahr" bzw. aus
"Wahr" --> "Falsch". Die Negation ist eine Operation auf
Wahrheitswerten bzw. Binärzahlen; sie kann in offensichtlicher
Weise auf Binärvektoren verallgemeinert werden.

> dazu verwendet man das 2er-Komplement (X NICHT +1).
> Z.B: 1=0000001 -> -1=11111111.

Die Negation ist die Negation (das Einerkomplement).
Das Zweierkomplement ist das Zweierkomplement.

Zumindest ist und bleibt das in meinem Universum so; und die
Wikipedia ist damit kompatibel. Das langt mir; ich muss euch
nicht überzeugen.

von Max H. (hartl192)


Lesenswert?

Possetitjel schrieb:
>> "NEG" steht zumindest beim PIC für negate (engl. für negieren).
>
> Und berechnet wird selbstverständlich das (Zweier-)Komplement,
> nicht wahr?
Korrekt :-)

Wenn's um einzelne bits geht verwende ich auch gerne "negiert" für das 
log. NOT, weil es da zu keine Missverständnisse führt. Wenn's aber um 
Zahlen/Register in der ASM-Ebene geht, steht "negate", wie ich ober 
gezeigt habe, für das 2er-Komplement, das 1er-Komplement wird mit 
"complement" bezeichnet.

Possetitjel schrieb:
> und die
> Wikipedia ist damit kompatibel
Hast du Beispiele?

Possetitjel schrieb:
> Das langt mir; ich muss euch
> nicht überzeugen.
Na gut, wenn das in deinem Universum anders ist, dann passt schon. Man 
sollte ich aber un verwechlungsgefahr zu verhinder auf eine 
Ausbrucksweise eingien die in diesem Universum verwendet wird.

: Bearbeitet durch User
von TomA (Gast)


Lesenswert?

@ Possetitjel: Seltsames Universum, dein Universum. Ist aber nicht mein 
Problem und ich mache es auch nicht zu meinem Problem.

Ich hoffe Julian hilft es etwas weiter.

Bei MCS51 heist der Befehl zum invertieren "CPL A" und invertiert die 
einzelnen Bit einer im Akku befindlichen Binärzahl. Dabei steht "CPL" 
für Complement und meint das 1er-Komplement.

von Max H. (hartl192)


Lesenswert?

Julian Schnee schrieb:
> Danke, funktioniert glaube ich :)
>
> Nun ne andere Frage:
>
> habe eine 3x4 Matrix tastatur angeschlossen
>
> in Reihe 1 kommen nun als Dezimal: "1"er
>
> in Reihe 2: "2"er
>
> in Reihe 3: "4"er
>
> in Reihe 4: "8er"
>
> Wie löse ich es das die Tasten kommen?
>
> (0,1,2,3,4,5,6,7,8,9,*,0,#)
Zurück zur frage:

Wir haben das einlesen eine Matrixtastatur in der Schule ungefähr so 
gelöst:
Wir haben die Tasten einzeln nacheinander abgefragt und nebenbei nach 
jeder Taste den Akkumulator inkrementiert. Sobald eine Taste gedrückt 
war sind wir aus der Subroutine zurückgesprungen. Im Akku stand dann die 
Zahl die der gedrückten Taste entspricht. Wenn keine gedrückt war haben 
wir nach dem Return 0xFF in den Akku geschrieben.

von Julian S. (julian_92)


Lesenswert?

Mh, also alle Tasten gehen.

Problem ist nur ich muss die Spalten nur irgendwie unterscheiden können?

Kann ich irgendwie initialisieren dass, da wo Spalte1 & Reihe1 
angeschlossen sind, wenn da ein Spannungswechsel vorliegt 
(Spannungswechsel alles geklärt) dass ich dies irgendwie auf Dez:1  ; 
0000 0001b setzen kann?

So dann alle Tasten durch, dann wäre weiteres ein Kinderspiel.

Würde sowas gehen?

zB so (ist halt kein assembler sondern ne idee)

if(p2.0 && p1.0 == 1)
{
   mov a,#0000 0001b
}

sowas in der ART?


Gruß :)

von Possetitjel (Gast)


Lesenswert?

Max H. schrieb:

> Wenn's um einzelne bits geht verwende ich auch gerne
> "negiert" für das log. NOT,

Naja, von den theoretischen Grundlagen her fußt die ganze
Computerei ja auf der mathematischen Logik. UND, ODER, NICHT
ist halt die Grundlage; ob ich die Operationen auf logische
Variablen (die einen Wahrheitswert haben), auf einzelne Bits
oder auf Binärvektoren ("Register") anwende, ist erstmal
egal.

> wenn's aber um Zahlen/Register in der ASM-Ebene geht, steht
> negieren, wie ich ober gezeigt habe, für das 2er-Komplement,
> das 1er-Komplement wird mit "complement" bezeichnet.

Ich habe es eben für den Z80-Assembler geprüft, weil ich der
Meinung war, es sei dort anders. Zu meinem namenlosen Entsetzen
gilt dort jedoch auch:

CPL -- Einerkomplement (=bitweise Negation),
NEG -- Zweierkomplement.

Völlig krank. Ich sage ja: Die Sprachverschandler sitzen überall.
Warum - bitte - muss man einen Befehl, der bitweise negiert,
"CPL" nennen? Und warum heißt ein Befehl, der das Zweierkomplement
bestimmt, "NEG"?

Aber schön... Du hast ja nicht behauptet, dass es vernünftig ist,
sondern nur, es sei üblich. Ich gestehe also zu: Offenbar ist
es tatsächlich üblich. Die Amis nennen die Operation, die das
Komplement berechnet, "Negation", und die, die die Negation
berechnet, "Complement".

Ich nehme es zur Kenntnis. Verstehen muss ich's ja nicht.

>> Wikipedia ist damit kompatibel
> Hast du Beispiele?

Nein... das war ein Irrtum: Einer- und Zweierkomplement werden
dort korrekt erklärt (aber das war ja nicht unser Diskussionspunkt).
Der Begriff "Negation" taucht überhaupt nicht auf. Und im Artikel
"Negation" tauchen die Computer nicht auf. Ein Schelm, wer Arges
dabei denkt.... :)

von Possetitjel (Gast)


Lesenswert?

TomA schrieb:
> Seltsames Universum, dein Universum

Ein Universum, in dem der Befehl für das Komplement "CPL"
heißt und der Befehl für die Negation "NEG" ist seltsam?

Das ist wohl zu einfach und eines Assemblerprogrammierers
nicht würdig, oder wie?

von TomA (Gast)


Lesenswert?

Hallo Julian,

ich weiß nicht wie deine Tasten verschaltet sind, ist aber auch nicht 
wichtig. Ich würde mir, im Programmspeicher, eine Tabelle mit den 
Tastencodes anlegen und aus Spalte und Zeile einen Offset auf den 
entsprechenden Code in der Tabelle erzeugen. Funktioniert mit DPTR als 
Zeiger auf die Tabelle und Akku als Offset (Befehl: MOVC A,@A+DPTR).
Damit kannst du auf einfache Weise jeder Position der Tastatur einen 
beliebigen Code zuordnen und diesen, falls nötig, schnell ändern.

Aber nicht vergessen die Tasten zu entprellen!

Gruß. Tom

von Max H. (hartl192)


Lesenswert?

Julian Schnee schrieb:
> Problem ist nur ich muss die Spalten nur irgendwie unterscheiden können?
Das macht man normalerweise so:
Man aktiviert nur eine Spalte und fragt alle Tasten dieser Spalte ab, 
dann deaktiviert man sie wieder, aktiviert die Nächste fragt die Tasten 
diese Spalte ab und so weiter. Hast du vllt. einen Schaltplan dann kann 
man gewisse Sachen besser erklären...

Possetitjel schrieb:
> CPL -- Einerkomplement (=bitweise Negation),
> NEG -- Zweierkomplement.
Korrekt
Wieso muss man darüber eigentlich diskutieren? In der ASM-Welt steht 
CPL/COM fürs 1er- und NEG fürs 2er-Komplement, ob's dir gefällt oder 
nicht. Wenn jeder anfange würde die Begriffe neu zu definieren, wäre 
eine Kommunikation nur erschwert möglich...

: Bearbeitet durch User
von Possetitjel (Gast)


Lesenswert?

Max H. schrieb:

> Possetitjel schrieb:
>> CPL -- Einerkomplement (=bitweise Negation),
>> NEG -- Zweierkomplement.
> Korrekt,

Offenbar üblich, aber sprachlicher Schwachsinn.

> und wenn du die Begriffe

Stop. "CPL" und "NEG" sind keine Begriffe, sondern
Assemblermnemonics.

> für dich anders Definierst

Tue ich nicht.

Dass man Binärvariablen negieren kann, ist ja wohl unstrittig.
Dass man Binärvektoren ("Register") komponentenweise (sprich:
bitweise) negieren kann, ist wohl auch unstrittig, oder?

Warum es üblich ist, die bitweise Negation eines Binärvektors
mit "CPL" abzukürzen, die Berechnung des Zweierkomplementes
aber mit "NEG", erschließt sich mir nicht.

Ich habe nun gelernt, dass diese Zuordnung üblich ist. Du
gestattest mir aber bitte, meine Meinung über diese Üblichkeit
zu äußern. Diese lautet: Völlig blödsinnig.

> als die meisten Menschen

Findest Du es nicht etwas mutig, das tapfere Häuflein
der Assemblerprogrammierer als "die meisten Menschen"
zu bezeichnen?

Davon abgesehen: Ich bin noch nie missverstanden worden,
wenn ich von Komplement oder Negation gesprochen habe;
deswegen bin ich nicht auf die Idee gekommen, die Mnemonics
könnten exakt entgegengesetzt zugeordnet sein.

von Easylife (Gast)


Lesenswert?

Mein Kollege sagt immer:
A steht für Assembler und Affen.
C für Champagner und Chopin.

a = b ^ 0xff;

So, die Schlacht ist eröffnet ;-)

von Max H. (hartl192)


Lesenswert?

Possetitjel schrieb:
> "CPL" und "NEG" sind keine Begriffe
Ok, dann "Complement" und "Negaten"

> Findest Du es nicht etwas mutig, das tapfere Häuflein
> der Assemblerprogrammierer als "die meisten Menschen"
> zu bezeichnen?
Ok, dann die meinsten Menschen die sich mit diesem Thema beschäftigen.

> Warum es üblich ist, die bitweise Negation eines Binärvektors
> mit "CPL" abzukürzen, die Berechnung des Zweierkomplementes
> aber mit "NEG", erschließt sich mir nicht.
Schon mal auf die Idee gekommen, das Negieren etwas mit Negativ zu tun 
habe könnten (das 2er-Komplement macht aus einer positiven eine negative 
Zahl). Wenn nur Complement steht kann man nicht wissen ob das 1er- oder 
das 2er-Komplement gemeint ist, das wurde nun mal so festgelegt.
Anscheinend gehörst du nicht zu dem ASM-Programmierern da du bis heute 
nicht gemerkt hast, dass das Mnemonic für das 2er-Komplement NEG und das 
für das 1er CPL ist

> Meinung über diese Üblichkeit
> zu äußern. Diese lautet: Völlig blödsinnig.
Da sind wir anscheinen anderer Meinung, ich finde es gut so wie es ist.

von Max H. (hartl192)


Lesenswert?

Easylife schrieb:
> Mein Kollege sagt immer:
> A steht für Assembler und Affen.
> C für Champagner und Chopin.
Wow, in einem Wörterbuch findet man zu jedem Buchstaben noch viieel mehr 
Wörter... Wenn du gut suchst findest du vllt. ein Paar die noch weniger 
miteinander zu tun haben.

: Bearbeitet durch User
von Julian S. (julian_92)


Lesenswert?

Könnte mir bitte jemand ausführlich erklären wie es bei einer 3x4 
Tastatur sein muss oder sein Code einfügen?
Wäre super


zB p2.0, p2.1 p2.2 die spalten

p1.0 p1.1 p1.2 p1.3 die reihen


setzte alles auf high außer die eine spalte+reihe
clr p2.3 bis p2.6 (low setzen)


setb p2.1
setb p2.2

clr p2.0
clr p1.0 bis p1.3
JB p1.0, sichern

dass dan für jede taste.
würde es so gehen oder wie ?

von Max H. (hartl192)


Lesenswert?

Eine Tasten Matrix fragt man in etwa so ab:
Alle Spalten als Eingang
Alle Zeilen außer zeile 0 auf 1
An den Spalten alle Taster von Zeile 0 einlesen
Alle Zeilen außer Zeile 1 auf 1
An dem Spalten alle Tasten der 2. Zeile einlesen
...

: Bearbeitet durch User
von Possetitjel (Gast)


Lesenswert?

Vorbemerkung: Bitte unterlasse das ständige nachträgliche
Ändern Deiner Beiträge.

Max H. schrieb:
> Possetitjel schrieb:
>> CPL -- Einerkomplement (=bitweise Negation),
>> NEG -- Zweierkomplement.
> Korrekt
> Wieso muss man darüber eigentlich diskutieren?

Man muss nicht. Ich tue es aber, und Du tust es auch.

> In der ASM-Welt steht CPL/COM fürs 1er- und NEG
> fürs 2er-Komplement,

Ist wohl so.

Außerhalb der engen ASM-Welt steht die Negation eines
Binärvektors ("Register") für das Einerkomplement. Das
Einerkomplement ist ja gerade als bitweise Negation
definiert.
Muss ich für die Berechnung des Einerkomplementes erst
Quellen bringen, oder sind wir uns da einig?

Und eben weil das Einerkomplement als bitweise Negation
definiert ist, verwenden die Bewohner der ASM-Welt die
Abkürzung "NEG" für - TUSCH! - das Zweierkomplement.

Alles klar. Keine weiteren Fragen.

> Wenn jeder anfange würde die Begriffe neu zu definieren,

Jetzt halt aber die Luft an.
Warum muss man von einer "Instanz" reden, wenn man ein
Exemplar meint?
Warum muss man von einer "Statemachine" reden, wenn ein
simpler endlicher Automat gemeint ist?

von Possetitjel (Gast)


Lesenswert?

Max H. schrieb:

>> Warum es üblich ist, die bitweise Negation eines Binärvektors
>> mit "CPL" abzukürzen, die Berechnung des Zweierkomplementes
>> aber mit "NEG", erschließt sich mir nicht.
>
> Schon mal auf die Idee gekommen, das Negieren etwas mit Negativ
> zu tun habe könnten (das 2er-Komplement macht aus einer positiven
> eine negative Zahl).

Ja, schon mal auf die Idee gekommen. Vorhin.
Ich denke, dass das die Erklärung ist.

Ich finde das nach wie vor unschön, denn AND oder XOR sind ja
auch bitweise definiert, also warum gilt das für NOT (=NEG)
nicht?

> Wenn nur Complement steht kann man nicht wissen ob das 1er- oder
> das 2er-Komplement gemeint ist,

Naja, ich kenne das eben anders: Da das Einerkomplement gerade die
bitweise Negation ist, braucht man den Begriff "Einerkomplement"
nicht. (Ich habe den Begriff "Einerkomplement" tatsächlich sehr
viel später kennengelernt als das "Zweierkomplement".)

Das "Komplement" ist (in dieser Sichtweise) das Zweierkomplement,
und die Negation ist die Negation. Wozu zwei Begriffe für dieselbe
Sache?

> das wurde nun mal so festgelegt.

Nee. Sprache wird von den Sprechenden geschaffen. Hier wird versucht,
die Konventionen der amerikanischen Assemblerprogrammierer zum
verbindlichen Standard für die Allgemeinheit zu erklären. Das stört
mich.

> Anscheinend gehörst du nicht zu dem ASM-Programmierern

Sicher. Weil ich keinerlei Ahnung von Assembler habe, habe ich Dir
bestätigt, dass es beim Z80-Assembler auch so ist, wie Du behauptet
hast.
Du weißt doch, was ein Z80 ist, oder?

> da du bis heute nicht gemerkt hast, dass das Mnemonic für
> das 2er-Komplement NEG und das für das 1er CPL ist

Dass ich diese Befehle einfach nicht benötigt habe, ist unmöglich,
ja?

>> Meinung über diese Üblichkeit zu äußern. Diese lautet:
>> Völlig blödsinnig.
> Da sind wir anscheinen anderer Meinung, ich finde es gut so
> wie es ist.

Zugestanden. Ist a) Gewohnheit und b) Deine Privatsache.
Ich finde es zum Kotzen. Das ist a) Gewohnheit und b) meine
Privatsache.

von Max H. (hartl192)


Lesenswert?

Schon auf die Idee gekommen dass sich das negieren aufs Vorzeichen und 
nicht auf die einzelnen bits bezieht? Man spricht ja auch vom negieren 
der Zahl/des Registers und nich vom bitweisen negieren...

Sehen wir das ganze mal als Zahl:
Wie würdest du auf die Frage "Negiere -17" antworten:
[ ] 17
[ ] 16


Possetitjel schrieb:
> Zugestanden. Ist a) Gewohnheit und b) Deine Privatsache. Ich finde es
> zum Kotzen. Das ist a) Gewohnheit und b) meine Privatsache.
c) Konvention, zumindest in der ASM Welt.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Possetitjel schrieb:

> Zugestanden. Ist a) Gewohnheit und b) Deine Privatsache.
> Ich finde es zum Kotzen. Das ist a) Gewohnheit und b) meine
> Privatsache.


Dann mal Butter bei die Fische.
Welches Assembler Memnonic schlägst du denn für das 2-er Komplement vor?
es ist eine Sache etwas zum Kotzen zu finden. Es ist aber eine ganz 
andere Sache, ein Kürzel zu finden, welches genau den gewünschten 
Sachverhalt unmissverständlich ausdrückt.
Ein "Branch if Zero" nach einem "Compare" ist genauso unintuitiv für 
"Sprung wenn gleich", solange man nicht weiß, dass ein Compare nichts 
anderes als eine Subtraktion ist, von der nur die Flags übrig bleiben.

Im übrigen: kannst du den Schwachsinn jetzt bitte gut sein lassen. Das 
bringt niemanden weiter. Die beiden Kürzel NEG und CPL werden ganz 
einfach so verwendet wie sie es werden. Da muss man jetzt keine 
Staatsaffäre draus machen.

> Hier wird versucht, die Konventionen der amerikanischen
> Assemblerprogrammierer zum verbindlichen Standard für die
> Allgemeinheit zu erklären. Das stört mich.

Wer etwas baut hat nun mal Namensrecht. Warum haben die meisten Sterne 
die Eigennamen haben, arabische Namen? Weil es die Araber waren, die sie 
ihnen gegeben haben und damals eine blühende astronomische Kultur 
hatten, während sich der Rest der bekannten Welt die Schädel 
eingeschlagen hat.

Es gibt quer durch alle Fachbereiche immer eine Fachsprache. Du kannst 
die natürlich ignorieren und deine eigene schaffen. Aber dann mach das 
bitte in deinem Universum. Da ist es dann dem Rest der Welt egal, ob sie 
dich verstehen oder ob du durch die Verwendung deiner eigenen Sprache 
Verwirrung schaffst.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Julian Schnee schrieb:
> Wie löse ich es das die Tasten kommen?

Indem Du die Frage nicht ständig neu stellst, sondern endlich mal die 
vielen bereits gegebenen Erklärungen liest.
Und wenn Dir dabei etwas unklar ist, dann frage dazu konkret.

von Peter D. (peda)


Lesenswert?

Karl Heinz schrieb:
> Die beiden Kürzel NEG und CPL werden ganz
> einfach so verwendet wie sie es werden.

So isses.
COM ist eine logische Operation (wie AND, OR), d.h. bitweise.
NEG ist eine arithmetische Operation (wie ADD, SUB), d.h. byteweise.

von (prx) A. K. (prx)


Angehängte Dateien:

Lesenswert?

Wo ihr euch doch so schön um Sprache streitet, wie wäre es damit? Ist 
leider schon etwas älter, aber dafür komplett deutsch und 
dementsprechend leicht verständlich.
http://bitsavers.trailing-edge.com/pdf/aeg-telefunken/tr440/RD441_InstructionSet_Oct70.pdf

Die Maschine arbeitete mit Einerkomplementdarstellung, weshalb sich euer 
Problem der Unterscheidung von logischem und arithmetischem Komplement 
in Luft auflöst.

Aber ist ein Befehl wie QBR = "beQuemes Bringen aller Register" nicht 
eine zeitlose Schönheit?

: Bearbeitet durch User
von Bitflüsterer (Gast)


Lesenswert?

So ganz verständlich ist mir dieser ellenlange Disput aber nicht. Der TO 
hatte ja mit dem Beispiel klargestellt, dass er die bitweise Negation, 
resp. das Komplement, nicht aber ein Zweierkomplement meinte.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> Die Maschine arbeitete mit Einerkomplementdarstellung, weshalb sich euer
> Problem der Unterscheidung von logischem und arithmetischem Komplement
> in Luft auflöst.
Ist das diese Variante mit den zwei Nullen?
+0 = 00000000 und
-0 = 11111111

Zum Thema "Negieren" halte ich es so:
negieren    = aus einer positiven eine negative Zahl machen
invertieren = alle Bits umdrehen

Julian Schnee schrieb:
> Könnte mir bitte jemand ausführlich erklären wie es bei einer 3x4
> Tastatur sein muss oder sein Code einfügen?
Wie ist denn deine Hardware angeschlossen?

BTW: irgendwie verwirrend, wenn zwei Threads in einem stecken. Du 
hättest da besser einen neuen angefangen...

BTW2: ich fände es eine gute Idee, wenn du die Tastenabfrage selber 
machst. Den zugrundeliegenden Prozess nennt man "Lernen".

von (prx) A. K. (prx)


Lesenswert?

Lothar Miller schrieb:
> Ist das diese Variante mit den zwei Nullen?
> +0 = 00000000 und
> -0 = 11111111

Ja, wobei bei Arithmetik oft die negative 0 rauskam, weil hier die 
Subtraktion als Addition des Komplements implementiert war. Andere 
Rechner mit dieser Darstellungsart implementierten die Addition als 
Subtraktion des Komplements, damit eine positive 0 rauskam.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Possetitjel schrieb:
> Max H. schrieb:
>>> CPL -- Einerkomplement (=bitweise Negation),
>>> NEG -- Zweierkomplement.
>> Korrekt,
>
> Offenbar üblich, aber sprachlicher Schwachsinn.
>
>> und wenn du die Begriffe
>
> Stop. "CPL" und "NEG" sind keine Begriffe, sondern
> Assemblermnemonics.

Und sie stehen für Begriffe. Genau gesagt für englische(!) Verben:

CPL = (to) complement
NEG = (to) negate

Das deutsche Verb negieren ist übrigens viel weniger präzise als die 
beiden englischen Verben oben. Denn je nach Kontext kann es die logische 
Invertierung meinen oder die arithmetische.

Ich für mein Teil bin jedenfalls froh, daß Assembler-Mnemonics auf den 
i.d.R. präziseren englischen Begriffen beruhen.


XL

von (prx) A. K. (prx)


Lesenswert?

Axel Schwenke schrieb:
> Ich für mein Teil bin jedenfalls froh, daß Assembler-Mnemonics auf den
> i.d.R. präziseren englischen Begriffen beruhen.

Nja... Wenn ich einen Wert aus einem Register in ein anderes kopiere, 
weshalb verwende ich dann MOV(E) statt COPY? Und wenn ich auf einer Z80 
einen Wert aus dem Register in den Speicher schreibe, weshalb verwende 
ich dafür LD (=load)?

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

A. K. schrieb:
> Axel Schwenke schrieb:
>> Ich für mein Teil bin jedenfalls froh, daß Assembler-Mnemonics auf den
>> i.d.R. präziseren englischen Begriffen beruhen.
>
> Nja... Wenn ich einen Wert aus einem Register in ein anderes kopiere,
> weshalb verwende ich dann MOV(E) statt COPY? Und wenn ich auf einer Z80
> einen Wert aus dem Register in den Speicher schreibe, weshalb verwende
> ich dafür LD (=load)?

Hehe. Ich hätte es wissen sollen ;)

MOV finde ich auch ziemlich dämlich. Mit LD für load komme ich klar. 
Es funktioniert halt in beide Richtungen: LD A, (HL) und LD (HL), A.
Es gefällt mir sogar besser, die Richtung in den Operanden zu codieren 
als zwei verschiedene Menmonics a'la LD und ST zu verwenden. Und was 
copy angeht: das CP war halt schon vergeben für compare.

Ich stelle mir aber gerade vor, wie deutsche Assemblermnemonics aussehen 
würden. Statt ADD hätten wir ZUS (zusammenzählen), aus SUB würde ABZ, 
aus BREQ würde SWG usw. Das Carry-Flag hieße nicht C sondern Ü, was uns 
so tolle Mnemonics wie ZUSMÜ und ABZMÜ bescheren würde. usw. usf.


SCNR, XL

von (prx) A. K. (prx)


Lesenswert?

Axel Schwenke schrieb:
> Ich stelle mir aber gerade vor, wie deutsche Assemblermnemonics aussehen
> würden.

Eine reale Variante davon hatte ich oben schon verlinkt:
http://bitsavers.trailing-edge.com/pdf/aeg-telefunken/tr440/RD441_InstructionSet_Oct70.pdf
ZUS für Addition geht nicht, weil das für Zusammensetzen gebraucht wird.

Die komplett deutsche Beschreibung der CPU findet sich hier:
http://www.textfiles.com/bitsavers/pdf/aeg-telefunken/tr440/RD441_CPU_Descr_Apr70.pdf
Interrupts werden dort als "Eingriffe" bezeichnet.

: Bearbeitet durch User
von npn (Gast)


Lesenswert?

Possetitjel schrieb:
> Ich habe schon immer geahnt, dass ich unnormal bin. Ich
> verstehe unter Negieren das Einer-Komplement.


Possetitjel schrieb:
> Wenn wir das (Zweier-)Komplement
> berechnen, nennen wir den Befehl "NEG". Wenn wir bitweise
> negieren, heißt der Befehl konsequenterweise "COM" (wie
> "complement").


Possetitjel schrieb:
>> Max hat völlig recht, wenn er sagt:
>>
>>> Unter negieren versteht man normalerweise das 2er-Komplement.
>
> Nein, hat er nicht.


Entschuldigung, aber so oft wie du deine Meinung wechselst, solltest du 
in die Politik gehen :-)

von Max H. (hartl192)


Lesenswert?

npn schrieb:
> Possetitjel schrieb:
>> Ich habe schon immer geahnt, dass ich unnormal bin. Ich
>> verstehe unter Negieren das Einer-Komplement.
> […]
> Entschuldigung, aber so oft wie du deine Meinung wechselst, solltest du
> in die Politik gehen :-)

Mit dem ersten Statement lag er richtig und wenn man mal gewählt ist 
kann man dann sowieso jeden Blödsinn erzählen.

: Bearbeitet durch User
von F. F. (foldi)


Lesenswert?

Ich mache ja nichts mit ASM, aber es ist doch immer wieder lustig wie 
hier "Krümel zerkaut" werden.
Wie gut, dass es in C so einfach geht.

von Max H. (hartl192)


Lesenswert?

F. Fo schrieb:
> Wie gut, dass es in C so einfach geht.
Wenn man sich nur ein bisschen in ASM auskennt, dann ist es auch ganz 
einfach.
NEG  2er Komplement
CPL/COM 1er Komplement
Und wenn das beim verwendeten µC so ist, dann gibts da nix zu 
diskutieren.
Oder würdest du darüber diskutieren wieso es in C "if" und nicht "when" 
heißt?

von F. F. (foldi)


Lesenswert?

Max H. schrieb:
> F. Fo schrieb:
>> Wie gut, dass es in C so einfach geht.
> Wenn man sich nur ein bisschen in ASM auskennt, dann ist es auch ganz
> einfach.
> NEG  2er Komplement
> CPL/COM 1er Komplement
> Und wenn das beim verwendeten µC so ist, dann gibts da nix zu
> diskutieren.
> Oder würdest du darüber diskutieren wieso es in C "if" und nicht "when"
> heißt?

Das sollte ja mein Post aussagen. Wenn jemand fragt wie das Wort für 
Zustimmung und das Wort für Ablehnung heißt, dann würde man "Ja" und 
"Nein" antworten. Unsere Sprache ist natürlich viel vielfältiger, aber 
in einer Computersprache ist das doch ziemlich eindeutig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.