- Assembly code
in_cycle: add cx,01h cmp cx,1000 ; jne in_cycle ;zf=0转到标号处执行, push dx mov ah,06h ;从键盘输入字符,al等于字符 mov dl,0ffh int 21h pop dx jz pass cmp al,1bh ;如果键入ESC,则返回主菜单 je to_start1 cmp al," " ;如果键入SPACE,则游戏暂停 je pause cmp al,[di] ;输入字母正确!则字母消失 je disappear
在jz pass那里应该是直接跳转到pass的标号里,而不应该执行后面的程序,可程序确是在执行后面的程序,这样我的疑问是谁改变了zf的值??实在是想不通,难道是中断?
------解决方案--------------------------------------------------------
会影响:
、中断指令INT
中断指令INT的一般格式如下:
INT Imm
其中:立即数Imm是一个0~0FFH范围内的整数。
指令执行的步骤:
◆、把标志寄存器压栈,清除标志位IF和TF;
◆、把代码段寄存器CS的内容压栈,并把中断服务程序入口地址的高字部分送CS;
◆、32位段,压32位IP。