狂飘的白云 发表于 2013-7-21 21:27:46

汇编语言课后题


下面是汇编语言课后检测题的答案,但是有2个地方看不懂,都用蓝色的笔记写在后面了,希望高人指导,谢谢!

检测点10.5(2)下面的程序执行后,ax和bx中的数值为多少?assume cs:codesgstack segment    dw 8 dup(0)stack endscodesg segmentstart:    mov ax,stack    mov ss,ax    mov sp,10h    mov word ptr ss:,offset s ;(ss:)=1ah    mov ss:,cs                ;(ss:)=cs    call dword ptr ss:      ;cs入栈,ip=19h入栈,转到cs:1ah处执行指令                                 ;(ss:)=cs,(ss:)=ip         这一步执行后,sp指向的内容不是ss:的内容吗?    nops:mov ax,offset s            ;ax=1ah    sub ax,ss:            ;ax=1ah-(ss:)=1ah-19h=1      这一步是怎么出来的?19h这个地址不是存在ss:吗?    mov bx,cs                  ;bx=cs=0c5bh    sub bx,ss:            ;bx=cs-cs=0    mov ax,4c00h    int 21hcodesg endsend start

狂飘的白云 发表于 2013-7-21 22:26:52

知道的朋友们指导一下,谢谢了

Dardy 发表于 2013-7-21 22:33:40

这一步执行后,sp指向的内容不是ss:的内容吗?
你把压栈的顺序搞反了,call的前面两个往ss:,ss:传数据,你就以为接着的压栈从ss:开始,其实是从栈底开始,即ss: (不是ss:)

这一步是怎么出来的?19h这个地址不是存在ss:吗?
你把10进制和16进制混用。栈底字,ss:的上一个字地址不是ss:而是ss:

Dardy 发表于 2013-7-21 22:33:44

这一步执行后,sp指向的内容不是ss:的内容吗?
你把压栈的顺序搞反了,call的前面两个往ss:,ss:传数据,你就以为接着的压栈从ss:开始,其实是从栈底开始,即ss: (不是ss:)

这一步是怎么出来的?19h这个地址不是存在ss:吗?
你把10进制和16进制混用。栈底字,ss:的上一个字地址不是ss:而是ss:

SilverMagic 发表于 2013-7-22 00:12:38

狂飘的白云 发表于 2013-7-22 14:12:53

SilverMagic 发表于 2013-7-22 00:12 static/image/common/back.gif
虽然版主大人解释了,不过给你执行堆栈图的话,比文字要容易理解些,自己可以DEBUG然后-t单步执行后-d去看看 ...

谢谢你了,费这么大事儿帮我把栈图画出来,现在了解的很明白了!

狂飘的白云 发表于 2013-7-22 14:14:13

Dardy 发表于 2013-7-21 22:33 static/image/common/back.gif
这一步执行后,sp指向的内容不是ss:的内容吗?
你把压栈的顺序搞反了,call的前面两个往ss:,ss: ...

嗯,明白了,知道哪里有误区了!谢谢{:5_108:}

985840427 发表于 2015-12-13 15:30:21

非常感谢,明白了:lol:
页: [1]
查看完整版本: 汇编语言课后题