欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

improper operand type 和phase error between passes异常,求大神啊

更新时间: 2014-01-05 03:17:47 责任编辑: Author_N1

 

improper operand type 和phase error between passes错误,求大神啊!
;将两个递增有序数组归并成一个数组
data segment
A dw 1,3,5,7,9
B dw 0,2,4,6,8
C dw 20 dup(?)
string1 db 'the A array's numbers are:','$',0dh,0ah,'the B array's numbers are:','$'
string2 db 0dh,0ah,'when finished,the C array's numbers are:','$'
data ends

code segment
assume cs:code,ds:data
main proc far
start:
push ds
sub ax,ax
push ax

mov dx,offset string1
mov ah,9
int 21h               ;输出A,B数组都有些什么数据

mov ax,data
mov ds,ax             ;源数据用ds
mov es,ax
cld                   ;从左往右开始比较  
lea di,B              ;把B数组的偏移地址放到目的寄存器di中
mov bx,0   ;初始化C单元
mov cx,10   ;比较次数
mov si,0              ;从A单元的第一个元素开始
next:
push di
push cx               ;保护di,cx

mov ax,A[si]
cmp B[di],ax
jl set1   ;若B[si]<ax
jnl set2   ;若B[si]>=ax
jmp loop1
set1:                     ;存B
mov C[bx],B[di]
add bx,2
add di,2              ;如果是B数组中的数字存进C单元,则B数组继续下一次寻找
jmp loop1
set2:                     ;存A
mov C[bx],ax     
add si,2     
add bx,2
jmp loop1
loop1:
pop cx
pop di
loop next
end_m:                    ;因为是用B与A比较,所以如果最后A有剩余,则直接补到C单元后面
cmp A[si],0
jne conect
conect:
mov C[bx],A[si]
ret

mov dx,string2
mov ah,9
int 21h
main endp
code ends

end start



上面的程序编译不成功,不知道是哪里出错了,首次学汇编,很多不懂的。红色部分就是出错的地方,无外呼就是improper operand type 和phase error between passes错误这两个错误,有谁知道是哪里出错吗?谢谢!
--参考方法--
调试了一下能通过了。
data segment
A dw 1,3,5,7,9
B dw 0,2,4,6,8
C1 dw 20 dup(?)
string1 db "the A arrays number's are:",'$',0dh,0ah,"the B arrays number's are:",'$'
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:47
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20515/
本文WWW.DOC100.NET DOC100.NET版权所有。