汇编语言的除法计算

除法运算相关知识

  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 @   hugeYlh  阅读(190)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示