当前位置: 代码迷 >> 汇编语言 >> 编写一个程序,将一给定的数组中的数按正数和负数分别存入不同的数组中,该如何解决
  详细解决方案

编写一个程序,将一给定的数组中的数按正数和负数分别存入不同的数组中,该如何解决

热度:3052   发布时间:2013-02-26 00:00:00.0
编写一个程序,将一给定的数组中的数按正数和负数分别存入不同的数组中
这是代码:
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] 不对,不能直接内存到内存的操作,借助个寄存器中转一下。
------解决方案--------------------------------------------------------
检查操作数类型,注意循环流程和算法,注意判断“负数”的方法。
  相关解决方案