***汇编语言 实验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
posted @ 2017-05-23 23:42  ka1n4t  阅读(328)  评论(0编辑  收藏  举报