2013-01-17 49 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总和字符串

使用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 

已解决的WOOT!