improper operand type 和phase error between passes错误,求大神啊!

蛋壳池 2013-06-10 09:20:50
;将两个递增有序数组归并成一个数组
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错误这两个错误,有谁知道是哪里出错吗?谢谢!
...全文
425 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
蛋壳池 2013-06-10
  • 打赏
  • 举报
回复
谢谢啊!!!!!!!!感激涕零!!!!!!!
ad6673706 2013-06-10
  • 打赏
  • 举报
回复
调试了一下能通过了。 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:",'$' string2 db 0dh,0ah,"when finished,the C arrays number's are:",'$' data ends code segment assume cs:code,ds:data main proc far start: push ds sub ax,ax push ax mov ax,data mov ds,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: mov ax,B[di] ;存B mov C1[bx],ax add bx,2 add di,2 ;如果是B数组中的数字存进C单元,则B数组继续下一次寻找 jmp loop1 set2: ;存A mov C1[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 ax,A[si] mov C1[bx],ax ret lea dx,string2 mov ah,9 int 21h main endp code ends end start

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧