Forum: PC-Programmierung Wie sieht dieses bitte aus in ASM : mov ax, (0fh shl 8) + 2


von Peter B. (funkheld)


Lesenswert?

Hallo , guten Tag.

Mein ASM meldet hier einen Fehler.
Das Stück stammt auc TurboC :
mov    ax, (0fh shl 8) + 2

Wie wird das bitte richtig umgesetzt?

Danke

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Peter B. schrieb:
> Hallo , guten Tag.
>
> Mein ASM meldet hier einen Fehler.
> Das Stück stammt auc TurboC :
> mov    ax, (0fh shl 8) + 2
>
> Wie wird das bitte richtig umgesetzt?

Kommt darauf an, was "dein ASM" für eins ist. RTFM!

von S. Z. (moennky)


Lesenswert?

Ist das aus BASM? (Borland Assembler)

von Klaus S. (kseege)


Lesenswert?

Ob S. schrieb:
>> Wie wird das bitte richtig umgesetzt?
>
> Kommt darauf an, was "dein ASM" für eins ist. RTFM!

Oder man rechnet es selber aus:
mov ax, 0xf02

Geht sogar ohne Taschenrechner.

SCNR

von Peter B. (funkheld)


Lesenswert?

Das ist ein Bordland ASM.

Danke fürdie Hilfe.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Peter B. schrieb:
> Das ist ein Bordland ASM.
>
> Danke fürdie Hilfe.

Who the fuck is "Bordland"?

von J. R. (yoc)


Lesenswert?

1
.model tiny
2
.code
3
start:
4
mov    ax, (0fh shl 8) + 2
5
ends
6
end start

wird bei mir mit Borland TASM 1.0 problemlos übersetzt.

von Peter D. (peda)


Lesenswert?

Peter B. schrieb:
> Mein ASM meldet hier einen Fehler.

Und wie lautet der?

von Rbx (rcx)


Lesenswert?

Peter B. schrieb:
> Wie wird das bitte richtig umgesetzt?

Wenn man sich das Shiften bzw. Multiplizieren sparen möchte, könnte man 
schreiben,
mov ah, 0F
mov al, 02

Rumrechnereien dieser Art macht man hier und da besser mit LEA.
Vergessen sollte man auch nicht, dass mit Vorzeichen anders geshiftet 
wird. In 8 Bit gedacht wäre F0 schon negativ. Bei 16 Bit sind (mit 
Vorzeichen) alle Zahlen ab 8000 negativ.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> mov ah, 0F
> mov al, 02

ist das Gleiche wie MOV AX,0F02

von Rbx (rcx)


Lesenswert?

Ben B. schrieb:
> ist das Gleiche wie MOV AX,0F02

Klar, nur wenn als Übergabeparameter nur 8 Bit-Werte übergeben werden, 
dann kann man sich das Geshifte sparen, so war das gemeint. Früher war 
ja das Shiften auch nicht so dolle schnell.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Rbx schrieb:
> Ben B. schrieb:
>> ist das Gleiche wie MOV AX,0F02
>
> Klar, nur wenn als Übergabeparameter nur 8 Bit-Werte übergeben werden,
> dann kann man sich das Geshifte sparen, so war das gemeint. Früher war
> ja das Shiften auch nicht so dolle schnell.

LOL. Das shiften passiert hier (immediate Werte) bei der Übersetzung des 
Programms, nicht zur Laufzeit. Wenn du nichtmal das begriffen hast, bist 
du in dieser Diskussion definitiv völlig fehlplaziert.

von Rbx (rcx)


Lesenswert?

Ob S. schrieb:
> LOL. Das shiften passiert hier (immediate Werte) bei der Übersetzung des
> Programms, nicht zur Laufzeit. Wenn du nichtmal das begriffen hast, bist
> du in dieser Diskussion definitiv völlig fehlplaziert.

Tja, und wenn du wüsstest, wieviel Leute sich über eine schnelle 
Übersetzung freuen, hättest du dir auch diesen neunmalklugen Beitrag 
sparen können.

von Harald K. (kirnbichler)


Lesenswert?

Ob S. schrieb:
> Wenn du nichtmal das begriffen hast

Immerhin, Du kannst auch anderes als keine Ahnung haben, zu Deinen 
Qualifikationen gehört noch das Herumpöbeln.

Ja, aus Dir wird noch mal was. Weiter so!

von Udo S. (urschmitt)


Lesenswert?

Rbx schrieb:
> Tja, und wenn du wüsstest, wieviel Leute sich über eine schnelle
> Übersetzung freuen

Wie viele Sekunden braucht denn dein Assembler um diese Zeile zu 
assemblieren?

Rbx schrieb:
> hättest du dir auch diesen neunmalklugen Beitrag
> sparen können.

Es ist schon eine wesentliche Information was jetzt der Assembler einmal 
beim Übersetzen macht, und was später das übersetzte Programm macht.

Vor allem da deine Aussage:

Rbx schrieb:
> Früher war ja das Shiften auch nicht so dolle schnell.

ziemlich stark impliziert, dass du dachtest das shiften passiert zur 
Ausführungszeit des zu übersetzenden Programms.

von Rbx (rcx)


Lesenswert?

Udo S. schrieb:
> ziemlich stark impliziert, dass du dachtest das shiften passiert zur
> Ausführungszeit des zu übersetzenden Programms.

Naja, ich dachte eher an "kann kein Asm, kann aber Asm-Code lesen"(was 
ja auch OK ist) - außerdem spielt das (mit dem Shiften) ja heute auch 
kaum noch eine Rolle, oder doch?

Wirklich gute Leute hätten das hier auch nicht nötig gehabt, zu 
schlaumeiern - allerdings programmieren hier die meisten guten Leute 
eher in c (oder Pascal) - und das ist auch gut so. Mein Ziel ist dann 
mehr, auf unauffällige Weise den ein oder anderen Asm-Hintergrund zu 
vermitteln, so gut es eben geht - ohne jetzt missionieren zu wollen.
Würde auch gar keinen Sinn machen, u.a. weil der ARM-Asm-Code so 
herrlich uninspirierend ist.

von Peter (pittyj)


Lesenswert?

Rbx schrieb:
> Würde auch gar keinen Sinn machen, u.a. weil der ARM-Asm-Code so
> herrlich uninspirierend ist.

Das ist ARM Assembler Code?
Hui, und ich dachte über 30 Jahre lang, dass
"mov    ax, (0fh shl 8) + 2"
irgendwas mit 8086 zu tun hätte.
Danke, dass du mein Weltbild korrigiert hast.

von Rbx (rcx)


Lesenswert?

Peter schrieb:
> Danke, dass du mein Weltbild korrigiert hast.

Freut mich wenn ich helfen konnte. :)
Die Shifterei beim ARM ist, zumindest beim Barrel-Shifter praktisch 
identisch mit dem C-Code.
https://www.davespace.co.uk/arm/introduction-to-arm/barrel-shifter.html

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.