|
主题 : : 书P65 [待解决] |
回复[ 7次 ]
点击[ 338次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-03-25 12:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-06 23:08 |
请问:
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,001AH
mov bx,001BH
PUSH ax
PUSH bx
sub ax,ax ;书上解释为,将AX清零,也可以用mov ax,0,sub ax,ax的机器码为2个字节, mov ax,0 的机器码为 3个字节。
sub bx,bx
pop bx ;书上解释为,从栈中回复AX,BX 原来的数据,当前站顶的内容是
pop ax ;BX中原来的内容:001BH,AX中原来的内容001AH在栈顶的下面,所以要先POP BX,然后再POP AX。
------------------------------------------------------------------
1.请问机器码为2字节。是AX与AX存储器的吗? 3字节是哪里的3个字节?
2.已经将AX的数据清零了,下面用POP指令还能恢复存储器原来的数据吗?
谢谢各位。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-03-25 14:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23 |
1.请问机器码为2字节。是AX与AX存储器的吗? 3字节是哪里的3个字节?
================
每条指令都对应自己机器码,这样的对应不能按照源代码中的指令的操作数据直接对照的。这里我觉得没有必要去深究某条指令的字节是怎么形成的,对于立即数我们可以在字节中看到那个数据,但是对于不同的寄存器,机器码的变化会让人很难记忆的。
2.已经将AX的数据清零了,下面用POP指令还能恢复存储器原来的数据吗?
==============
能啊。AX寄存器清零了,pop是将此时栈中的数据存放到ax中,那么ax就又有数据了。就像我们把杯子中的水倒掉,然后再从壶里向杯子里倒点水,那么杯子里又有水了。能不能恢复ax原来的数据,就得看我们pop的数据是不是当初push进来的ax值。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-03-25 14:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23 |
楼主需要在看一下栈的知识,一定要理解透彻。
加油。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-03-25 21:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-06 23:08 |
回复:[第2楼]
------------------
哦。原来是这样。我明白了。谢谢younggay | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-03-26 13:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-06 23:08 |
回复:[第1楼]
------------------
书上的图中。AX BX就是在栈空间中啊。。清空之后不就没有了吗? | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-09-15 19:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-09-15 01:11 |
|
|
|
|
|
[第6楼]
[ 回复时间:2009-09-19 23:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-08-30 20:59 |
|
|
|
|
|
[第7楼]
[ 回复时间:2009-09-28 14:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-08-22 20:30 |
bluebird: 对于汇编语言与机器语言的对应问题,是更高层次的东西,不必深究。
它们不是一一对应,对号入座的。例如MOV AX,0 教科书上是3个字节,如B8XXXX ,那么是B8对应 MOV吗?
不是这样,了解到这一点就行。 | | |