汇编网首页登录博客注册
qingpengchen2011的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2011-07-29 18:43] 修改版的实验十,子程序二

assume cs:code,ss:stack

stack segment
dw 8 dup(0)
stack ends

code segment
   start:
     mov ax,stack
     mov ss,ax
     mov sp,16
     
     
     mov ax,4241h
     mov dx,000fh
     mov cx,0ah
     call divdw
     
     mov ax,4c00h
     int 21h
     
     ; the divdw
     ; 功能:进行不会产生除法溢出的运算,被除数为dword型,除数为word型,结果为dword型
     ;参数:(ax)=dword型数据的低16位
      ;     (dx)=dword型数据的高16位
      ;     (cx)=除数
     ;返回值 :(dx)=结果的高16位,(ax)=结果的低16位 (cx)=余数
     divdw:
     
       ;各种寄存器的保存
       push es
       push si
       push bx
       push di
       push bp
       
       ;将被除数低位存入si
       mov si,ax
       
       ;构造除数16位,被除数32 被除数为  H 
       mov ax,dx
       mov dx,0
       
       
       ;进行除数运算,并将得到的商及余数入栈
       div cx 
       push ax ;商入栈
       push dx ;余数入栈
       
      ;将余数出栈,做乘法运算加上L,除去N,并将高位保存在bx,低位保存在DI
       mov bp,sp ; 保存栈顶指向余数的地址
       pop ax
       mov bx,65535
       mul bx
       add ax,[bp] ;再次加上余数
       adc dx,0
       
       
       add ax,si ;将低位加上
       adc dx,0 ; 以免加法有溢出
       div cx
       ;数值的保存
       mov es,dx ;es中保存高位.即后式的余数
       mov di,ax ;di保存低位,即商
       
       ;将商出栈,并做乘法运算, 同时加上在BX,DI中的值,后得到最终结果返回
       mov bp,sp ;保存指向栈的商的地址
       pop ax
       mul bx
       add ax,[bp] ;再次加上商
       adc dx,0
       
       ;加上后式的商
       add ax,di
       adc dx,0
       
       mov cx,es ;后式的余数移入cx
       
       
  
 
      ; pop cx ;余数的出栈
        ;出栈寄存?
       pop bp
       pop di
       pop bx
       pop si
       pop es
   
      
       
       ret
      
   code ends
 end start
评论次数(0)  |  浏览次数(501)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码