x86汇编语言中的LEA错误



我用16位x86汇编语言编写了一段代码来计算数组元素的平均值。它适用于32hC8h元素,但当我放置190h时,LEA si, array中出现错误。为什么?

数组的前2个字节表示数组大小。

我用emu8086。

data segment
array db 32h, 00, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9, 3, -10, 7, 14, 9

min db ?
max db ?
msg_average db 'The average = $'
msg_min db 'The minimum element is: $'
msg_max db 'The maximum element is: $'    
xxh dw ?
xxl dw ?
ends
stack segment
    dw   128  dup(0)
ends 
code segment 
start:
lea ax, data
mov ds, ax
mov es, ax
;Getting array size
lea si, array ;     HERE IS THE ERROR
mov cx, [si]
;Moving si to the location of the first element 
mov si, 0002h
.
.
.
.

使用LEA指令,只能加载变量的偏移量,而不能加载段!

对于该段,您必须使用MOV指令,如下所示:

mov ax, seg data

不幸的是,"seg"关键字的语法在不同的8086汇编程序中是不同的,因此汇编程序中的语法可能会有所不同。

最新更新