Hallo, ich wollte mal fragen ob einer mal mein Programm kontrollieren kann. Aber zuerst hab ich noch ne andere Kleinigkeit. in einem 16 Bit Register steht der Wert 90C7. Der entspricht ja dezimal 37063 wenn sf nicht gesetzt ist aber wie sieht es aus wenn sf gesetzt ist? So nun zu meinem Prog.: Ich habe eine Gleichung mit z= ((x*2+y)/20). Für x und y sol ich jeweils eine Byte Variable mit vorzeichenbehafteten Initialwert und für Z eine Byte Variable für den Quotienten und eine für den Divisionsrest.Beide sollen keinen bestimmten Initialwert haben. Weil vorzeichenbehaftet muss imul und idiv benutzt werden. Jetzt hab ich das raus: .data x DB 12 y DB 6 Z DB ?;?;? ;1Byte Quotient ;2Byte Rest ;------------------------------------------- .stack 16 ;16Byte stack reserviert ;------------------------------------------- .code .startup mov al, x mov bl, 2 imul bl mov bl, y add bl mov bh, 20 idivbh mov z[0], ah mov z[1], al .exit ist das soweit ok oder hab ich da nen Fehler drin? Hoffe Ihr könnt kurz helfen. Danke!
Ich denke einer deiner Hauptfehler besteht darin, dass du hier imul bl mov bl, y add bl davon ausgehst, dass das Ergebnis der Multiplikation wieder nur 8 Bit haben wird und du daher nur mit 1 Byte weiterrechnest. Im übrigen: Versuch macht kluch. Warum probierst du die Sequenz nicht einfach aus, anstatt hier zu warten? Den 9 Zeiler hast du schneller durch den Assembler und Debugger gejagt, als du hier die Überschrift schreiben kannst.
danke, also wäre es besser mit datseg SEGMENT var_x db01 var_y db02 var_z db? var_zr db? datseg ENDS mov ax,3 mul var_x add ax, var_y div 20 mov var_z, al mov var_zr, ah .exit da ich jetzt ax benutze passt es oder? bin auch gerade dabei mir den assambler zu besorgen.
aber wie sieht es denn nun mit der Hex zahl in dezimal aus wenn sf gesetz ist? wie komme ich auf den wert?
Das Signed-Flag hat nichts mit der Interpretation von Registern zu tun. Das SF wird von den verarbeitenden Befehlen gesetzt (z.B. beim Compare) Die Interpretation des Wertes hängt nur von den Befehlen ab, die du benutzt. IMUL wird es als signed (1er Komplement) interpretieren. MUL als unsigned.
Tobias schrieb: > aber wie sieht es denn nun mit der Hex zahl in dezimal aus wenn sf > gesetz ist? wie komme ich auf den wert? Der Emu8086 hat auch nen Umrechner den findest du bei Math -> Number Converter. Dort wird dir auch der signed und unsigned Wert deiner Hexadezimalzahl angezeigt. Willst du den Wert von Hand umrechnen musst du mit dem 2er Komplementär aus der Digitaltechnik Vorlesung rechnen. Also kurz gesagt: alle Bits Invertieren 1 addieren Ergebnis steht nun im 2er Komplementär da Für deine 90C7h (37063) ergeben sich 6F39h und dies ergibt -28473 dezimal Schöne Grüße an Prof. Münke
Hi Tomek, jupp grüße den Münke ;-) Hab das mit dem Programm aus meinem ersten Beitrag leider doch nicht hin bekommen. Kannst du mir da mal auf die sprünge helfen? Assembler ist leider echt nicht mein ding.
das ist was ich habe, .data x db 12 y db 06 z db ?,?,? .stack 16 .code .startup mov al,x mov bl,2 imul bl mov bl,y add bl mov bh,20 idiv bh mov z[0],ah mov z[1],al .exit bei x db 12 und y db 06 kann ich ja im Prinzip jede Zahl einsetzen oder? gebe damit doch nur an welchen wert x bzw. y haben soll, richtig?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.