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

そのため、文字列から一度に 1 文字を読み取り、それを EBX レジスタに格納してから、その文字の値を取得し、EAX で実行中の合計を保持したいという問題があります。

8 ビットの符号なし算術演算を使用して、文字列の文字のすべての ASCII コードを加算します。オーバーフローは無視されます。最終的な値はチェックサムです。たとえば、文字列が「Joe」の場合、ASCII 値は 4A、6F、65 です。合計は 11E です。

4

1 に答える 1

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

ソルブド・ウート!!

于 2013-01-18T20:49:10.640 に答える