在汇编语言中我使用16位寄存器,如何在此代码中打印6?

时间:2015-02-01 03:07:33

标签: arrays assembly

.data

num dw 2,4,6,8,10

.code

main proc

mov eax,0

mov si,2

mov ax,num[si*2]

我想打印数组元素6,但错误是无效使用寄存器。如何解决它。

1 个答案:

答案 0 :(得分:0)

我猜这是16位80x86程序集。我不知道它是哪个汇编程序(它不是GAS / AT& T,可能不是NASM / YASM / FASM,可能还有MASM或TASM)。不知道哪个汇编程序我不知道它所期望的语法。

但是,对于80x86上的16位寻址,无法对该指令进行编码(假设开始时不是语法错误)。替代方案包括:

a)执行add si,si然后(取决于哪个汇编程序)mov ax,[num+si]mov ax,num[si]

b)执行mov bx,si然后(取决于哪个汇编程序)mov ax,[num+bx+si]mov ax,num[bx+si]

c)执行mov si,2*2然后(取决于哪个汇编程序)mov ax,[num+si]mov ax,num[si]

d)如果它是在32位CPU上运行的16位代码;执行mov esi,2然后(取决于哪个汇编程序)mov ax,[num+esi*2]mov ax,num[esi*2]

e)(取决于哪个汇编程序)mov ax,[num+2*2]或我不知道是什么(可能mov ax,(num+2*2)[]?)。