别走别忘 发表于 2014-9-5 12:28:37

10-5

本帖最后由 别走别忘 于 2014-9-6 18:21 编辑

检测点10.5
(1)下面的程序执行后,ax中的数值为多少?
注:不能用单步中断测试程序,中断涉及堆栈操作,不能带便CPU的真实执行结果。assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code endsendstart
我没有单步测试   CALL指令DS:是先PUSH 11 再JMP DS:,这个0EH转10进制就是14 那对应偏移地址14的指令是mov ax,4c00h,AX为什么不得4C00H ,而是AX=3?

      


别走别忘 发表于 2014-9-5 12:45:47

本帖最后由 别走别忘 于 2014-9-5 13:00 编辑

我才发现DS【】我给用成CS:IP了吧 ,DS:如何等于CS: ?能看出mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
这里DS=SS 那就是SS:SP=DS:IP,问题这里SS:SP指想SS:11 问题怎么就跟OEH相等了?

小靚同学Leon 发表于 2014-9-5 19:51:58

别走别忘 发表于 2014-9-5 12:45
我才发现DS【】我给用成CS:IP了吧 ,DS:如何等于CS: ?能看出mov ss,ax
mov sp,16
mov ds,ax


数据段跟栈段重叠了啊,push ip 后sp指向0eH(这是此时栈顶呀),既然数据段跟栈段重叠那么ds:=ss:=ss:=11H。仔细看下堆栈吧。。书得好好看呐

别走别忘 发表于 2014-9-5 21:07:05

小靚同学Leon 发表于 2014-9-5 19:51
数据段跟栈段重叠了啊,push ip 后sp指向0eH(这是此时栈顶呀),既然数据段跟栈段重叠那么ds:=ss:

好听你的!

别走别忘 发表于 2014-9-6 17:38:59

小靚同学Leon 发表于 2014-9-5 19:51
数据段跟栈段重叠了啊,push ip 后sp指向0eH(这是此时栈顶呀),既然数据段跟栈段重叠那么ds:=ss:

我重看了下栈那几节,我又看了下题,为什么这里当前IP 就是PUSH IP 和SP 就是两个分开算了,而前面那个10.4 里下面的程序执行后,ax中的数值为多少?
内存地址 机器码 汇编指令
1000:0 b8 06 00 mov ax,6
1000:2 ff d0 call ax
1000:5 40 inc ax
1000:6 mov bp,sp
add ax,
解:ax=11
这里为什么SP就是IP是同一个值 呢?这里SP当一个数值而不是一个地址来执行,而这个10.5里就得分得算SP 和 IP 而且这个10.5里11H 只能当一个偏移地址指向去执行INC AX 。为什么有时IP,SP 当数值用有时又只能当指向。

小靚同学Leon 发表于 2014-9-7 16:59:27

别走别忘 发表于 2014-9-6 17:38
我重看了下栈那几节,我又看了下题,为什么这里当前IP 就是PUSH IP 和SP 就是两个分开算了,而前面那个10 ...

sp就是栈指针,指向栈内存地址。ip就是程序指令指针。

别走别忘 发表于 2014-9-7 17:02:14

小靚同学Leon 发表于 2014-9-7 16:59
sp就是栈指针,指向栈内存地址。ip就是程序指令指针。

那4里为啥IP和SP相等了。

小靚同学Leon 发表于 2014-9-7 17:05:19

push ip了啊,ip进栈了啊,此时ip的值不就是sp所向的值么?

别走别忘 发表于 2014-9-7 17:08:47

5里也入栈了,就因为有栈顶设置 SP=16 就得要另算SP吗

别走别忘 发表于 2014-9-7 17:10:59

5里11H 不是值了又是指向了,4里入栈就当值了?还是因为【BP】加了双引号才让变成一个数值不是指向了

别走别忘 发表于 2014-9-7 17:11:43

小靚同学Leon 发表于 2014-9-7 17:05
push ip了啊,ip进栈了啊,此时ip的值不就是sp所向的值么?

忘记祝你中秋节快乐了!谢谢你一直回答我问题。

小靚同学Leon 发表于 2014-9-7 18:23:07

别走别忘 发表于 2014-9-7 17:11
忘记祝你中秋节快乐了!谢谢你一直回答我问题。

不客气。同乐。你追问的问题我不懂你的想法。或许你有深意我不知道你在说什么,但是这个问题我一开始的回答你好好看,没那么难懂。

别走别忘 发表于 2014-9-7 20:48:21

我是没想通为什么IP有的题目里和SP是一个数,有的题里IP和SP不是一个数。比如我说的10章里检测题里4和5题,我就想说这个意思。

别走别忘 发表于 2014-9-8 07:01:41

本帖最后由 别走别忘 于 2014-9-8 07:39 编辑

我知道哪里错了,10-4里不是SP=IP SP一直是=SP-2,这个10-4里是算不出SP指向哪针,但可以知道【SP]栈里放的是IP值5 ,【bp]指的内存单元里的值和【sp]全是5,4我错到SP和【SP]分不清
再看5理解错误是没理解JMP 含义, JMP 内存单元 是段内转移不会改变CS 只改变IP执行JMP 内存单元 后CS还是旧的CS ,ds:=11H ,所以新的IP=11H   这样指令的地址找到就是旧CS:(新IP),JMP 指令目的就是找到要执行指令的新物理地址CS :IP。

gyixue 发表于 2014-9-8 21:18:43

帮楼主顶一下,顺便赚点鱼币{:5_107:}

别走别忘 发表于 2014-9-9 08:47:06

还有这样赚鱼币的?成了灌水了!
页: [1]
查看完整版本: 10-5