首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-21 
编写一个程序,将一给定的数组中的数按正数和负数分别存入不同的数组中这是代码:Assembly codedata segment

编写一个程序,将一给定的数组中的数按正数和负数分别存入不同的数组中
这是代码:

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] 不对,不能直接内存到内存的操作,借助个寄存器中转一下。
[解决办法]
检查操作数类型,注意循环流程和算法,注意判断“负数”的方法。

热点排行