检测点10.5(1)
assume cs:code
stack segmeng
dw 8 dup(0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0 ;此时ax=0
call word prt ds:[0eh] ;此时,发生push ip、jmp动作,而此时ip值指向下一个指令:inc ax,而ds段此时和stack段重合,故,ds:[0eh]此时内容为刚刚压栈的IP值,即,程序将跳到inc ax执行
inc ax ;此指令执行后,ax=0+1=1
inc ax ;此指令执行后,ax=1+1=2
inc ax ;此指令执行后,ax=2+1=3
code ends
end start
求最后ax=??
即最后结果:ax中值为3
检测点10.5(2)
assume cs:code
data segmeng
dw 8 dup(0)
data ends
code segment
start:mov ax,data
mov ss,ax
mov sp,16
mov word prt ss:[0],offset s ;此指令执行后,栈段中偏移量0中内容为标号s的偏移值
mov ss:[2],cs ;此指令执行后,栈段偏移量2中内容为code段的段地址
call dword prt ss:[0h] ;此指令执行后发生push cs/push IP动作,即指令执行后,栈段偏移量0eh中的内容为code段的段地址,而偏移量0ch中的内容为ip值,而此时ip值为nop代码的偏移量
nop ;指令长度=1
s:mov ax,offset s ;call指令执行后,程序跳到此行。而此行执行后,ax中值为s标号的偏移量
sub ax,ss:[0ch] ;此时栈段0ch偏移量中内容为nop指令偏移量,即:ax=(offset s) - (offset nop),故此指令执行后,ax=1h
mov bx,cs ;此时bx=code段段地址
sub bx,ss:[0eh] ;此时栈段0eh偏移量处放置的正是code段段地址,故此指令执行生,bx=0
code ends
end start
求最后ax=??,bx=??
本题最后结果:ax=1h,bx=0h
- [sbjcm33] 原来你是把实验1和2放一起的,好办法,我怎么没想到呢,把它们分成了两个程序。 具体的内容我就不看了 12/06 01:34
- [rotapple] 却没有放入段地址,而此处要明确的是:seg code 的含义是指段地址 ============= 06/23 16:56
- [Wednesday] 分析透彻,收藏!哈哈 11/09 17:26
- [Wednesday] 公布答案了,哈哈。 11/05 23:03
- [mqmelon] 不用客气,共同进步! 11/02 10:03
- [feemess] 谢谢指点.我的下一次答题要在32个小时之后了.一直都认为第一题没错.看来.要认真看书才是 10/28 00:08
- [mqmelon] 谢谢,我会努力去做. 10/27 23:18
- [游客] mqmelon同学,你能有这样的认识首先说明你的学习态度是对的,只要有正确的学习态度,就能够学好,以 10/25 11:56
- [sunshine] 呵呵 10/25 09:49
- [mqmelon] 谢谢,十分谢谢。 10/24 17:10