移位除法运算(汇编)

合集下载

汇编语言指令

汇编语言指令

汇编语言指令集数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

用移位实现除法运算

用移位实现除法运算

用移位实现除法运算在计算机科学中,除法是一种基本的数学运算。

我们通常使用除法来计算两个数的商,即将一个数分割成等分的若干部分。

在编程中,除法运算经常用于解决各种实际问题,例如计算平均值、比例和百分比等。

然而,在某些情况下,我们可能需要使用一种更高效的方法来进行除法运算。

这时,移位操作可以派上用场。

移位操作是通过将二进制数向左或向右移动若干位来改变其值的方法。

在这篇文章中,我们将探讨如何使用移位操作来实现除法运算。

首先,让我们回顾一下二进制表示法。

在二进制中,每位上的数字只能是0或1。

我们知道,将一个十进制数转换为二进制数需要进行一系列的除法和取余操作。

同样地,我们可以使用移位操作来实现这些二进制的除法运算。

假设我们要计算一个二进制数A除以一个二进制数B的商。

首先,我们需要判断A和B的位数,然后将A向左移动(如向左移动一位相当于乘以2,向右移动一位相当于除以2)直到A的位数小于B的位数。

接下来,我们将A和B进行减法运算,得到一个新的数C。

然后,我们重复这个过程,将C向左移动并再次与B进行减法运算,直到C的位数小于B的位数或者C等于0为止。

通过这种迭代的过程,我们最终会得到A除以B的商。

这种移位实现除法的方法在对二进制数进行除法运算时非常有效,尤其是当B 是2的幂次方时。

例如,假设我们要计算一个二进制数10100除以一个二进制数10的商。

首先,我们将10100向左移动一位,得到101000。

然后,我们将101000减去10,得到100110。

继续向左移动并减去10,最终我们得到了商1011。

移位实现除法的方法不仅可以用于二进制数,也可以用于其他进制的数。

只需要将移位操作的位数和除数相应地调整即可。

总之,移位实现除法是一种高效的计算方法,特别适用于对二进制数进行除法运算。

通过将被除数左移并与除数进行减法运算的迭代过程,我们可以得到两个数的商。

在编程中,我们可以使用移位操作来实现除法运算,从而优化程序的执行效率。

移位相减除法-概述说明以及解释

移位相减除法-概述说明以及解释

移位相减除法-概述说明以及解释1.引言1.1 概述移位相减除法是一种用于计算机和数字电路中的整数除法算法。

它是一种基于二进制数位运算的简洁高效的除法算法,通过左移和减法操作来实现。

在计算机科学和电子工程领域,除法运算一直是一项基本且关键的运算。

传统的除法算法如长除法或恒定除法,需要经过多次运算和取余操作,计算复杂度较高。

而移位相减除法通过将被除数左移并减去除数的方式进行运算,避免了取余操作,大大提高了计算速度。

移位相减除法的基本原理是通过对被除数进行左移,使得被除数不断逼近除数的倍数,然后减去一个等于除数的值,再次进行左移和减法操作,直到得到商或者余数。

移位相减除法在实际应用中有广泛的应用,特别是在数字信号处理、编码和解码、嵌入式系统等领域。

其高效的计算速度和简洁的实现方式使得它成为了许多算法和电路设计中不可或缺的一部分。

尽管移位相减除法在计算效率和硬件实现方面有很多优势,但也存在一些限制和局限性。

移位相减除法对于某些数值范围较大的除数和被除数可能会导致溢出或精度丢失的问题。

此外,在某些特殊情况下,移位相减除法的性能可能不如其他除法算法,因此在实际应用中需要根据具体情况来选择合适的算法。

综上所述,移位相减除法是一种在计算机和电子工程领域中常用的高效除法算法。

它的计算速度快、实现简单,被广泛应用于数字信号处理和嵌入式系统等领域。

然而,仍需要在使用时注意其适用范围和潜在的限制,以保证计算结果的准确性和可靠性。

1.2 文章结构文章结构部分内容如下:文章结构部分旨在介绍本文的框架和组织方式,从而为读者提供一个整体的阅读导引。

首先,本篇文章将按照以下三个主要部分展开讨论:引言、正文和结论。

这三个部分在论文写作中是非常常见的,它们具有清晰的逻辑架构,有助于读者理解和把握文章的内容。

在引言部分,我们将首先进行概述,简要介绍移位相减除法。

该部分将回答读者可能提出的一些基本问题,概述移位相减除法的基本原理。

接下来,我们将介绍文章的整体结构和各个部分的内容。

汇编除法运算原理

汇编除法运算原理

汇编除法原理除法说得简单一点就是循环做减法,等减到不能再减了,那商也就出来了,余数也就得到了。

在单片机系统中,有时候也要用到除法的,但如果没有除法指令怎么办呢?而且单片机系统中除法和现实纯数学中的又不一样,它需要节约硬件资源又要运算速度快。

下面就介绍一种即省时又节约资源的单字节除法算法,并附上51的汇编程序:算法思想00001001/00000011=00000011被除数是00001001(9)除数是00000011(3)商是00000011(3)余数是00000000(0)算法思想是:1、将被除数高位移入Temp中2、将Temp减去除数3、如果小于0,则置商值低位为0如果大于等于0,则置商值低位为1,并将相减的结果放入Temp中4、将商值左移1位5、判断是否循环完成(一共循环8次)6、没有则跳到步骤1继续执行7、完成则存入商值和余数(Temp)按照上面的例子执行的结果如下:1、00000000-00000011小于0,商值为000000002、00000000-00000011小于0,商值为000000003、00000000-00000011小于0,商值为000000004、00000000-00000011小于0,商值为000000005、00000001-00000011小于0,商值为000000006、00000010-00000011小于0,商值为000000007、00000100-00000011大于0,商值为00000001,余数为00000001赋值给Temp8、00000011-00000011等于0,商值为00000011,余数为00000000至此算法完成注:单字节是循环8次,如果是双字节就要循环16次,依次类推附51单片机汇编程序lt1 db ? ;除数lt2 db ? ;被除数tmp1 db ? ;商tmp2 db ? ;中间变量tmp3 db ? ;作为被除数的中间变量tmp db ? ;循环的次数code .section at 0 'code'org 00hjmp startorg 04hretorg 20hstart:mov a,05hmov lt2,a ;赋值给被除数mov a,00hmov lt1,a ;赋值给除数sz accjmp go_onjmp end_ ;如果除数为0,程序结束;----------------go_on:mov a,lt2divui_0: ;开始除法运算mov tmp3,a ;被除数赋给tmp3mov a,8mov tmp,a ;循环的次数clr tmp1clr tmp2divui_1:clr c ;清除借位标志rlc tmp3 ;被除数左移一位rlc tmp2 ;把被除数从高位左移至tmp2 mov a,lt1 ;除数赋给accsub a,tmp2 ;tmp2与除数比较大小sz z ;两数相等则z为1jmp divui_2 ;等于,跳到divui_2sz c ;不等于,判断是否有借位jmp divui_3 ;没有借位,除数大于被除数divui_2: ;有借位,被除数大于除数mov a,tmp2sub a,lt1 ;被除数减去除数mov tmp2,a ;得到余数set c ;商1jmp divui_4divui_3:clr c ;商0divui_4:rlc tmp1 ;把商移进tmp1sdz tmp ;循环是否有8次?jmp divui_1 ;没有,继续循环mov a,tmp1 ;把商存在acc ;----------------------------end_:jmp $ ;原地踏步end ;程序结束。

汇编语言指令集合 吐血整理

汇编语言指令集合 吐血整理

RET(return)
5.中断
INT(interrupt)指令
IRET(interrupt return)
INTO(interrupt if overflow)
六、处理机控制指令
1.标志处理指令
CLC(Clear carry)
CMC(Complement carry)
STC(Set carry)
CLD(Clear direction)
串比较指令
SCASB(Scan string of byte)
串搜索指令
SCASW(Scan string of word)
串搜索指令
STOSB(Store string of byte)
存串指令
STOSW(Store string of word)
存串指令
LODSB(Load string of byte)
ES(Extra Segment):附加段寄存器。
第一部分:指令助记符: 一、数据传送指令
1.通用数据传送指令 MOV(Move) PUSH(Push onto the stack) POP(Pop from the stack) XCHG(Exchange)
2.累加器专用传送指令 IN(Input) OUT(Output) XLAT(Translate)
REPE(Repeat when empty) 若(CX)=0,则退出,否则 CX=CX+1;
REPZ(Repeat when flag )
若 ZF=0,则退出,否则 CX=CX+1;
REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)

小学二年级下册数学口算题(10000道)--100以内混合运算-汇编

小学二年级下册数学口算题(10000道)--100以内混合运算-汇编

小学二年级下册数学口算题(10000道)100以内混合运算汇编嘿,大家好!今天咱们来聊聊小学二年级下册数学口算题,特别是那些让人头疼的100以内混合运算。

说到这,我可是深有感触啊,那时候的数学老师简直就像个“数学魔法师”,一道道口算题就像变魔术一样,让人眼花缭乱。

首先,咱们得先来认识一下这些口算题。

它们可是五花八门,有加法、减法、乘法、除法,还有加减乘除混合在一起的呢。

就像一场数学盛宴,让人既兴奋又紧张。

记得有一次,老师给我们出了一道题:“23+157×2=?”。

当时我一看,心里就慌了神,这加减乘除一起来,可真够呛。

不过,冷静下来想想,其实这些题目都是有规律的。

比如,先算乘除,再算加减,这样就不会搞错了。

接下来,我就给大家分享几个口算小技巧:1. 乘法口诀要记牢。

比如,3×4=12,4×5=20,这样在遇到乘法题目时,就能迅速得出答案。

2. 减法可以转化为加法。

比如,157,可以想象成15加上一个数,使得结果等于8。

那么这个数就是7。

3. 加法交换律和结合律要会用。

比如,2+3+4,可以变成3+2+4,或者(2+3)+4,这样计算起来更方便。

4. 除法可以转化为乘法。

比如,12÷3,可以想象成12乘以一个数,使得结果等于1。

那么这个数就是1/3。

好了,接下来咱们来点实际的。

比如,这样一道题:“8+64×2=?”。

按照我们刚才说的方法,先算乘法,4×2=8,然后8+6=14,最后148=6。

答案就是6!当然,这些技巧只是冰山一角。

要想在口算题上得心应手,还得多做练习。

这里,我给大家准备了一份10000道口算题的汇编,涵盖了加减乘除混合运算,相信对大家会有很大帮助。

最后,我想说,数学其实并不难,只要我们用心去学,用心去练习,就能发现其中的乐趣。

让我们一起努力,成为数学小达人吧!加油!。

汇编语言指令大全X86和X87汇编指令大全(带注释)

汇编语言指令大全X86和X87汇编指令大全(带注释)

汇编语⾔指令⼤全X86和X87汇编指令⼤全(带注释)⽬录⼀、数据传输指令1. 通⽤数据传送指令.2. 输⼊输出端⼝传送指令.3. ⽬的地址传送指令.4. 标志传送指令.⼆、算术运算指令三、逻辑运算指令四、串指令五、程序转移指令六、伪指令七、处理机控制指令:标志处理指令浮点运算指令集1、控制指令2、数据传送指令3、⽐较指令4、运算指令其它1.机械码,⼜称机器码.2.需要熟练掌握的全部汇编知识(只有这么多)3.常见修改(机器码)4.两种不同情况的不同修改⽅法⼀、数据传输指令它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.1. 通⽤数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压⼊堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压⼊堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压⼊堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器⾥字节的顺序XCHG 交换字或字节.(⾄少有⼀个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG ⽐较并交换操作数.(第⼆个操作数必须为累加器AL/AX/EAX)XADD 先交换再累加.(结果在第⼀个操作数⾥)XLAT 字节查表转换.----BX指向⼀张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL)2. 输⼊输出端⼝传送指令.IN I/O端⼝输⼊. ( 语法: IN 累加器, {端⼝号│DX} )OUT I/O端⼝输出. ( 语法: OUT {端⼝号│DX},累加器 )输⼊输出端⼝由⽴即⽅式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. ⽬的地址传送指令.LEA 装⼊有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送⽬标指针,把指针内容装⼊DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送⽬标指针,把指针内容装⼊ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送⽬标指针,把指针内容装⼊FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送⽬标指针,把指针内容装⼊GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送⽬标指针,把指针内容装⼊SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEG 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),IMUL 整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).IDIV 整数除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04 SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量.Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1. ⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF 过程返回.2. 条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3. 循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4. 中断指令INT 中断指令INTO 溢出中断IRET 中断返回5. 处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建⽴段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CMC 进位位求反指令STC 进位位置为1指令CLD ⽅向标志置1指令STD ⽅向标志位置1指令CLI 中断标志置0指令STI 中断标志置1指令NOP ⽆操作HLT 停机WAIT 等待ESC 换码LOCK 封锁浮点运算指令集1、控制指令(带9B的控制指令前缀F变为FN时浮点不检查,机器码去掉9B)FINIT 初始化浮点部件机器码 9B DB E3FCLEX 清除异常机器码 9B DB E2FDISI 浮点检查禁⽌中断机器码 9B DB E1FENI 浮点检查禁⽌中断⼆机器码 9B DB E0WAIT 同步CPU和FPU 机器码 9BFWAIT 同步CPU和FPU 机器码 D9 D0FNOP ⽆操作机器码 DA E9FXCH 交换ST(0)和ST(1) 机器码 D9 C9FXCH ST(i) 交换ST(0)和ST(i) 机器码 D9 C1iiiFSTSW ax 状态字到ax 机器码 9B DF E0FSTSW word ptr mem 状态字到mem 机器码 9B DD mm111mmmFLDCW word ptr mem mem到状态字机器码 D9 mm101mmmFSTCW word ptr mem 控制字到mem 机器码 9B D9 mm111mmmFLDENV word ptr mem mem到全环境机器码 D9 mm100mmmFSTENV word ptr mem 全环境到mem 机器码 9B D9 mm110mmmFRSTOR word ptr mem mem到FPU状态机器码 DD mm100mmmFSAVE word ptr mem FPU状态到mem 机器码 9B DD mm110mmmFFREE ST(i) 标志ST(i)未使⽤机器码 DD C0iiiFDECSTP 减少栈指针1->0 2->1 机器码 D9 F6FINCSTP 增加栈指针0->1 1->2 机器码 D9 F7FSETPM 浮点设置保护机器码 DB E42、数据传送指令FLDZ 将0.0装⼊ST(0) 机器码 D9 EEFLD1 将1.0装⼊ST(0) 机器码 D9 E8FLDPI 将π装⼊ST(0) 机器码 D9 EBFLDL2T 将ln10/ln2装⼊ST(0) 机器码 D9 E9FLDL2E 将1/ln2装⼊ST(0) 机器码 D9 EAFLDLG2 将ln2/ln10装⼊ST(0) 机器码 D9 ECFLDLN2 将ln2装⼊ST(0) 机器码 D9 EDFLD real4 ptr mem 装⼊mem的单精度浮点数机器码 D9 mm000mmmFLD real8 ptr mem 装⼊mem的双精度浮点数机器码 DD mm000mmmFLD real10 ptr mem 装⼊mem的⼗字节浮点数机器码 DB mm101mmmFILD word ptr mem 装⼊mem的⼆字节整数机器码 DF mm000mmmFILD dword ptr mem 装⼊mem的四字节整数机器码 DB mm000mmmFILD qword ptr mem 装⼊mem的⼋字节整数机器码 DF mm101mmmFBLD tbyte ptr mem 装⼊mem的⼗字节BCD数机器码 DF mm100mmmFST real4 ptr mem 保存单精度浮点数到mem 机器码 D9 mm010mmmFST real8 ptr mem 保存双精度浮点数到mem 机器码 DD mm010mmmFIST word ptr mem 保存⼆字节整数到mem 机器码 DF mm010mmmFIST dword ptr mem 保存四字节整数到mem 机器码 DB mm010mmmFSTP real4 ptr mem 保存单精度浮点数到mem并出栈机器码 D9 mm011mmmFSTP real8 ptr mem 保存双精度浮点数到mem并出栈机器码 DD mm011mmmFSTP real10 ptr mem 保存⼗字节浮点数到mem并出栈机器码 DB mm111mmmFISTP word ptr mem 保存⼆字节整数到mem并出栈机器码 DF mm011mmmFISTP dword ptr mem 保存四字节整数到mem并出栈机器码 DB mm011mmmFISTP qword ptr mem 保存⼋字节整数到mem并出栈机器码 DF mm111mmmFBSTP tbyte ptr mem 保存⼗字节BCD数到mem并出栈机器码 DF mm110mmmFCMOVB ST(0),ST(i) <时传送机器码 DA C0iiiFCMOVBE ST(0),ST(i) <=时传送机器码 DA D0iiiFCMOVE ST(0),ST(i) =时传送机器码 DA C1iiiFCMOVNB ST(0),ST(i) >=时传送机器码 DB C0iiiFCMOVNBE ST(0),ST(i) >时传送机器码 DB D0iiiFCMOVNE ST(0),ST(i) !=时传送机器码 DB C1iiiFCMOVNU ST(0),ST(i) 有序时传送机器码 DB D1iiiFCMOVU ST(0),ST(i) ⽆序时传送机器码 DA D1iii3、⽐较指令FCOM ST(0)-ST(1) 机器码 D8 D1FCOMI ST(0),ST(i) ST(0)-ST(1) 机器码 DB F0iiiFCOMIP ST(0),ST(i) ST(0)-ST(1)并出栈机器码 DF F0iiiFCOM real4 ptr mem ST(0)-实数mem 机器码 D8 mm010mmmFCOM real8 ptr mem ST(0)-实数mem 机器码 DC mm010mmmFICOM word ptr mem ST(0)-整数mem 机器码 DE mm010mmmFICOM dword ptr mem ST(0)-整数mem 机器码 DA mm010mmmFICOMP word ptr mem ST(0)-整数mem并出栈机器码 DE mm011mmmFICOMP dword ptr mem ST(0)-整数mem并出栈机器码 DA mm011mmmFTST ST(0)-0 机器码 D9 E4FUCOM ST(i) ST(0)-ST(i) 机器码 DD E0iiiFUCOMP ST(i) ST(0)-ST(i)并出栈机器码 DD E1iiiFUCOMPP ST(0)-ST(1)并⼆次出栈机器码 DA E9FXAM ST(0)规格类型机器码 D9 E54、运算指令FADD 把⽬的操作数 (直接接在指令后的变量或堆栈缓存器) 与来源操作数 (接在⽬的操作数后的变量或堆栈缓存器) 相加,并将结果存⼊⽬的操作数FADDP ST(i),ST 这个指令是使⽬的操作数加上 ST 缓存器,并弹出 ST 缓存器,⽽⽬的操作数必须是堆栈缓存器的其中之⼀,最后不管⽬的操作数为何,经弹出⼀次后,⽬的操作数会变成上⼀个堆栈缓存器了FIADD FIADD 是把 ST 加上来源操作数,然后再存⼊ ST 缓存器,来源操作数必须是字组整数或短整数形态的变数FSUB 减FSUBPFSUBR 减数与被减数互换FSUBRPFISUBFISUBRFMUL 乘FMULPFIMULFDIV 除FDIVPFDIVRFDIVRPFIDIVFIDIVRFCHS 改变 ST 的正负值FABS 把 ST 之值取出,取其绝对值后再存回去。

汇编语言学习第4章

汇编语言学习第4章

不同而不同。
(名字项,常称为标号) 标号是程序设计人员自己定义的表示符号,用来表示本语句的符号地址
(即该指令的偏移地址,也就是该单元与其所处段基址的偏移量)是可有
可无的,只有当需要用符号地址来访问该语句时才需要。 2.operation(操作符)
操作符项可以是指令、伪操作或宏指令的助记符。对于指令,作用是指出
1.等价语句EQU
等价语句的一般使用格式如下: SYMBOL EQU EXPRESSION
作用是用左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名, 也不能被重新定义。
(1)用符号名代表常量或表达式
例4.14 (2)用符号名代表字符串 例4.15 (3)用符号名代表关键字或指令助记符 例4.16
例4.21
2.定义字变量的伪指令为DW
一个变量占一个字空间
例4.22:WORD1 DW DW 89H, 1909H, -1 0ABCDH, ?, 0
上面的定义语句经汇编后所产生出的内存单元分配情况如下:
… 89 00 09 19 FF FF CD AB --00 00 …
例4.23
3.双字变量定义伪指令DD 每个双字变量占用二个连续的字单元(四个字节)。
功能和作用,而不应该只写出指令的动作。
4.2运算符号
4.2.1算术运算符
算术运算符有:+、-、*、/和MOD。 其中: +、-、*、/就是我们算术中常用的加、减、乘、除。 MOD算符是模运算。指除法运算后得到的余数。 例如:5 MOD 2为1。 注意:算术运算符可以用于数字表达式或地址表达式中,但当它用于地址 表达式时,只有当其结果有明确的物理意义时才是有效的。 例如:将两个地址相乘或相除是无意义的。地址可以做加减运算,但也必 须注意物理意义。例如把两个不同段的地址相加减也是无意义的。 例4.1 例4.2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

移位除法运算(汇编)
推荐文章 2010-07-27 10:44:21 阅读508 评论1 字号:大中小订阅
除法运算的特点:
其特点可归纳如下:
①每次上商都是由心算来比较余数(被除数)和除数的大小,确定商为1还是
0。

②每做一次减法,总是保持余数不动,低位补0,再减去右移后的除数。

③商符单独处理。

如果将上述规则完全照搬到计算机内,实现起来有一定困难,主要问题是:
a.机器不能“心算”上商,必须通过比较被除数(或余数)和除数绝对值的大小来确定商值,即|x|-|y|,若差为正(够减)上商1,差为负(不够减)上商0。

b.按照每次减法总是保持余数不动,低位补0,再减去右移后的除数这一规则,则要求加法器的位数必须为除数的两倍。

仔细分析发现,右移除数可以用左移余数的办法代替,其运算结果是一样的,但对线路结构更有利。

不过此刻所得到的余数不是真正的余数,只有将它乘上2-n才是真正的余数。

c.笔算求商时是从高位向低位逐位求的,而要求机器把每位商直接写到寄存器的不同位也是不可取的。

计算机可将每一位商直接写到寄存器的最低位,并把原
来的部分商左移一位。

综上所述便可得原码除法运算规则。

2.原码除法:
原码除法和原码乘法一样,符号位是单独处理的。

以小数为例:
式中为x的绝对值,记作x*
为y的绝对值,记作y*
即商的符号由两数符号位“异或”运算求得,商值由两数绝对值相除(x*/y*)求得。

小数定点除法对被除数和除数有一定的约束,即必须满足下列条件:0<|被除数|≤|除数|(这样结果才能为小数)
实现除法运算时,还应避免除数为0或被除数为0。

前者结果为无限大,不能
用机器的有限位数表示;后者结果总是0,这个除法操作等于白做,浪费了机器时间。

至于商的位数一般与操作数的位数相同。

原码除法中由于对余数的处理不同,又可分为恢复余数法和不恢复余数法(加减交替法)两种。

(1)恢复余数法。

恢复余数法的特点是:当余数为负时,需加上除数,将其
恢复成原来的余数。

(然后再执行左移一位后减去除数的运算)。

相关文档
最新文档