0

期待される出力が得られません。10 倍継続する必要があるループがあり、次に 10 倍継続する必要がある 2 番目のループがあります。ループは個別に印刷する必要があります

section .data
    msg1:   db  "first",10,0
    msg2:   db  "second",10,0
    len1:   equ $-msg1
    len2:   equ $-msg2
section .bss
    num resb    1    ;reserve 1 byte
section .text
    global main
main:
    mov [num], BYTE 10d ;num = 10
    loop:
    mov edx,    len1
    mov ecx,    msg1
    mov ebx,    1
    mov eax,    4
    int 80h
    dec BYTE [num]      ; num--
    cmp [num], BYTE 0
    jnz loop        ; jump if not equal to zero

    mov [num], BYTE 20d ; num = 20
    loop2:
    mov edx,    len2
    mov ecx,    msg2
    mov ebx,    1
    mov eax,    4
    int 80h
    sub [num], BYTE 2   ; num = num - 2
    cmp [num], BYTE 0
    ja loop2        ; jump if above 0

    mov eax,    1
    mov ebx,    0
    int 80h

私は得ています first second first second first second first second first second first second first second first second first second first second second second second second second second second second second second

しかし、私は期待していますfirst first first first first first first first first first second second second second second second second second second second

アセンブリ (NASM) は初めてですが、何が間違っていますか?

4

1 に答える 1

3

問題はあなたの定義にあります:

section .data
msg1:   db  "first",10,0
msg2:   db  "second",10,0
len1:   equ $-msg1
len2:   equ $-msg2

msg1ここでは、最初のメッセージと 2 番目のメッセージのすべてが含まれていると言っています。

そうあるべき

msg1:   db  "first",10,0
len1:   equ $-msg1

msg2:   db  "second",10,0
len2:   equ $-msg2
于 2013-08-13T21:26:28.073 に答える