2016-04-13 30 views
0

Bir dize alacağım ve orijinal dizeyi, tüm küçük harfli dizenin bir sürümünü ve tüm büyük harfli dizenin bir sürümünü çıkaran bir program yazıyorum. Nedense olsa da, çıkış şuna benzer: neden çözemiyorum'- *' Montaj çıktısında görünen

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

'- *' küçük çıkışı sonrasında görünüyorsa o büyük çıkışa neredeyse özdeş olduğunu, özellikle de. Birisi bunun neden olduğuna dair biraz ışık tutabilir mi?

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

Bit aritmetik quiz: 0dh VEYA 00100000b nedir? 0ah VEYA 00100000b hakkında ne dersiniz? –

+0

@NateEldredge 00101101 ve 00101010 ... Ohhhhhhhhh teşekkürler lol – Aidan

+0

... ASCII kodu nedir? –

cevap

2

Sizin dize 0dh,0ah (CR LF) içinde myString uçları: İşte benim kod. Karakterleri küçük harfe dönüştürmek için, kodunuzu 00100000b (20h) ile girin. Bunu ayrıca CR LF'ye yapın, 2dh,2ah karakterleri ile -* olan karakterleri elde edin.

Büyük harfe dönüştürmek için, sen AND 11011111b ile. Bu, -*'u CR LF'ye geri döndürür, böylece büyük harfli çıktıdaki komik karakterleri göremezsiniz.