zoukankan      html  css  js  c++  java
  • 实验10-2 divdw

    assume cs:code,ds:data
    data  segment
        db 'Welcome to masm!', 0
    data  ends
    
    code segment
    start:         
            comment*
                div: n / x 
                    high(n) => dx     low(n) = > ax   
                结果:    ax 为商        dx 为余数
            *comment
                             
            mov ax, 4240h            ;低位
            mov dx, 000Fh            ;高位
            mov cx, 0Ah                ;除数
            call divdw    
            mov ax, 4c00h
            int 21h
    
        divdw:
            ; 原公式: X/N = int(H/N)*65536 + [rem(H/N)*65536+L]/N
            ; 先做 int(H/N) * 65536 部分,因为N(即:除数)的值在cx中,
            ; cx是16位寄存器,所以要做dw / w 除法.
            ; 000Fh 可以看作 0000 000Fh 
            push ax                ; 入栈保存
            mov ax, dx        ; 000Fh 
            mov dx, 0h        ; 0000h
            div cx                ; ax = int(H/N) = 商  dx = rem(H/N) = 余数
            mov bx, ax        ; bx 暂存高位商,使 ax 可用。
             
            ; 继续做 [rem(H/N)*65536+L]/N 部分, 设 X = rem(H/N)
            ; 所以 [rem(H/N)*65536+L]/N = [X * 65536 + L] / N    = [X0000h + L] / N
            ;    此时 X 就是被除数的 高位, L 就是被除数的低位,而 X 正好在 dx 中,
            ; N 也在 cx中, pop ax 即可 
            pop ax
            div cx                ; 结果: dx 为余数, ax 为商
            ; 题目要求cx存余数, 商的高位在dx,商低位在ax,此时ax就是商的低位 
            mov cx, dx
            mov dx, bx    ; 从 bx 还原到 dx
    code ends
    
    end start
  • 相关阅读:
    运算符优先级口诀
    [转] 从最大似然到EM算法浅解
    推荐系统实践整体化总结
    Python-函数
    Python-dict/set
    Python-条件、循环、
    Python-list and tuple
    优先级顺序表
    8.1python类型注解
    9.redis-CacheCloud
  • 原文地址:https://www.cnblogs.com/Jiaojiawang/p/14380961.html
Copyright © 2011-2022 走看看