data segment
buf1 db "y=1$ "
buf2 db "y=0$ "
buf3 db "y=-1$ "
block db 5,-4,0,3,100,-51
data ends
code segment
assume cs:code,ds:data
mov ax,data
mov ds,ax
xor ax,ax
mov cx,6
mov al,[block]
L1:
cmp al,0
inc al
jge next1
mov dx,offset buf3
mov ah,9
int 21h
dec cx
loop L1
next1:je next2
mov dx,offset buf1
mov ah,9
int 21h
dec cx
loop L1
next2:
mov dx,offset buf2
mov ah,9
int 21h
dec cx
loop L1
done:
mov ah,4ch
int 21h
code ends
end
这是我的代码
------解决方案--------------------------------------------------------
data segment
buf1 db "y=1$ "
buf2 db "y=0$ "
buf3 db "y=-1$ "
block db 5,-4,0,3,100,-51
data ends
code segment
assume cs:code,ds:data
main: mov ax,data
mov ds,ax
xor bx,bx
mov cx,6
L1: mov al,block[bx]
cmp al,0
;inc al
jge next1
mov dx,offset buf3
mov ah,9
int 21h
;dec cx
jmp short ss2 ;为什么要强制跳转?因为程序是顺序执行的。
;如果不跳转,那是负数时还会执行next1的指令
next1:
je next2 ;如果等于0则跳至标号next2处
mov dx,offset buf1
mov ah,9
int 21h
;dec cx
jmp short ss2 ;类似于上一条jmp short ss2指令
next2:
mov dx,offset buf2
mov ah,9
int 21h
;dec cx
ss2: inc bx ;为引用下一个数据做准备
loop L1 ;执行完一次loop指令,cx自动减一,无须手动去减
;建议把概念先弄清楚
mov ah,4ch
int 21h
code ends
end main ;main指明程序起始位置