目录 上一页 下一页 下一章

第6章 文字输出与键盘输入 -131-

移位指令是可以影响SF标志的。
-t     逻辑右移的结果
AX=7FFFBX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=0107 NV UP EI PL NZ NA PO NC
13CD:0107B80040MOV AX,4000SF标志清0
  循环右移指令"ROR"并不影响SF标志,看来"ROL"指令也不会影响SF,请看下面的跟踪结果:
-t     累加器送入4000H
AX=4000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=010A NV UP EI NG NZ NA PO NC
13CD:010AD1C0ROL AX,1    循环左移指令SF标志清0
-t     移位后的结果
AX=8000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=010C NV UP EI PL NZ NA PO NC
13CD:010C745BJZ 0169SF标志未改变
  结果还真有些戏剧色彩,可以看到"ROL/ROR"指令对SF标志确实无影响,而"SHL/SHR"则能影响SF标志。看来不做调查研究就下结论是很不可取的。
  讨论了有关SF标志的一些问题,现在我们还是回到演示程序上来。由于这个程序令终止线位置不变,而光标起始线由0FH向00H不断减小,所以当CH寄存器减至-1时程序就应该结束,所以我们使用指令JNS来判断CH寄存器减量的情况,这可以使我们不必设计单独的循环。当然使用JNZ指令也可以,只是看不到光标起始线为0时的情况。
  现在我们来考虑这样两个问题:
  (1)如果终止线的位置恰好在00H处会有什么现象?
  (2)如果终止线不在第15线会有什么现象?
C:\ASM\>DEBUG[Enter]
-a100[Enter]
09DF:0100 mov ah,1
09DF:0102 mov ch,0
09DF:0104 mov cl,0
09DF:0106 int 10
09DF:0108 mov ah,1
09DF:010A mov ch,1
09DF:010C mov cl,0
09DF:010E int 10
09DF:0110[Enter]


;选择10H中断的1号功能
;设置光标起始线为0
;设置光标终止线也为0
;改变光标类型
;选择10H中断的1号功能
;设置光标起始线为1
;设置光标终止线为0
;改变光标类型


Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章