. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第十章 检测点10.5(1)的理解  [待解决] 回复[ 4次 ]   点击[ 822次 ]  
xiejzhong
[帖 主]   [ 发表时间:2015-11-14 19:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-09-16 23:07
问:执行程序后,ax中值为多少?
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                ;程序执行到这里的时候,谁都明白,
                                 ;结果就是ss:sp指向stack:10h处,ds=stack,ax = 0

         call word ptr ds:[0EH]  ;这一句是看汇编语言论坛的里高手的解释后自己再慢慢想明
                                 ;白的,但跟他们的解释不那么一样。看下面
                                 ;书上是这样说的,先push ip。
                                 ;那么ip是多少呢?根据第三版第32页的描述,
                                 ;将call word ptr ds:[0EH]加载入CPU后,ip指向下一条指令
                                 ;即ip 指向 inc ax 的偏移地址。然后将ip的值入栈。
                                 ;即sp = sp - 2,
                                 ;即(SS:SP)=(stack:0EH)=(inc ax 的偏移地址)。
                                 ;然后执行call word ptr ds:[0EH]
                                 ;那么call word ptr ds:[0EH]是什么意思呢?
                                 ;就是将ds:[0EH]处的一个字取出来给ip,
                                                                                 inc ax
                                  - -    - -    - -    - -    - -    - -    - -   - -
                                  0 1    2 3    4 5    6 7    8 9    a b    c d   e f
                                                                                 ss:0e
                                                                                 ds:0e
                                 ;因为刚刚才将ip(inc ax的偏移地址)存入SS:[0EH],
                                 ;而ds:[0EH]  正好是  ss:[0EH]
                                 ;所以就是将inc ax指令的偏移地址给ip,
                                 ;所以CS:IP就指向了inc ax这条指令。
                                 ;所以接下来就是执行inc ax,以及之后的指令。
                                 ;结果就是ax = 3
        inc ax
        inc ax
        inc ax
        mov ax,4c00h
        int 21h
code ends

end start
aurora0123
[第1楼]   [ 回复时间:2016-01-24 09:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2016-01-18 11:54
应该是4C00H,嘿嘿
uzesi
[第2楼]   [ 回复时间:2017-08-27 14:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2017-01-24 04:03
"结果就是ss:sp指向stack:10h处" 这句话怎么理解?你又没压栈弹栈,为什么ss和sp的值会变? 要变也是运行到后面才变吧
artist.h
[第3楼]   [ 回复时间:2017-12-26 18:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2017-10-27 15:46
"结果就是ss:sp指向stack:10h处" 这句话怎么理解?你又没压栈弹栈,为什么ss和sp的值会变? 要变也是运行到后面才变吧
------------------
回复:call word ptr 首先就是push IP,书是怎么看的?

LZ解释的很清楚,赞!
630591905666
[第4楼]   [ 回复时间:2018-09-01 17:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2018-07-16 09:32
厉害
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved