80x86 DIVX子程序跟踪过程

杨季文 80X86汇编语言程序 P352,子程序 DIVX ,使用移位和减法进行除法运算,

尝试举例验证之。

程序如下:

;子程序名:DIVX

;功      能:64 位数除以32 位数,商用64 位表示

;入口参数:EDX:EAX=被除数

;               EBX=除数

;出口参数:EDX:EAX=商

;               EBX=余数

DIVX    PROC    NEAR

             PUSH    ECX

             PUSH    ESI

             MOV      CX, 54

             XOR    ESI, ESI 

DIV1:    SHL    EAX, 1                ;这3 句代码相当于把ESI,EDX,EAX

             RCL    EDX, 1               ;作为1 个整体向左移位

             RCL    ESI, 1             

             JC    SHORT DIVX2

             CMP    ESI, EBX

             JB    SHORT DIVX3

DIVX2:  SUB    ESI, EBX

             BTS    AX, 0

DIVX3:  LOOP    DIVX1

             MOV    EBX, ESI

             POP     ESI

             POP     ECX

             RET

DIVX     ENDP 

下面以实例跟踪验证之。

为简单,假设有寄存器,AX、BX、CX、DX、SI 都是8 bit 寄存器

CF            SI                DX                AX          CX

0       00000000    10100111    01011110     16(LOOP前)

                                                       BX

                                                 11011001

即 dx:ax=A75E,被除数 bx=D9,以计算器算之,商=C5,余数=61

根据算法,循环8 次后,

CF            SI                DX                AX          CX

0       10100111    01011110    00000000     08(LOOP前)

                                                       BX

                                                 11011001

再左移 1 bit

CF            SI                DX                AX          CX

1       01001110    10111100    00000000     08(LOOP前)

                                                       BX

                                                 11011001

 执行 SUB SI, BX, BTS AX, 0

CF            SI                DX                AX          CX

0       01110101    10111100    00000001     08(LOOP前)

                                                       BX

                                                 11011001

再左移1 bit

CF            SI                DX                AX          CX

0       11101011    01111000    00000010     07(LOOP前)

                                                       BX

                                                 11011001

执行 SUB SI, BX,    BTS  AX, 0

CF            SI                DX                AX          CX

0       00010010    01111000    00000011     07(LOOP前)

                                                       BX

                                                 11011001

再左移4 bit

CF            SI                DX                AX          CX

1       00100111    10000000    00110000     03(LOOP前)

                                                       BX

                                                 11011001

执行 SUB SI, BX,    BTS  AX, 0

CF            SI                DX                AX          CX

0       01001110    10000000    00110001     03(LOOP前)

                                                       BX

                                                 11011001

再左移1 bit

CF            SI                DX                AX          CX

0       10011101    00000000    01100010     02(LOOP前)

                                                       BX

                                                 11011001

再左移1 bit

CF            SI                DX                AX          CX

1       00111010    00000000    11000100     01(LOOP前)

                                                       BX

                                                 11011001

执行 SUB  SI, BX,   BTS   AX, 0

CF            SI                DX                AX          CX

1       01100001    00000000    11000101     01(LOOP前)

                                                       BX

                                                 11011001

到此结束,可以看出,SI 中余数是 61H,DX:AX=0C5H,与计算器结果一致。
时间: 2024-08-03 20:21:32

80x86 DIVX子程序跟踪过程的相关文章

软件工程过程 第6章 软件工程过程的建立与监控

1.软件工程过程的层次.P162 U级(Universial Level 宏观级)提供一个高层概要 W级(Wordly Level 物质世界级)提供实际工作指导 A级(Atomic Level 微观级) 通过更加详细的求精 2.U级过程模型是指生存周期模型,包含知道具体工作的方针.P163~P165 面向任务的模型 实体过程的模型 3.W级过程模型对完成工作任务的顺序提供指导,规定各项任务的启动条件和输出结果.P166 规程定义了进行质量保证评审的点以及如何处理所发现的问题 规定评审工作的比例.

目标跟踪算法----KCF进阶(基于KCF改进的算法总结)

一.前情提要 如果你对目标跟踪和KCF是什么东西还不了解的话欢迎你看前一篇博文KCF入门详解:http://blog.csdn.net/crazyice521/article/details/53525366.如果你已经对基于KCF的目标跟踪有了一定的了解,并想知道这个算法有怎么样的后续的发展的话,就请听我慢慢介绍以下的东西. 二.KCF的弊端 说道KCF的缺点的话作者在文章中也已经算是说明了,第一点,KCF因为在跟踪过程当中目标框是已经设定好的,从始至终大小为发生变化,但是我们的跟踪序列当中目

【计算机视觉】粒子滤波跟踪

粒子滤波步骤 1.初始化随机选取N个点,权重统一赋值1/N 2.选取目标特征,颜色直方图等等,用于获取先验概率密度,对比相似度 3.确定状态转移矩阵,用于预测下一帧目标位置 循环开始 4.根据状态转移矩阵,对每个粒子,预测目标新位置 5.获得系统观测值,计算观测位置处特征 6.计算每个预测位置处特征,与观测处位置特征对比,相似度高的赋予较大的权重,反之,赋予较小的权重 7.对粒子加权获取当前的目标最佳位置 8.粒子重采样 循环结束 上面是我自己的理解,有些问题仍然不明白: 1.都有观测值了还修正

计算机视觉目标跟踪的算法分类

摘自百度百科............. (1)基于区域的跟踪算法 基于区域的跟踪算法基本思想是:将目标初始所在区域的图像块作为目标模板,将目标模板与候选图像中所有可能的位置进行相关匹配,匹配度最高的地方即为目标所在的位置.最常用的相关匹配准则是差的平方和准则,(Sum of Square Difference,SSD). 起初,基于区域的跟踪算法中所用到的目标模板是固定的,如 Lucas 等人提出 Lucas-Kanade 方法,该方法利用灰度图像的空间梯度信息寻找最佳匹配区域,确定目标位置.之

ORB-SLAM2初步(跟踪模块)

一.跟踪模块简介 在ORB-SLAM或其他SLAM系统中,跟踪的主要任务是根据相机或视频输入的图像帧实时输出相机位姿.在ORB-SLAM中,跟踪模块的主要任务是实时输出相机位姿和筛选关键帧,完成一个没有经过优化或者说全局优化的视觉里程计.通常根据相机的不同采用的方法也不相同,如单目除了需要进行初始化外通常根据特征匹配结果使用PnP算法求解相机位姿. 二.跟踪模块分析 如图 是ORB-SLAM跟踪模块的技术流程图 其流程为首先获取第一张彩色图像,然后转为灰度图,提取ORB特征,通常第一帧会构建为关

(转) 深度学习在目标跟踪中的应用

深度学习在目标跟踪中的应用 原创 2016-09-05 徐霞清 深度学习大讲堂 点击上方“深度学习大讲堂”可订阅哦!深度学习大讲堂是高质量原创内容的平台,邀请学术界.工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术.产品和活动信息! 开始本文之前,我们首先看上方给出的3张图片,它们分别是同一个视频的第1,40,80帧.在第1帧给出一个跑步者的边框(bounding-box)之后,后续的第40帧,80帧,bounding-box依然准确圈出了同一个跑步者.以上展示的其实就是目标跟踪(vis

目标跟踪之meanshift---meanshift2

均值漂移,可以对非刚性物理进行跟踪,是分参数估计,过程是迭代的过程,对光和形态不敏感,缺点是检测目标是固定的,特征不较少,模板背景没有实时更新,没有目标的位置精度预测只是梯度浓聚, 原理: 用文字标书就是在圆弧r范围内也就是划定的目标区域内,进行灰度像素直方图的相加取均值,这个均值就是目标中心的浓聚,借用公式如下 从每个像素开始,首先估计有相似颜色的邻近像素点的密度(局部密度)的梯度,而后利用迭代算法求出局部密度的峰值(即重心点),把能够聚类到同一个峰值点的所有像素点划分成一个区域. 以上为me

oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)

匿名PL/SQL块回顾 DECLARE (可选)     定义在PL/SQL块中要使用的对象 BEGIN (必须)     执行语句 EXCEPTION (可选)     错误处理语句 END; (必须) 匿名块(以DECLARE或BEGIN开始)每次使用时都要进行编译. 匿名块不存储在数据库中,并且它不能从其它的PL/SQL块中进行调用. 过程.函数.包和触发器:都是带名块.(请注重同匿名块的比较) 过程.函数.包和触发器:可以存储在数据库中,并且可以在需要的时候运行. 过程.函数.包和触发器

代码大全学习笔记(四):第7章--设计高质量的子程序

1. 子程序是为实现特定目的而编写的一个可被调用的方法(method)或过程(procedure),例如c++中的函数.java中的方法 子程序避免代码段重复,提高代码可读性,同时方便代码改动 2. 好的子程序名字 (1)   避免使用无意义.模糊不清的动词,例如processInput() (2)   根据需要确定子程序名字的长度,以清晰易懂为标准 (3)   子程序名称一般为 动词加宾语的形式 (4)   准确使用对仗词提供完整接口 3. 子程序的最佳长度 理论上最佳长度为50-150行,一