主题:帮忙修改一下程序,不胜感激!
题目:设在附加段中有一个首地址为series的正数字数组。改数组已按升序排列,数组元素的个数存放在数组的第一个字中。求在数组中查找整数3,如果找到该数,则把3从数组中删除,若找不到则把3插到正确的位置,并且始终保持数组中的一个元素真实地反应数组中元素地个数。
教材中的源程序如下:
estraseg segment
series dw 10,0,1,2,3,4,5,6,7,8,9
x dw ?
estraseg ends
stackseg segment stack
dw 100 dup (?)
stackseg ends
codeseg segment
main proc far
assume cs:codeseg,es:estraseg,ds:estraseg,ss:stackseg
start:
push ds
sub ax,ax
push ax
push ds
mov ax,estraseg
mov es,ax
lea di,series
mov si,di
mov dx,di
mov ax,3
mov cx,[di]
mov x, cx
add di,2
cld
repne scasw
je delete
mov [si],0ffffh
add si,type series * x
comp: cmp [si],ax
jg next_inser
mov [si+2],ax
jmp exit_inser
next_inser: mov bx,[si]
mov [si+2],bx
sub si,2
jmp comp
exit_inser: inc dx
jmp exit
delete: jcxz next_del
loop1: mov bx,[di]
mov [di-2],bx
add di,2
loop loop1
next_del: dec dx
exit: pop ds
pop ax
mov ah,4ch
int 21h
main endp
codeseg ends
end start
但是,经过汇编后提示有错,但我不知道该如何修改,望多多指教
还有一个:ASCⅡ代码表的生成,教材中的程序汇编后也有错
源程序:
asc macro
add bl,bl
add bl,bl
add bl,bl
add bl,bl
end m
dseg segment
message1 db'0 1 2 3 4 5 6 7 8 9 a b c d e f $'
message2 db 13,10,'$'
message3 db ' $'
dseg ends
cseg segment
assume cs:cseg,ds:dseg
main proc far
start: mov ax,dseg
mov ds,ax
xor bx,bx
xor cx,cx
lea dx,message1
mov ah,9
int 21h
re_col: lea dx,message2
mov ah,9
int 21h
mov bl,cl
asc
mov bh,bl
add bh,10h
mov dl,cl
add dl,30h
mov ah,2
int 21h
re_line: lea dx,message3
mov ah,9
int 21h
mov dl,20h
cmp bl,dl
jna display
mov dl,bl
display: mov ah,2
int 21h
inc bl
cmp bl,bh
jb re_line
inc cl
cmp cl,8
jb re_col
mov ah,4ch
int 21h
main endp
cseg ends
end start
如果修改,劳驾用其它颜色标注一下,谢谢!
教材中的源程序如下:
estraseg segment
series dw 10,0,1,2,3,4,5,6,7,8,9
x dw ?
estraseg ends
stackseg segment stack
dw 100 dup (?)
stackseg ends
codeseg segment
main proc far
assume cs:codeseg,es:estraseg,ds:estraseg,ss:stackseg
start:
push ds
sub ax,ax
push ax
push ds
mov ax,estraseg
mov es,ax
lea di,series
mov si,di
mov dx,di
mov ax,3
mov cx,[di]
mov x, cx
add di,2
cld
repne scasw
je delete
mov [si],0ffffh
add si,type series * x
comp: cmp [si],ax
jg next_inser
mov [si+2],ax
jmp exit_inser
next_inser: mov bx,[si]
mov [si+2],bx
sub si,2
jmp comp
exit_inser: inc dx
jmp exit
delete: jcxz next_del
loop1: mov bx,[di]
mov [di-2],bx
add di,2
loop loop1
next_del: dec dx
exit: pop ds
pop ax
mov ah,4ch
int 21h
main endp
codeseg ends
end start
但是,经过汇编后提示有错,但我不知道该如何修改,望多多指教
还有一个:ASCⅡ代码表的生成,教材中的程序汇编后也有错
源程序:
asc macro
add bl,bl
add bl,bl
add bl,bl
add bl,bl
end m
dseg segment
message1 db'0 1 2 3 4 5 6 7 8 9 a b c d e f $'
message2 db 13,10,'$'
message3 db ' $'
dseg ends
cseg segment
assume cs:cseg,ds:dseg
main proc far
start: mov ax,dseg
mov ds,ax
xor bx,bx
xor cx,cx
lea dx,message1
mov ah,9
int 21h
re_col: lea dx,message2
mov ah,9
int 21h
mov bl,cl
asc
mov bh,bl
add bh,10h
mov dl,cl
add dl,30h
mov ah,2
int 21h
re_line: lea dx,message3
mov ah,9
int 21h
mov dl,20h
cmp bl,dl
jna display
mov dl,bl
display: mov ah,2
int 21h
inc bl
cmp bl,bh
jb re_line
inc cl
cmp cl,8
jb re_col
mov ah,4ch
int 21h
main endp
cseg ends
end start
如果修改,劳驾用其它颜色标注一下,谢谢!