|
主题 : : 实验任务2 [待解决] |
回复[ 10次 ]
点击[ 1033次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-04-05 15:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
实验任务2
(1)
使用debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
Mov ax,ffff
Mov ds,ax
;段地址=ffffh
Mov ax,2000 ;
Mov ss,ax
; SS(栈的基础地址):2000h
Mov sp,0100 ;初始化栈顶;SS:SP=2000h:0100;从0101内存存储单元处开始写入数据
Mov ax,[0] ; ax=2200h
Add ax,[2] ; ax=5beah ;ax寄存器的最终结果
Mov bx,[4] ;bx=0000h
Add bx,[6] ;bx=30f0h ;bx寄存器的最终结果
Push ax
;sp=0100h
修改内存单元的地址是2200:0101内容为 2200
Push bx ;sp=00feh
修改内存单元的地址是 ????:??? 内容为 ????
Pop ax ;sp=00fch
Pop bx ;sp=00feh
Push [4] ;sp=0100h
修改内存单元的地址是????:????内容为 ????
Push [6] ;sp=00feh
修改内存单元的地址是????:????内容为
????
红色的我认为错了,帮我确认一下。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-04-05 16:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2010-03-20 10:35 |
|
|
|
|
|
[第2楼]
[ 回复时间:2010-04-05 17:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03 |
哦 这个不分颜色的。
修改内存单元的地址是2200:0101内容为 2200 这个是对的么? | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-22 13:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:12
信誉值:0
注册日期:2010-04-20 22:33 |
|
|
|
|
|
[第4楼]
[ 回复时间:2010-06-14 15:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-07-16 14:51 |
''Mov sp,0100 ;初始化栈顶;SS:SP=2000h:0100;从0101内存存储单元处开始写入数据''
我认为应该是从ss:sp=2000:00fe开始写入数据,栈储存数据时向内部填充 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-08-20 09:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-18 00:32 |
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=58EAH
add ax,[2] ;ax=5CCAH
mov bx,[4] ;bx=30F0H
add bx,[6] ;bx=6024H
push ax ;sp=00FEH;修改的内存单元的地址是220FE内容为5CCAH
push bx ;sp=00FCH;修改的内存单元的地址是220FC内容为6024H
pop ax ;sp=00FEH;ax=6024H
pop bx ;sp=0100H;bx=5CCAH
push 【4】 ;sp=00FEH;修改的内存单元的地址是220FE内容为30F0
push 【6】 ;sp=00FCH;修改的内存单元的地址是220FC内容为2F34
这是我的答案、就是把这些指令写入debug、然后执行看窗口里抄下来的
不知道对不对 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-08-20 10:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-18 00:32 |
照抄都抄错了、-_-
更改一下(没错的就不抄了):
……
mov ax,[0] ;ax=5BEAH
……
mov bx,[4] ;bx=31F0H
add bx,[6] ;bx=6122H
……
pop ax ;sp=00FCH;ax=6122H
pop bx ;sp=00FEH;bx=5CCAH
push [4] ;……内容为31F0H
push [6] ;……内容为2F32H | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-08-25 16:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-08-19 19:51 |
我在WIN7下实验结果是这样的:
mov ax,[0] ;ax=5bea
add,ax,[2] ;ax=5cca
mov bx,[4] ;bx=30f0
add bx,[6] ;bx=6029
push ax ;sp=00fe 2200:00fe 5cca
push bx ;sp=00fc 2200:00fc 6029
pop ax ;sp=00fe ax=6029
pop bx ;sp=0100 bx=5cca
push [4];sp=00fe 2200:00fe 30f0
push [6];sp=00fc 2200:00fc 2f39 | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-03-19 14:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-17 20:16 |
该题目执行的代码和内存中的东西冲突的,比如说mov bx [4] ,这个数值每个电脑都是不同的,所以该题没有标准答案的,Bx都不会一样,但是肯定的是ax是一定相同的,不管在哪天电脑上都一样。 | | |
|
|
|
|
[第9楼]
[ 回复时间:2012-08-03 23:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-07-14 11:16 |
回复:[第5楼]
------------------
push bx到pop ax···SP是不变的吧?
push是执行sp-2再写·而pop是先读再执行sp+2 | | |
|
|
|
|
[第10楼]
[ 回复时间:2012-10-25 19:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-10-16 16:56 |
PUSH 和 POP 都是对16位的字单元操作的,所以SP增减都是2的倍数,SP置为0100H后,PUSH改变的是(0100-2)单元里的值 | | |