Ich las Buch Kip IRVINE Assembly Language for x86 Processors und er schrieb:Führende Null in Zeichenerweiterung in x86-Assembly?
zu größeren kleineren Werten Kopieren
Obwohl MOV Daten von einem kleineren Operanden zu einem größeren nicht direkt kann man kopieren, Programmierer Abhilfen erstellen können. Angenommen, der Zähler (ohne Vorzeichen, 16 Bit) muss nach ECX (32 Bit) verschoben werden. Wir können ECX gesetzt Zählung CX auf Null und bewegen:
.data count WORD 1 .code mov ecx,0 mov cx,count
Was passiert, wenn wir den gleichen Ansatz mit einer signierten ganzen Zahl gleich -16 versuchen?
.data signedVal SWORD -16 ; FFF0h (-16) .code mov ecx,0 mov cx,signedVal ; ECX = 0000FFF0h (+65,520)
Der Wert in ECX (+65.520) ist komplett anders als -16. Auf der anderen Seite, wenn wir gefüllte ECX erste mit FFFFFFFFh und dann signedVal zu CX kopiert, der endgültigen Wert wäre richtig gewesen waren: mit dem letzten Teil
mov ecx,0FFFFFFFFh mov cx,signedVal ; ECX = FFFFFFF0h (-16)
Mein Problem ist. Ich denke, die erste Zeile im obigen Code sollte mov ecx,FFFFFFFFFh
geschrieben haben, nicht 0FFFFFFFFh. Mit anderen Worten, was ist die führende Null?
'mov ecx, -1' sollte auch funktionieren. –