. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第十章【实验10.2】——编译结果异常?  [待解决] 回复[ 0次 ]   点击[ 293次 ]  
girl_lulu
[帖 主]   [ 发表时间:2010-04-27 18:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
assume cs:code

code segment
start: 
         mov ax,4240h
         mov dx,000fh
         mov cx,0ah
         call divdw
         mov ax,4c00h
         int 21h
   
   divdw: push ax
   
             mov ax,dx
             mov dx,0000h;   或者0
             div cx
             mov bx,ax
                   
             pop ax
             div cx;             低16位放在ax中
                   
              mov cx,dx;                    余数放在cx中
              mov dx,bx;   高16位放在dx中
              ret
code ends
end start

=======================================
DEBUG上结果:

AX=86A0  BX=0001  CX=000A  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=0C6F  ES=0C6F  SS=0C7F  CS=0C7F  IP=001E   NV UP EI PL NZ AC PO NC
0C7F:001E 8BCA          MOV     CX,DX
-u
0C7F:001E 8BCA          MOV     CX,DX
0C7F:0020 8BD3          MOV     DX,BX
0C7F:0022 C3            RET
0C7F:0023 4B            DEC     BX
0C7F:0024 1083C406      ADC     [BP+DI+06C4],AL
0C7F:0028 8B1E5607      MOV     BX,[0756]
0C7F:002C D1E3          SHL     BX,1
0C7F:002E D1E3          SHL     BX,1
0C7F:0030 A13A21        MOV     AX,[213A]
0C7F:0033 8B163C21      MOV     DX,[213C]
0C7F:0037 8987BE22      MOV     [BX+22BE],AX
0C7F:003B 8997C022      MOV     [BX+22C0],DX
-g23

Program terminated normally
-r
AX=86A0  BX=0001  CX=000A  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=0C6F  ES=0C6F  SS=0C7F  CS=0C7F  IP=001E   NV UP EI PL NZ AC PO NC
0C7F:001E 8BCA          MOV     CX,DX
-

————按理说,这时结果应该即为:(AX=86A0  CX=0000  DX=0001),但事实不是。疑点1?


+++++++++++++++++++++++++++++++++++++++++++

继续单步执行DEBUG:

0C7F:0037 8987BE22      MOV     [BX+22BE],AX
0C7F:003B 8997C022      MOV     [BX+22C0],DX
-g23

Program terminated normally
-r
AX=86A0  BX=0001  CX=000A  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=0C6F  ES=0C6F  SS=0C7F  CS=0C7F  IP=001E   NV UP EI PL NZ AC PO NC
0C7F:001E 8BCA          MOV     CX,DX
-t

AX=86A0  BX=0001  CX=0000  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=0C6F  ES=0C6F  SS=0C7F  CS=0C7F  IP=0020   NV UP EI PL NZ AC PO NC
0C7F:0020 8BD3          MOV     DX,BX
-t

AX=86A0  BX=0001  CX=0000  DX=0001  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=0C6F  ES=0C6F  SS=0C7F  CS=0C7F  IP=0022   NV UP EI PL NZ AC PO NC
0C7F:0022 C3            RET
-t

AX=86A0  BX=0001  CX=0000  DX=0001  SP=0000  BP=0000  SI=0000  DI=0000
DS=0C6F  ES=0C6F  SS=0C7F  CS=0C7F  IP=7212   NV UP EI PL NZ AC PO NC
0C7F:7212 97            XCHG    DI,AX
-

————到这时才出现正确结果:(AX=86A0  BX=0001  CX=0000  DX=0001  )。但RET指令后转移到
mov ax,4c00h
int 21h
此时,AX应为4C00而不再是86A0吧? 疑点2.
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved