![]() | 第6章 文字输出与键盘输入 | -131- | |||||||||||||||||||
移位指令是可以影响SF标志的。 | |||||||||||||||||||||
-t 逻辑右移的结果 | |||||||||||||||||||||
AX=7FFF | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=13CD | ES=13CD | SS=13CD | CS=13CD | IP=0107 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
13CD:0107 | B80040 | MOV AX,4000 | SF标志清0 | ||||||||||||||||||
循环右移指令"ROR"并不影响SF标志,看来"ROL"指令也不会影响SF,请看下面的跟踪结果: | |||||||||||||||||||||
-t 累加器送入4000H | |||||||||||||||||||||
AX=4000 | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=13CD | ES=13CD | SS=13CD | CS=13CD | IP=010A | NV UP EI NG NZ NA PO NC | ||||||||||||||||
13CD:010A | D1C0 | ROL AX,1 循环左移指令 | SF标志清0 | ||||||||||||||||||
-t 移位后的结果 | |||||||||||||||||||||
AX=8000 | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=13CD | ES=13CD | SS=13CD | CS=13CD | IP=010C | NV UP EI PL NZ NA PO NC | ||||||||||||||||
13CD:010C | 745B | JZ 0169 | SF标志未改变 | ||||||||||||||||||
结果还真有些戏剧色彩,可以看到"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 |