问答题 请编写一个既适合于8086/8088又适合于80386的宏,该宏求存放在DX:AX中的32位数的补码。
【正确答案】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。