关于学习汇编的一些规则的理解(div mul cf of)

->1.div(除法)  被除数/除数

  ->一共有三种格式的除法,分别是8位,16位,32位,这里的位数表示的是除数的位数

  ->实现div其实也很简单就是除数为被除数的一半就ok

  ->需要注意的就是ax和dx这两个寄存器,因为mul(乘法)和div(除法)和这两个寄存器紧密相连

  ->相关关系如下,需要记住的就是这个格式dx:ax 就是dx永远为高位,ax永远为低位,这个在mul中也同样适用

    被除数 除数                商 余数
    ax 8位寄存器/8位内存操作数       al ah
    dx:ax 16位寄存器/16位内存操作数      ax dx
    edx:eax 32位寄存器/32位内存操作数   eax edx

->2.mul(乘法)

  ->乘法就很简单了,因为不存在商和余数的问题

  ->规则如下:     

        被乘数 乘数 积
        al 8位操作数 ax
        ax 16位操作数 dx:ax
        eax 32位操作数 edx:eax

->3.cf(借位标志位)

  ->也就是当你进行加法/减法时,向虚拟位借位,cf 置1,否则为0

    eg.

      mov al,90

      add al,200

    上面的例子就会发生进位,因为al 为8位范围为0-255  而他们相加为290>255所以cf置1,在这里是当作无符号位计算的

->4.of(溢出标志位)

  ->也就是在进行有符号位进行算法时,数据发生溢出,因为是有符号位所以他的表示范围为-128-127(10000000-01111111)

  

时间: 2024-10-17 07:06:02

关于学习汇编的一些规则的理解(div mul cf of)的相关文章

int指令(学习汇编)

int指令 格式:int n n为中断类型码,它的功能是引发中断过程. CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下: 1)取中断类型码n: 2)标志寄存器入栈,IF=0,TF=0: 3)CS.IP入栈 4)(IP)=(n*4),(CS)=(n*4+2) 从此处转去执行n号中断的中断处理程序. 可以在程序中使用int指令调用任何一个中断的中断处理程序. assume cs:code code segment start:    mov ax,0b800h move s

内中断(学习汇编)

中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息. 注意,这里所说的中断信息,是为了便于理解而采用的一种逻辑上的说法.它是对几个具有先后顺序的硬件操作所产生的事件的统一描述. “中断信息”是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息. 中断信息可以来自CPU的内部和外部. 内中断的产生 对于8086CPU,当CPU内部有下面的情况发生的时候,将产生相应的中断信息: 1) 除法错误,比如:执行div指令产生的除法溢出: 2) 单步

关于学习汇编的建议

如果是学生想学习汇编(ARM)的,还想学习游戏开发的,我建议可以用这样的方法:2014年 别踩白块儿这个游戏很火,是用cocos2d-x(C++)开发的,游戏本身比较简单.你可以对这个游戏进行逆向,然后复制出一个你自己的别踩白块儿.逆 向的方法是结合ida的汇编代码以及F5反编译出来的伪代码进行代码逆向,当然前提是对cocos2d-x的游戏开发的一些基本元素要了解,另一方 面,cocos2d-x本身是开源的,你可以在IDA中看到很多明显的api调用,这会减轻逆向的难度.感觉有以下几个好处:1)掌

StyleCop学习笔记——默认的规则

在StyleCop中有一些官方自己写好的检测规则下面就是英文的解释 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustBeDocumented   Partial修饰的成员必须添加注释 3.SA1602:EnumerationItemsMustBeDocumented 枚举必须添加注释 4.SA1603: DocumentationMustContainValidXml  注释必须合法(注释中的

答复学习汇编不顺利的准大学生

[来信] 老师.我是一名准软件工程大学生..我高2时学了C语言(皮毛),还有Java一部分,由于这样,高中成绩差,高3几乎没接触,暑假,我就网购一本汇编语言(我想学软件破解),看了3/4有人说就可以了我就开始学,发现教程根本就授人以鱼.失望了,就买了本c++ primer plus看了8章,然而学校开学开始学的是C语言,听说汇编语言对编程很有帮助,我就又想重学汇编,想到我校不需要学汇编,很矛盾.不知道怎么办 [回复] 很高兴能看到你有机会学习你感兴趣的专业.在你即将踏入大学校园之际,我想告诉你,

直接定址表(学习汇编)

1.我们可以使用一种标号,这种标号不但表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元,还是字单元,还是双字单元.如 a:db 1,2,3,4,5,6,7,8             改写为    a   db   1,2,3,4,5,6,7,8 b:dw  0                        改变为    b     dw   0 使用不带“:”的标号,它们是同时描述内存地址和单元长度的标号.这种标号包含了对单元长度的描述,所以,在指令中,它可以

使用BIOS进行键盘输入和磁盘读写(学习汇编)

1.键盘输入将引发9号中断,BIOS提供了int 9中断例程.CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中.一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中.键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ASCII码. 2.下面,我们通过下面几个键: A.B.C.D.E.shift_A.A 的输入过程,简要地看一下int 9中断例程对键盘输入的

更灵活的定位内存地址的方法(学习汇编)

1.and指令:逻辑与指令,按位进行与运算.与1不变,与0变0,可将对象相应位设为0. 2.or指令:逻辑或指令,按为进行或运算.或1变1,或0变0,可将对象位设为1. 3.[BX+idata]的几种表现形式: mov ax,[200+bx] mov ax,200[bx] mov ax,[bx].200 4.SI和DI是8086CPU中和Bx功能相似的寄存器,只是不能分成两个8位的寄存器来用. 5.[BX+SI]进行内存地址定位的几种形式: mov ax,[bx][si] mov ax,[bx+

swift学习三:?和!理解

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化.如果在使用变量之前不进行初始化就会报错: 1 2 3 4 5 var stringValue : String   //error: variable 'stringValue' used before being initialized //let hashValue = stringValue.hashValue //