监测点11.4,求高手详细解读,先谢了
各种不懂呀,pop ax后(ax)=00001011? 本帖最后由 莫名其妙 于 2012-3-12 08:30 编辑首先 标志寄存器是个16位的数据 ax 是个16位寄存器 这个你要知道
ax =0 push ax 这时候寄存器那保存的 ax 的值 和 栈中的值都是 0000
然后popf 注意这个是将栈中数据按位保存进标志寄存器(flag) 其实就是给标志寄存器所有的值都置0
然后 mov ax 0fff0h赋值语句
add ax 0010h 加法 将结果存进ax中 关键在这里 这里因为加法产生了进位所以进位标志位CF变为1刚才因为给 标记寄存器全都置0了所以现在CF为1了标志寄存器这个16位数据你把它当作16为数据来看的话他的值也就改变了不再是0000了
( 具体是多少呢 自己按照本章开始的表格找找CF在哪一位上其他各标志位的值是多少然后用2进制转换成16进制看看!!)
pushf 将改变后的标志寄存器进栈
pop ax 将栈中数据 出栈保存在ax中
and al, ***** 只看al的值 将 al 的高八位用0代替
andah,******* 只看ah的值 将 ah 的低八位用0代替
这两句就不说了把高八位 低八位拆开 然后按位进行与运算1and1 =1 0and0=0 1and0=0 0and1=0
然后合并 得出 ax
这个程序要在debug中验证,pop ax这条指令执行后,从栈中取出的数据是标志寄存器的值 本帖最后由 格式天下 于 2012-3-11 19:26 编辑
莫名其妙 发表于 2012-3-10 19:58 static/image/common/back.gif
首先 标志寄存器是个16位的数据 ax 是个16位寄存器 这个你要知道
我先前没搞懂这个,现在明白了,谢谢啊
页:
[1]