• 编写不会产生除法溢出的子程序


    divdw:           不溢出除法,被除数为dword,除数为word,结果为dword 

    ;参数:(dx):(ax)=被除数高、低16位  (cx)=除数 
    ;返回:(dx):(ax)=结果的高、低16位  (cx)=余数 

    h,L表示被除数H的高16位和低16位,int(h/n)取商,rem(h/n)取余。n代表除数.

     采用公式:x/n=int(h/n)*65536+[rem(h/n)*65536+L]/n 

    即:int(h/n)作高16位,             rem(h/n)做被除数高16位,L做低16位,除以n 的结果做 低16位。

    最开始相当很复杂,答案很简单:

    assume cs:code
    
    code segment
    start:mov ax,4240h ;dword型数据的低16位
            mov dx,000fh ;dword型数据的高16位
            mov cx,0Ah   ; c除数
            call divdw 
            mov ax,4c00h
            int 21h
    
    divdw:   push si
             push ax
             mov ax,dx ;ax存储高位
             mov dx,0
             div cx
             mov si,ax ;si存储商,dx存放余数
             
             pop ax ;ax存储低位
             div cx   ;运算后ax存储结果的低位
             
             mov cx,dx ;余数
             mov dx,si ;dx存储高位
             pop si
             
             ret
    
    
      code ends
      end start

      下面是自己写的一段简洁的代码:

    divdw:
            mov di,ax 
            mov ax,dx ;ax 存储高16位
            mov dx,0
            div cx ;ax 商,dx余
             
            push ax
            
            mov ax,di
            div cx  ;ax运算后为余安照公式存储低16位
            mov  cx,dx ;存储余数,最开始忘记了
            
            pop dx ;dx接受开始的ax
            
            ret

    下面的代码跟以上类似:

    divdw: ;子程序定义开始
    
    push ax
    
    mov ax,dx
    
    mov dx,0
    
    div cx
    
    mov bx,ax
    
    pop ax
    
    div cx
    
    mov cx,dx
    
    mov dx,bx
    
    ret ;子程序定义结束
  • 相关阅读:
    PHP5中PDO的简单使用
    Apache中设置默认首页的方法
    PHP数组读取的循环操作
    header("Location:login.php")应该注意的几个问题
    纯JavaScript实现弹出选择第几个单选按钮
    PHP关于错误抑制符@的使用
    CSS盒子模型
    Appache中的ServerAlias
    PHP move_uploaded_file() 函数 定义和用法
    PHP ob_start() 函数介绍
  • 原文地址:https://www.cnblogs.com/youxin/p/2524751.html
Copyright © 2020-2023  润新知