惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
P
Palo Alto Networks Blog
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
S
Schneier on Security
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
雷峰网
雷峰网
T
Tenable Blog
人人都是产品经理
人人都是产品经理
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
AWS News Blog
AWS News Blog
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
Scott Helme
Scott Helme
SecWiki News
SecWiki News
C
CERT Recently Published Vulnerability Notes
Recorded Future
Recorded Future
I
InfoQ
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
Cloudbric
Cloudbric
C
Check Point Blog
Engineering at Meta
Engineering at Meta
TaoSecurity Blog
TaoSecurity Blog
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
腾讯CDC
量子位
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
Kaspersky official blog
Vercel News
Vercel News
F
Full Disclosure
T
Troy Hunt's Blog
Forbes - Security
Forbes - Security
S
Security @ Cisco Blogs

博客园 - vsignsoft

CentOS7 安装 mysql-8.0.25-el7-x86_64.tar.gz Apache Doris 编译 Tensorflow 模型保存与调用 制作 macOS Mojave 映像文件 编程实现文件重定向 openssh 免用户名/密码/服务器地址,登录远程服务器 FreeSWITCH 增加模块 mod_ilbc 解析 iOS crash 文件 私有地址与公网地址的转换 Supervisor 自动管理进程 使用 uWSGI 部署 Flask web 应用 安装 Flask macOS 上创建 Windows 兼容的 iso镜像文件 在VirtualBox 里安装纯DOS,进行汇编编程实践 Xcode 6、7 打包 苹果笔记本电脑,开不了机经验记录 CST时间转换成 yyyy-MM-dd格式 git 常规使用小结 XCode6 开发本地化应用
公式 X/N = int(H/N) * 65536 + [rem(H/N) * 65536 + L]/N 的运用
vsignsoft · 2018-03-12 · via 博客园 - vsignsoft

王爽老师《汇编语言》第3版,第10章的实验10 编写子程序,第2个子程序---解决除法溢出的问题:

名称:divdw

功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。

参数:(ax)=dword 型数据的低16位

   (dw)=dword型数据的高16位

    (cx)=除数

返回:(dx)结果高16位,(ax)结果低16位

    (cx)=余数

给出公式:

X/N = int(H/N) * 65536 + [rem(H/N) * 65536 + L]/N 

X: 被除数 dword, [0, FFFFFFFF]

N:除数 word, [0, FFFF]

H:X的高16位 word, [0, FFFF]

L:X的低16位 word, [0, FFFF]

int(H/N): H/N的商

rem(H/N): H/N的余数

分析:

1、H/N 商为 (AX), 余数为(DX),则 int(H/N) = (AX), rem(H/N) = (DX)

2、因为 2的16次方 = 65536 --> int(H/N) * 65536 为int(H/N)往左移动16位二进制位,即往左移动一个word

而int(H/N) = (AX), 所以,int(H/N) * 65536 = (AX) 00H ;同理,可以得出 rem(H/N) * 65536 = (DX) 00H

3、rem(H/N) * 65536 + L = (DX) 00H + L = (DX) L  那么, [rem(H/N) * 65536 + L)/N 相当于 (DX) L / N

只要 AX <-- L, 做除法div即可,结果 商为(AX),余数为(DX)送入CX 作为整个表达式的余数

4、整个表达式的加法就转变成 (DX) 00H + (AX) = (DX)(AX) 了

根据以上分析写出程序:

 1 assume cs:codesg
 2 
 3 codesg segment
 4   start: mov ax, 4240H
 5          mov dx, 000FH
 6          mov cx, 0AH
 7          call divdw
 8 
 9          mov ax, 4c00H
10          int 21H
11 
12   ;(dx, ax)/cx
13   ;@param dx-H, ax-L, cx-N
14   ;@return dx-hi, ax-lo, cx-
15   divdw: push bx
16          ;H/N
17          mov bx, ax ;L
18          mov ax, dx
19          mov dx, 0
20          div cx  ;shang-int(H/N)-ax, yu-rem(H/N)-dx
21          push ax ;int(H/N)
22         
23          ;int(H/N)*65536
24          ;ax00
25 
26          ;[rem(H/N)*65536+L]/N
27          ;dx bx
28          mov ax, bx
29          div cx
30          mov cx, dx ;yu
31 
32          ;int(H/N)*65536 + [rem(H/N)*65536+L]/N
33          ;dx00 + ax = dxax
34          pop dx
35          pop bx
36          ret
37 
38 codesg ends
39 end start

总结:此题关键是乘法左移