当前位置: 代码迷 >> 汇编语言 >> int 21h处程序不能继续?该如何解决
  详细解决方案

int 21h处程序不能继续?该如何解决

热度:136   发布时间:2013-02-26 00:00:00.0
int 21h处程序不能继续?
我debug这个程序时在画星号处即int21h处程序不能继续运行为什么啊?
data   segment  
new1   db   'newsa ',13,10, '$ '
new2   db   'newsb ',13,10, '$ '
new3   db   'newsc ',13,10, '$ '
new4   db   'newsd ',13,10, '$ '
new5   db   'newse ',13,10, '$ '
new6   db   'newsf ',13,10, '$ '
new7   db   'newsg ',13,10, '$ '
new8   db   'newsh ',13,10, '$ '
new9   db   'newsi ',13,10, '$ '
new10   db   'newsj ',13,10, '$ '
news   dw   new1,new2,new3,new4,new5,new6,new7,new8,new9,new10
data   ends
code   segment
assume   cs:code,ds:data
start:
mov   ax,data
mov   ds,ax
mov   cx,10
mov   bx,news
display:
mov   ah,9
lea   dx,new1
****** int   21h**********
jmp   judge
judge:
add   [bx],2
dec   cx
cmp   cx,0
jnz   display
jz   exit
exit:
int   21h
mov   ah,4ch
code   ends
end   start



------解决方案--------------------------------------------------------
你这个逻辑有问题
display:
mov ax,0
mov bx,ax
mov ah,9
lea dx,news[bx]
这里bx永等于零,
稍微改一下,但是只能输出第一个,因为你这个逻辑我也不太明白。
mov ax,0
mov bx,ax
mov ah,9h
mov dx,news[bx]
------解决方案--------------------------------------------------------
....
mov cx,10
mov bx, offset news ;* bx 应该是执行 news 地址数组的指针
display:
mov ah,9
mov dx, [bx] ;* 获取当前待显示的字符串地址 lea dx,new1
int 21h ; ******int 21h**********
jmp judge
judge:
add bx,2 ;* 指向下一个字符串地址
dec cx
cmp cx,0
jnz display
jz exit
exit:
mov ah,4ch ;* 这两个指令顺序不能反了
int 21h ;*
....
  相关解决方案