程序在数据段中定义的数组如下:
NAMESDB“YOM”
DB20
DB“ROSE”
DB30
DB“KATE”
DB25
请分析下列指令是否正确?为什么?(OFFSET为取偏移地址运算符)
(1)MOVAX,NAMES
(2)MOVAX,WORDPrRNAME+1
(3)MOVBX,6*2
MOVSI,5
MOVAX,OFFSETNAMES[BX][SI]
INC[AX]
OFFSET
(4)MOVBX,6
MOVSI,5
LEADI,NAMES[BX][SI]
MOVAL,[DI]
(1)该指令不正确,因为NAMES的属性为字节,而目的寄存器是AX,所以类型不匹配。 (2)该指令为合法指令,指令中已将定义的字节变量用伪指令PIR改变为字类型,所以避免了类型不匹配的错误。 (3)前两条指令是正确的,后两条指令是错误的,OFFSET操作将得到变量的编移地址,但对相对基址变址寻址方式形成的地址在汇编指令时还是未知的,最后一条指令中,AX不能作为基址寄存器。 (4)全为合法指令,第三条指令中的DI取得一个字节的值,然后再按DI中的偏移地址在数据段中将一字节内容传送到AL寄存器。