【正确答案】ANEG32MACRO X,Y
MOV CX,4
DIV CX,TYPE X ;判断是16位操作数,还是32位操作数.求减次数
CLC
LEA SI,A
LP: SBB [SI],X
INC SI
DEC CX
JZ OVER
SBB [SI],Y
OVEV: NOP
ENDM
【答案解析】利用SBB指令,通过控制循环次数,完成由16位8086/8088指令到32位80386指令使用的转换。南于80X86系列机是补码体系结构,即数据在计算机内部按补码方式存放,正数等于操作数本身,负数等于该操作数的补码。求一个数的补码就是用0—操作数(请参看《汇编语言程序设计教材》(第二版)P47中NEG指令的用法)。在8086/8088指令系统中,DX:AX中存放着两个16位的操作数(32位)。需要使用带进位减法SBB完成两个字节的操作;在80386系统中可将一个32位数放在一个通用寄存器EAX中,不需要DX,用一次减法就能完成。假设计算结果存放在以A为起始地址的存储单元中。下列宏定义中X代表Ax或EAX,Y代表DX或EDX。