(1) 使用Debug将上面的程序段写入内存,逐条执行,根据指令执行后的实际情况填空。
mov ax,ffff
mov ds,ax
mov ax,2000
mov ss,ax
mov sp,0100
mov ax[0] ;ax=5BEAH
add ax,[2] ;ax=5CCAH
mov bx,[4] ;bx=30F0H
add bx,[6] ;bx=6029H
push ax ;sp=00FE 修改的内存单元的地址是2200:00FE 内容为5CCAH.
push bx ;sp=00FC 修改的内存单元的地址是2200:00FC 内容为6029H.
pop ax ;sp=00FE ax=6029H.
pop bx ;sp=0100 ax=5CCAH.
push [4] ;sp=00FE 修改的内存单元的地址是2200:00FE 内容为30F0H.
push [6] ;sp=00FC 修改的内存单元的地址是2200:00FC 内容为2F39H.
这里我想,是让我们现再次认清cs:ip;ds:ip,ss:sp几个地址中数据,指令,栈的区别。
(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:F中的内容为什么会发生改变?
根据观察发现这个地址区间改变的数据正好是CS,IP,DS,SP寄存器中的值,我在想这里是不是像前面所提到的,mov ss,ax,mov sp,10 g 一样在debug中看不到mov sp,10的执行,这里一样有一个语句已经在后面执行了。不是很明白。
- [chinatree] 对于双重循环取决于LOOP的位置?怎么说呢? 09/29 15:27
- [rotapple] 哦。是edit啊。晕。我以为这个UI界面是你写出来的。 08/25 18:32
- [rotapple] 这是什么书来的?第四章有这东西吗? 我怎么没见过。 08/25 18:30
- [rotapple] 发多张图是这样的。 你先要把图传到某个地方,比如百度空间。 然后再用[img]地址[/img]这 08/25 18:29
- [rotapple] ;这里为什么不是3F呢,因为3F-3F就等于0,loop就停止了。 你问了好多这个。 0-63 08/25 18:25
- [chinatree] 哪个题呀? 08/25 17:29
- [ameteur] 我试着用mov cx,[5],第一次程序可以成功执行,第二次就不行了。 08/25 17:07
- [ameteur] 我知道,但有一个问题,它是从mov ax,4c00H 前的复制,而不是整个,我可以用 sub cx, 08/25 17:05
- [chinatree] 第一个不用dl试试。 第二个可以不用 mov cx,0016h ,因为当程序加载好cx保存的就是 08/23 18:18
- [chinatree] 在多少页呀,起码最上一行和最下一行我就不知道怎么显示的 08/18 11:51
- [scuzg] 我是scuzg,QQ号是914933602,有空联络、讨论哈! 10/10 22:45