请帮我看看我的程序错在那里(我是菜鸟)

来源:百度知道 编辑:UC知道 时间:2024/05/26 02:48:43
1. 已知当前数据段中DATA1和DATA2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1;否则显示0。
以下是我的程序:
data segment
data1 dw 4628h
data2 dw 4668h
data ends
;----------------------------------
cmpprogram segment
;----------------------------------
assume cs:cmpprogram,ds:data
start:
mov ax,data
mov ds,ax
mov bx,data1
mov cx,data2
sub bx,cx
jz equal
nequal: sub dl,dl
mov dl,30
mov ah,5ch
mov ah,02
int 21
int 20
equal: sub dl,dl
mov dl,31
mov ah,5ch
mov ah,02
int 21
int 20
cmpprogram ends
end start

好像是缺少返回DOS的语句.PUSH DS

data segment
data1 db 12,15,20,9,33,14,36,32
data2 db 12,16,20,14,33,14,36,22
data ends

code segment
assume cs:code,ds:data
main: mov ax,data
mov ds,ax

xor bx,bx
mov cx,offset data2 ;因为是字节类型,可直接获取data1中的数字个数
lp: mov ah,data1[bx]
cmp ah,data2[bx]
jz print1 ;相等则打印1
mov dl,'0' ;否则打印0
mov ah,2
int 21h
jmp next
print1: mov dl,'1'
mov ah,2
int 21h
next: inc bx
loop lp

call pause ;程序退出前先暂停以看显示效果

mov ah,4ch
int 21h

pause proc near ;子程序定义(起退出缓冲作用)
jmp short exitbegin
exitstr db 0ah,0dh,'Press any key to exit...$'
exitbegin:
push ax
push ds
push dx
;以上3条push指令的作用是保存现场
mov ax,seg pause ;取子程序名pause所在的段地址
mov ds,ax
lea dx,exitstr
mov ah,9 ;显示字符串exitstr的内容
int 21h
mov ah,7 ;等待输入一个[无回显]字符
int 21h
pop dx
pop ds