-130- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
-t 逻辑"AND"操作的结果 | |||||||||||||||||||||
AX=0001 | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=13CD | ES=13CD | SS=13CD | CS=13CD | IP=010D | NV UP EI PL NZ NA PO NC | ||||||||||||||||
13CD:010D | D1C8 | ROR AX,1 准备进行移位操作 | 符号标志再次清0 | ||||||||||||||||||
最后是利用移位指令改变符号位时标志寄存器的变化,可以看到移位指令"ROR"没有改变SF标志。 | |||||||||||||||||||||
-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=010F | NV UP EI PL NZ NA PO NC | ||||||||||||||||
13CD:010F | B208 | MOV DL,08 | 符号标志无变化 | ||||||||||||||||||
从上面的跟踪结果我们可以看到数学运算和逻辑操作结果的符号位如果有变化,则SF标志随之改变。但是用数据传递指令和移位指令改变符号位后SF标志无变化(注意上面程序中指令MOV和ROR执行后的SF标志)。为保险起见,我们专门验证一下各类移位指令对SF的影响: | |||||||||||||||||||||
C:\ASM\>DEBUG [Enter] -a100[Enter] 13CD:0100 mov ax,7fff 13CD:0103 shl ax,1 13CD:0105 shr ax,1 13CD:0107 mov ax,4000 13CD:010A rol ax,1 13CD:010C[Enter] |
;AX寄存器送入7FFFH ;逻辑左移 ;逻辑右移 ;AX寄存器送入4000H ;循环左移 |
||||||||||||||||||||
-t AX寄存器送入7FFFH | |||||||||||||||||||||
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=0103 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
13CD:0103 | D1E0 | SHL AX,1 准备进行逻辑左移 | 注意SF标志为0 | ||||||||||||||||||
以下是逻辑左移指令的跟踪结果,可以看到符号标志位发生改变。 | |||||||||||||||||||||
-t 逻辑左移的结果 | |||||||||||||||||||||
AX=FFFE | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=13CD | ES=13CD | SS=13CD | CS=13CD | IP=0105 | NV UP EI NG NZ NA PO NC | ||||||||||||||||
13CD:0105 | D1E8 | SHR AX,1 | SF标志置1 | ||||||||||||||||||
逻辑右移指令同样影响SF标志,这可以通过下面的跟踪结果看出。由此我们可以认为逻辑 | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |