2013-01-17 4 views
0
INCLUDE Irvine32.inc 
.data 
fullName BYTE "Bob Johnson",0 
nameSize = ($ - fullName) - 2 
.code 
main PROC 
    mov ECX,nameSize 
    mov ESI,OFFSET fullName 
Sum: 
    mov EBX,[ESI+ECX] 
    add EAX,EBX 
    loop Sum 
    exit 
main ENDP 
END main 

그래서 한 번에 한 문자열에서 한 문자를 읽고 EBX 레지스터에 저장하고 해당 문자의 값을 가져 와서 누적 합계를 유지하려고합니다. EAX에서.MASM 문자열에서 Ascii의 합계

8 비트 부호없는 산술을 사용하여 문자열 문자의 모든 ASCII 코드를 함께 추가하십시오. 오버플로는 무시됩니다. 최종 값은 체크섬입니다. 예를 들어, 문자열이 "Joe"이면 ASCII 값은 4A, 6F, 65입니다. 합계는 11E입니다.

답변

0
INCLUDE Irvine32.inc 
.data 

fullName BYTE "Bob Johnson",0  ; String storing name 
nameSize = ($ - fullName) ; Variable storing length of name 

.code 
main PROC 

    mov ECX,nameSize  ; Set counter for loop 
    mov ESI,OFFSET fullName ; Set pointer at fullName variable 
    mov EAX,0    ; Clear the EAX register 
    mov EBX,0    ; Clear the EBX register 

Sum:      ; Loop 

    mov bl,[ESI + ECX - 1] ; Use the bl (8 bit register) to point at characters in the string. 
    add EAX,EBX   ; Add the two registers together 

    loop Sum    ; Loop 

    call DumpRegs   ; Display results 

    exit 
main ENDP 

END main 

SOLVED WOOT !!