这是代码:
- Assembly code
data segment num db 1,-5,3,-7,9,8 num_z db ?;正数数组 num_f db ?;负数数组data endsstack1 segment para stackdw 20h dup(0)stack1 ends code segment assume cs:code,ds:data,ss:stack1start: mov ax,data mov ds,ax mov cx,6 ;循环判断六次。 mov si,0 xun: cmp cx,1 jz cends cmp num[si],0 js flag1 ;结果为负数时的转移。 jns flag2 ;结果为正数的转移。 dec cx ;cx减一 flag1: mov num_f[di],num[si] ;将数据放入负数数组。 neg si ;si向后挪一位。 neg di jmp xun ;返回判断。 flag2: mov num_z[di],num[si] ;将数据放入正数数组。 neg si ;si向后挪一位。 neg di jmp xun ;返回判断。 cends: mov ah,4ch int 21h code ends end start
Object filename [out.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
out.ASM(24): error A2052: Improper operand type
out.ASM(28): error A2006: Phase error between passes
out.ASM(29): error A2052: Improper operand type
out.ASM(33): error A2006: Phase error between passes
50136 + 449832 Bytes symbol space free
0 Warning Errors
4 Severe Errors
为什么会出现这种错误啊。
------解决方案--------------------------------------------------------
mov num_f[di],num[si] 和 mov num_z[di],num[si] 不对,不能直接内存到内存的操作,借助个寄存器中转一下。
------解决方案--------------------------------------------------------
检查操作数类型,注意循环流程和算法,注意判断“负数”的方法。