|
主题 : : 第三章检测题中的一小题的疑问:mov ah,0 是清空还是ah置0呢? [待解决] |
回复[ 8次 ]
点击[ 523次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-11-30 16:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-11-24 15:24 |
能够只将al中的内容压入栈的指令序列是__3___。
1、 push al
2、 pop ax
3、 mov ah,0
push ax
4、 mov ax,0
push
答案选择3,指令mov ah,0的意思是将寄存器ah置0还是清空呢?
如果是置0,那么执行压栈操作,0肯定会入栈,就不单纯把al压栈了
如果是清空,那么3正确,如果是这样的话mov ax,0到底是传送0到ax中还是将ax清空呢?
实验mov ax,0 push ax 发现是将ax中得0压栈了,说明mov ax,0是传送指令,并没有将ax清空
实验又发现mov ah,0 push ax 发现确实是只把al压栈,那说明mov ah,0 是将ah清空
这个很难理解??????、 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-11-30 18:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
置零和清空是一个意思。题目是将al中的内容入栈,至于ah是否改变,这个可以不管,高8位补零al值的大小是没有变的。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-12-26 09:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2011-12-25 10:18 |
ah和al是两个分别独立的寄存器,清空的意思不是说一点数据都不存在,计算机只要运行起来,不管何时,寄存器都有数据存在,所以正如楼上所说,置零和清空是一个意思。对于这道题来讲,因为push只能压入2字节数据,只能使用16位寄存器,所以此题意思是如何将ah中的数据抹掉,只保存al中的数据不变。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2012-03-07 19:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-09-24 17:31 |
啊,原来我唯一错的题是这一道,理解这道题的思路了。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2012-03-07 19:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-09-24 17:31 |
我对这个答案的理解是,既然题目要求只将al的内容push入栈;又因为push操作的是字,直接push al是不行的,我们就用ax来存al的内容;如果ah中有内容而不进行清空操作,那么入栈的结果就会是ax入栈;所以将ah清空,入栈的才只是是al的内容。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2012-06-23 23:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-06-23 18:43 |
其实我觉得不将ah置零也无所谓,直接push ax就行啦。
因为一般来说我们进行入栈操作,都是为了保护现场,以便恢复。因为下面的某些代码可能修改al的值。。。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2012-10-25 19:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-10-16 16:56 |
|
|
|
|
|
[第7楼]
[ 回复时间:2013-01-01 19:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-01-01 17:35 |
这题出得毫无意义嘛,你就直接PUSH AX,将来POP AX,这样AL的值还是原来的值嘛,跟AH没有关系的嘛。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2013-01-01 19:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-01-01 17:35 |
其实就是排除1、2、4,所以是3,但3里的mov ah,0完全是故意绕人眼的,这句本来可以没有。 | | |