assembly 我代码有什么问题?它说操作码和操作数的组合无效

myzjeezk  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(161)

这是我代码

[ORG 0x0100]
    
    jmp  start
    
    even: dw 16,18,20,22,24,26,28,30,32    
    avg:  dw 0
    
average:     
a1: add  ax, [bx]    
    add  bx, 2    
    loop a1    
    ret
    
start:    
    mov ax,0    
    mov bx,even    
    mov cx,8    
    call average    
    mov bx,9    
    div ax    
    mov avg,ax    
    mov ax, 0x4c00  ;terminate program    
    int 0x21

我不知道为什么会出现此错误。

owfi6suc

owfi6suc1#

操作码和操作数的组合无效
如果这是NASM,则mov avg,ax需要变为mov [avg], ax以避免错误。
如果这是MASM,则mov bx,even需要变为mov bx, OFFSET even才能获得正确的结果。
出现错误!

  • 数组有9个元素,但使用mov cx,8只能处理8个元素。
  • 即使您准备使用mov bx,9进行除以9的除法运算,但执行的div ax是错误的。
  • 字长除法需要预先将DX归零
start:    
    mov ax, 0    
    mov bx, even    
    mov cx, 9    
    call average    
    mov bx, 9
    xor dx, dx    
    div bx
    mov [avg], ax    
    mov ax, 0x4C00  ;terminate program    
    int 0x21

相关问题