2017-01-24 2 views
-7

Ich habe unter Dump von einem Programm erzeugt, dass nur zwei Zahlen Ich bin nicht in der Lage, Logik des Hinzufügens von zwei Zahlen In den angegebenen Code 6. und 7. Zeile zu verstehen, macht mir keinen Sinn mit zwei Leitungen bitteAssembly-Programm zum Hinzufügen von zwei Nummer

add ecx,00001010 6th line 

and ecx,00002020 7th line 

 

 movzx ecx,%GWA+000000E0 : VAR1 
     movzx eax,%GWA+000000E8 : VAR2 
     sal  ecx,08 
     or  ecx,eax 
     mov  eax,ecx 
     add  ecx,00001010 
     and  ecx,00002020 
     jne  GLB.4 
     movzx ecx,%GWA+000000E0 : VAR1 
     movzx eax,%GWA+000000E8 : VAR2 
     and  ecx,0F0F0F0F 
     and  eax,0F0F0F0F 
     add  ecx,eax 
     add  ecx,F6F6F6F6 
     mov  eax,ecx 
     and  eax,60606060 
     shr  eax,04 
     and  ecx,0F0F0F0F 
     sub  ecx,eax 
     or  ecx,30303030 
     add  ecx,10 
     bswap ecx 
     shr  ecx,10 
     mov  %GWA+0000000A,cx : TRLP+0 
     jmp  GLB.5 
+0

@ user143252 Es ist Ihre Aufgabe, eine entsprechend formatierte Frage zu liefern. Wenn Sie das nicht tun, erhalten Sie Downvotes. – fuz

+0

Es fügt zunächst 0x1010 zu "ecx" hinzu und dann ein bitweises UND von 'ecx' mit 0x2020. Ist das der Teil, den du nicht verstehst? Was fragst du eigentlich hier? –

+0

@CodyGray ja genau, warum das nötig ist? – user143252

Antwort

1

Diese beiden Linien für eine „negative“ Zeichen auf eine der beiden 16-Bit-Zonen aufgeteilt oder entpackt Dezimalzahlen prüfen, wird helfen, die eine Dezimalstelle enthalten pro Byte (bcd - binär codierte Dezimalzahl) in den Bits niedriger Ordnung (Bits 0 bis 3). Das Vorzeichen wird in den Bits 4 bis 7 des niederwertigsten Bytes gespeichert. Betrachtet man das letzte Byte der zonierten oder entpackten Dezimalzahl, würde ein Wert von 0x10, 0x50, 0x90, 0xd0 eine negative Zahl anzeigen.

Der Code nach jne GLB.4 macht eine entpackte bcd add, aber dann tut es einen Byte-Swap, also bin ich mir nicht sicher, was es mit der Summe macht.

Können Sie die Cobol-Datendivision für die beiden Zahlen und die Prozedurdivision für das Hinzufügen einschließen?

;  using desktop calculator in hex mode 
;    ecx = 002030405h  ;decimal 2345 
;    eax = 002070809h  ;decimal 2789 
     add  ecx,eax    ;ecx = 0040A0C0Eh 
     add  ecx,0F6F6F6F6h  ;ecx = 0FB010304h ;F6 does carries 
     mov  eax,ecx    ;eax = 0FB010304h 
     and  eax,060606060h  ;eax = 060000000h ;eax = value to subtract 
     shr  eax,004    ;eax = 006000000h ; for the non carries 
     and  ecx,00F0F0F0Fh  ;ecx = 00B010304h ;clear any 'F's 
     sub  ecx,eax    ;ecx = 005010304h ;fix the non carries 
             ;ecx = decimal 5134 
+0

Yup, ich werde tun, danke für die Hilfe – user143252

+0

Ich habe hinzugefügt @rcgldr – user143252

+0

@ user143252 - Was ich suche ist der Cobol-Quellcode für die Variablen VAR1 und VAR2, und der Quellcode, der das Hinzufügen zeigt. – rcgldr

Verwandte Themen