1

我是 ASM 的新手。我正在尝试完成一个简单的任务 - 1 到 100 之间的数字eax的总和将保持总和。
例如:1 + 2 + 3 + .. + 100

所以这里是相关的代码:

    XOR eax, eax ;; Set eax to 0
MOV ecx, 100 ;; We will loop 100 times
my_loop:
    ADD eax, ecx ;; We add the ecx register value to eax, ecx decreses by 1 every iteration untill he reaches 0
LOOP my_loop
  ;;Exit the program, eax is the exit code
push eax
call ExitProcess

当我调试exe文件时,eax为0。这怎么可能?

顺便说一句,有没有简单的方法可以将值打印EAX到控制台,而不是打开 Windbg 来检查它的值?

4

3 回答 3

0

这可行,虽然我使用 Irvine32.inc 库来打印我的结果,但只需使用您自己的方法来打印。结果仍在 EAX 中

TITLE   SOF_Sum

INCLUDE Irvine32.inc ;may remove this and use your own thing

.code

MAIN PROC
    MOV EAX, 0 ; or XOR EAX, EAX - sets eax to 0
    MOV ECX, 100 ; loop counter - our loop will run 100 times

    myloop:
        ADD EAX, ECX ; adds ECX to EAX
    loop myloop

    call writedec ;displays decimal version of EAX, from Irvine32.inc, replace

exit
main ENDP
END main

我认为这里重要的部分是循环过程,其他的可以是你自己设计的。

希望这会有所帮助(:

仲量联行

于 2013-10-14T06:47:17.573 回答
0

这个程序,稍微适应了FreshLib就像一个魅力。程序的核心是一样的,我只是添加了一些控制台输出。(嗯,它是 FASM 语法)所以,您只是没有注意到程序正常工作。

include "%lib%/freshlib.inc"

@BinaryType console

include "%lib%/freshlib.asm"

start:
        InitializeAll

        XOR  eax, eax ;; Set eax to 0
        MOV  ecx, 100 ;; We will loop 100 times
my_loop:
        ADD  eax, ecx ;; We add the ecx register value to eax, ecx decreses by 1 every iteration untill he reaches 0
        LOOP my_loop
  ;;Exit the program, eax is the exit code
        mov  ebx, eax

        stdcall NumToStr, ebx, ntsDec or ntsSigned
        stdcall FileWriteString, [STDOUT], eax

        stdcall FileReadLine, [STDIN]  ; in order to pause until ENTER is pressed.

        stdcall TerminateAll, ebx 

@AllDataEmbeded
@AllImportEmbeded
于 2013-10-14T06:50:25.760 回答
-2
assume cs:code,ds:data
data segment
org 2000h
series dw 1234h,2345h,0abcdh,103fh,5555h
sum dw 00h
carry dw 00h
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,00h
mov bx,00h
mov cx,05h
mov si,2000h
go:add ax,[si]
adc bx,00h
inc si
inc si
dec cx
jnz go
mov sum,ax
mov carry,bx
mov ah,4ch
int 21h
code ends
end start
于 2016-09-27T10:51:47.780 回答