汇编语言的除法计算

除法运算相关知识

  1. 被除数分为32位和16位,分别放在ax,dx或ax中
    • 被除数32位:在ax和dx中存放,ax存放低16位,dx存放高16位,对应除数一定为16位
    • 被除数16位:在ax中存放,对应除数为8位
  2. 结果的存储:32位 / 16位 => ax(商)…dx(余数)
  3. 结果的存储:16位 / 8位 => al(商)…ah(余数)

计算100001/100

assume cs:code
code segment
        ;被除数:由于100001>65535 超过了16位,因此不能用16位寄存器存放
        ;       需要用两个16位寄存器(共32位)来联合存放
        ;除数:100小于16位,可以在8位寄存器中存放,但是因为被除数是
        ;       32位的,所以除数要用一个16位寄存器存放
        ; 32位 / 16位 => ax商...dx余数
        ;被除数要用dx存放高16位,ax存放低16位
start:  mov dx,1        ; dx高十六位 存放0001h; ax低十六位,存放86a1h
        mov ax,86a1h    ;(dx)*10000h+ax=100001
        mov bx,100
        div bx

        ; 结果:ax存放商,dx存放余数
        ;ax=03EB  dx=0001
        mov ax,4c00h
        int 21h
code ends
end start 

计算1001/100

assume cs:code
code segment
        ;被除数:由于256< 1001 <65535 小于16位,高于8位,可以用16位寄存器存放
        ;除数:100<256 小于8位,可以在8位寄存器中存放,但是因为被除数是
        ;       16位的,所以除数要用一个8位寄存器存放
        ; 16位 / 8位 => al商...ah余数
        ;被除数:默认在ax寄存器中存放
start:  mov ax,03e9h      ;ax存放被除数16位  
        mov bl,0064h      ;bl 8位寄存器存放8位除数
        div bl

        ; 结果:al存放商,ah存放余数
        ;al=0A  ah=01  -> ax=010A
        mov ax,4c00h
        int 21h
code ends
end start 
posted @ 2022-09-09 22:30  hugeYlh  阅读(113)  评论(0编辑  收藏  举报  来源