• ***汇编语言 实验10.2 解决除法溢出的问题


    汇编语言 实验10.2 解决除法溢出的问题

    写给自己的一些题外话: 因为各种各样(考试,加上萎靡的精神状态)的原因,在这一题卡了好几天,就是搞不懂商和余数的表示,直到今天才恍然大悟,下面我先总结一下div的用法,就当做自己的知识梳理了,我知道也没有人会看。。

    div

    这是汇编语言中的除法运算
        格式为:div [bx]
    
    有两种运算模式:
        1.  被除数是16位,除数是8位。在这种情况下,被除数放在ax中,除数放在8位reg或者内存单元中。产生的结果:商放在al中,余数放在ah中
        2.  被除数是32位,除数是16位。在这种情况下,被除数的高16位放在dx中,低16位放在ax中,除数放在16位reg或者内存单元中。产生的结果:商放在ax中,余数放在dx中。
        3.  以上。是不是感觉很绕!
        4.  下面开始程序描述
    

    子程序描述

    名称:divdw
    功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
    参数:
        (ax)=dword型数据的低16位
        (dx)=dword型数据的高16位
        (cx)=除数
    返回:
        (dx)=结果的高16位
        (ax)=结果的低16位
        (cx)=余数
    应用举例:计算1000000/10(F4240H/0AH)
    mov ax,4240H
    mov dx,000FH
    mov cx,0AH
    call divdw
    结果:(dx)=0001H,(ax)=86A0H,(cx)=0
    

    代码

    assume cs:code,ss:stack
    stack segment
        dw 0,0
    stack ends
    code segment
    start:  mov ax,stack
        mov ss,ax
        mov sp,10h
        mov ax,4240h
        mov dx,000fh
        mov cx,0ah
        call divdw
    
        mov ax,4c00h
        int 21h
    
    divdw:  push ax
        mov ax,dx
        mov dx,0
        div cx
        mov bx,ax
        pop ax
        div cx
        mov cx,dx;余数
        mov dx,bx;高八位的商
        ;此时ax中存储的就是低八位的商
        ret
    
    code ends
    end start
  • 相关阅读:
    关于项目管理的几点建议
    网站性能优化之服务端(一)
    HP CQ35 Windows7声卡驱动安装不上问题
    ubuntu双系统启动时卡死解决办法
    第十九周练习题
    第十六周作业练习题
    第十七周练习题
    第十八周练习题
    第十五周练习题
    第十四周练习题
  • 原文地址:https://www.cnblogs.com/litlife/p/7512774.html
Copyright © 2020-2023  润新知