;将两个递增有序数组归并成一个数组
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:",'$'