2016-04-13 18 views
0

Ich schreibe ein Programm, das eine Zeichenkette nimmt und die ursprüngliche Zeichenkette, eine Version der Zeichenkette, die nur Kleinbuchstaben ist, und eine Version der Zeichenkette, die nur aus Großbuchstaben besteht, ausgibt. Aus irgendeinem Grund, obwohl sieht die Ausgabe wie folgt aus:'- *' erscheint in Assembly-Ausgabe

Assembly is kinda fun 
assembly is kinda fun-* 
ASSEMBLY IS KINDA FUN 

ich nicht herausfinden können, warum die ‚- *‘ wird nach dem Klein Ausgabe erscheinen, zumal es in die Groß Ausgang praktisch identisch ist. Kann jemand bitte etwas Licht darüber werfen, warum dies geschieht? Hier ist mein Code:

TITLE MASM Template      (main.asm) 

; Description: 
; 
; Revision date: 4/12/16 

INCLUDE Irvine32.inc 
.data 
myString BYTE "Assembly is kinda fun", 0dh, 0ah, 0 
myOtherString BYTE 70 DUP(?), 0dh, 0ah, 0 
.code 

main PROC 
call Clrscr 
MOV EDX, OFFSET myString 
Call WriteString 
LEA ESI, myString 

MOV ECX, 70 
copyloop1: 
    MOV AL, [ESI] 
    OR AL, 00100000b 
    MOV myOtherString, AL 
    MOV EDX, OFFSET myOtherString 
    Call WriteChar 
    INC ESI 
LOOP copyloop1 
CALL Crlf 
LEA ESI, myString 
MOV ECX, 70 
copyloop2: 
    MOV AL, [ESI] 
    AND AL, 11011111b 
    MOV myOtherString, AL 
    MOV EDX, OFFSET myOtherString 
    Call WriteChar 
    INC ESI 
LOOP copyloop2 
CALL Crlf 
exit 
main ENDP 

END main 
+1

Bitarithmetik-Quiz: Was ist 0dh ODER 00100000b? Wie wäre es mit 0ah ODER 00100000b? –

+0

@NateEldredge 00101101 und 00101010 ... Ohhhhhhhhh danke lol – Aidan

+0

Welcher ist der ASCII-Code für ...? –

Antwort

2

Ihre Zeichenfolge myString Enden in 0dh,0ah (CR LF). Um Zeichen in Kleinbuchstaben umzuwandeln, ordnet Ihr Code sie mit 00100000b (20h). Sie tun dies auch mit dem CR LF, was zu Zeichen 2dh,2ah führt, die -* sind.

Um in Großbuchstaben zu konvertieren, UND Sie mit 11011111b. Dies konvertiert -* zurück zu CR LF, so dass Sie die lustigen Zeichen im Großbuchstaben-Ausdruck nicht sehen.