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

Assembly 如何修复-操作码和操作数的无效组合,assembly,Assembly,push al指令不存在。 即使它确实存在,那么在按下一个字节后弹出一个双字也会使堆栈不平衡。 幸运的是,这个程序没有编译,因为它还执行无限循环。您将要再次将jmp更改为再次循环错误消息是否带有行号?此外,标签的使用也不一致,有时在MSG:DB…中使用冒号(:),有时在array DB…中不使用冒号。没有push r8。阅读手册。即使有,它也不会执行您想要的操作,可能是movzx ebx,al或movzx ebx,byte[array+esi]跳过一步。 section .rodata MSG:

push al
指令不存在。
即使它确实存在,那么在按下一个字节后弹出一个双字也会使堆栈不平衡。

幸运的是,这个程序没有编译,因为它还执行无限循环。您将要再次将
jmp
更改为
再次循环

错误消息是否带有行号?此外,标签的使用也不一致,有时在
MSG:DB…
中使用冒号(
),有时在
array DB…
中不使用冒号。没有
push r8
。阅读手册。即使有,它也不会执行您想要的操作,可能是
movzx ebx,al
movzx ebx,byte[array+esi]
跳过一步。
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