如何修复 - 操作码和操作数的无效组合

时间:2014-12-30 16:42:48

标签: assembly

section .rodata
MSG:    DB  "welcome",10,0
S1: DB  "%d",10,0 ; 10 = '\n' , 0 = '\0'

section .data

array   DB 5,1,7,3,4,9,12,8,10,2,6,11
len DB 12   

section .text
    global main
    extern printf

main:   
    mov ecx,12  
    mov eax,0 
    xor esi, esi
    again:
        mov al, byte[array+esi]
        push al
        pop ebx 
        add eax,ebx 
        inc esi
        jmp again
    push eax    
    call printf
    mov eax, 1  ;exit system call
    int 0x80

1 个答案:

答案 0 :(得分:2)

push al指令不存在 即使它确实存在,然后按下一个字节然后弹出一个dword会让你的堆栈不平衡 幸运的是,这个程序没有编译,因为它也进行了无限循环。您需要将jmp again更改为loop again