g2317高铁时刻表查询:这个汇编程序应该怎么修改啊?请教高人

来源:百度文库 编辑:高考问答 时间:2024/04/27 10:38:27
这个汇编程序是将一个有20个数据的数组M,若大于0则放入P中并显示,反之则放入M中并显示
我的程序是这样的:
data segment
m db -1,-2,-3,0,-4,-6,4,6,7,-5,9,0,-3,-8,6,5,4,9,-7,0
n db 10
db 0
db 10 dup(?)
p db 10
db 0
db 10 dup(?)
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov cl,0
loop1:
mov al,m
cmp al,0
jge branch1
inc m
mov n,al
lea si,n
cmp cl,20
jnz loop1
jmp exit1
branch1:
mov p,al
lea di,p
exit1:
lea dx,si
mov ah,9
int 21h
xor dx,dx
lea dx,di
mov ah,9
int 21h
mian endp
code ends
end start

麻烦哪位高人指点下
我错在哪
应该怎么修改
data segment
m db -1,-2,-3,0,-4,-6,4,6,7,-5,9,0,-3,-8,6,5,4,9,-7,0
n db 20 dup(?), 负数数组
p db 20 dup(?),正数数组
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov cl,0 ,循环判断M中传来的数据是否大于或者等于0
loop1:
mov al,m
cmp al,0
jge branch1
inc m ,M指向下一个数据
mov n,al ,将负数送入N
lea si,n ,将N送给一个寄存器
cmp cl,20
jnz loop1
jmp exit1
branch1:
mov p,al ,将正数送入P
lea di,p ,将P送给另一个寄存器
exit1:
lea dx,si ,调用9号功能显示负数
mov ah,9
int 21h
xor dx,dx ,将DX清零
lea dx,di ,调用9号功能显示正数
mov ah,9
int 21h
mian endp
code ends
end start

你得把你的程序注释一下啊!
比如这一段
p db 10
db 0
db 10 dup(?)
是干什么用的啊?为什么这一段不定义成二十个字节,因为有可能你的那二十个数全为正数,前面的两个数10和0也不知道你是什么意思,不好向下看!

data segment
m db -1,-2,-3,0,-4,-6,4,6,7,-5,9,0,-3,-8,6,5,4,9,-7,0
n db 20 dup(?);负数数组
p db 20 dup(?);正数数组
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov cl,20;循环判断M中传来的数据是否大于或者等于0
lea bx,m
lea si,n
lea di,p
again:
mov al,[bx]
cmp al,0
jg branch1
jl branch2
jmp exit
branch2:
mov [si],al ;将负数送入N
inc si
jmp exit
branch1:
mov [di],al ;将正数送入P
inc di
exit:
inc bx
loop again
;mov dx,[si];调用9号功能显示负数
;mov ah,9
;int 21h
;mov dx,[di] ;调用9号功能显示正数
mov ah,4ch
int 21h
main endp
code ends
end start
09号功能只能显示ASCII码吧?好像是,我也是初学者,哥们!呵呵
我只是把他们分别放到了N和P中
至于显示我也不会!
不过你的寻址方式很特别啊!我全改了,以前没有用过,得好想想,跟你学学!呵呵

我学C的 帮不了你 路过!