2012-09-20 4 views
-2

안녕하세요, Nasm에서 루프를 만들려고합니다. 루프가 작동하지만 문자열이 바뀌면이 문자열을 변경하여이 작업을 수행하는 것처럼 보입니다.Nasm 문자열 만들기

나는이 작업이 :

main: 
     mov ebx,0    ; set ebx to 0 
     myloop:     ; 
     inc ebx     ; 
     mov [msg], 2Ah   ; Immediate move * to msg 
     mov eax, 2Ah    ; 
     push ecx    ; save ecx as printf uses it 
     push OFFSET msg   ; parameter used by printf 
     call printf    ; print string msg 
     add esp, 4    ; remove pointer to msg 
     pop ecx     ; restore ecx 
     cmp ebx,[len]   ; 
     jl myloop     ; 
     ret 


.DATA 

msg db "Hello, World+!", 0Ah, 0 ; 0A cariage return 
            ; 0 end of string 
star BYTE 2Ah ; 2A (hex) = Ascii * 
len equ $ - (msg +1)    ; length of string msg 
end 

을하며 *여보세요, 세계에 출력! 올바른 횟수로 출력하지만이 출력을 원합니다.

*ello, World! 
**llo, World! 
***lo, World! 
****o, World! 

등등.

누구든지 나를 도와 줄 수 있습니까?

출력을 위해 printf를 사용하려면 C 라이브러리에 링크되어 있다는 점에 유의해야합니다.

+0

언급하지 않습니다? 더 많이 MASM – Gunner

+0

Nasm와 Masm는 거의 같은 물건이다? – 1ftw1

+0

미안하지만, 그들은 밤낮으로 다르다! – Gunner

답변

2

는 나는이 NASM 방법이다

SECTION .data 
msg  db "Hello, World+!", 0Ah, 0 
len  equ $ - msg - 2 

SECTION .text 
main: 
    xor  ebx, ebx 
    mov  esi, msg 

    push esi 
    call printf 
    add  esp, 4 
.DoStar: 
    mov  byte [esi + ebx], 2Ah 
    push esi 
    call printf 
    add  esp, 4 

    inc  ebx 
    cmp  ebx, len 
    jne  .DoStar 
    ret