移位除法运算(汇编)
- 格式:doc
- 大小:96.50 KB
- 文档页数:8
汇编语言指令集数据传送指令集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 ;程序结束。
小学二年级下册数学口算题(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汇编指令⼤全(带注释)⽬录⼀、数据传输指令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 之值取出,取其绝对值后再存回去。
汇编sra指令一、什么是sra指令?SRA(Shift Right Arithmetic)指令是一种汇编指令,用于将一个二进制数向右进行算术移位。
在SRA指令中,最右边的位将被舍弃,并根据符号位进行补位。
这意味着如果原数字是正数,则在右边补0;如果原数字是负数,则在右边补1。
二、SRA指令的语法和用法SRA指令的语法如下:SRA Rd, Rs, Rt其中,Rd是目标寄存器(Destination Register),Rs是源寄存器(Source Register),Rt是右移的位数(Shift Amount)。
SRA指令的作用是将源寄存器Rs的值向右移动指定的位数,并将结果存储到目标寄存器Rd中。
移位的位数由右移的位数Rt决定。
三、SRA指令的实例下面是一个使用SRA指令的实例,假设我们有两个寄存器A和B,它们的初始值分别为:A = 11011010B = 10100111现在我们使用SRA指令将寄存器A向右移动3位,并将结果存储到寄存器B中:SRA B, A, 3执行这条指令后,寄存器B的值将变为:B = 11110100四、SRA指令的应用场景SRA指令在计算机系统中有广泛的应用场景,以下是一些常见的应用场景:1.数据压缩:SRA指令可以用于对数据进行压缩。
通过将数据向右移动一定的位数,可以减少数据的位数,从而节省存储空间。
2.数值运算:SRA指令可以用于对有符号数进行除法运算。
通过将被除数向右移动一定的位数,可以实现除以2的幂次方的运算。
3.图像处理:SRA指令可以用于图像处理中的平滑滤波。
通过将像素值向右移动一定的位数,可以实现降低图像的分辨率和减少图像噪声的效果。
4.加密算法:SRA指令可以用于加密算法中的数据混淆。
通过将数据向右移动一定的位数,可以改变数据的二进制表示,增加数据的随机性,提高加密算法的安全性。
五、SRA指令的注意事项在使用SRA指令时,需要注意以下几点:1.移位的位数必须是一个非负整数。
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
汇编语⾔复习题(2)汇编语⾔复习题第2章8086CPU寄存器的结构及使⽤1.8086CPU由指令执⾏部件EU和总线接⼝部件BIU两部分组成。
其中EU的功能是控制和执⾏指令,主要由算术逻辑部件ALU、EU控制部件、8个16位寄存器和⼀个标志寄存器FLAGS组成。
BIU的功能是从存储器预取指令和数据,以及所有EU需要的总线操作,实现CPU与存储器和外设间信息传递。
BIU由指令队列、指令指针寄存器、段寄存器、地址加器组成。
2.Intel8086CPU共有14个16位寄存器,它们分别是通⽤寄存器8个即AX、BX、CX、DX、SP、BP、SI、DI,其中能⽤作寄存器间接寻址的寄存有BX、BP、SI和DI,控制寄存器2个即IP、PSW,段寄存器4个即DS、SS、CS和ES它们的含义分别是:其中在编程过程中程序的段基值由汇编程序装⼊的段寄存器是SS和CS,由编程者⽤汇编指令将段基值装⼊的段寄存器是DS 和ES,其具体指令是MOV AX,数据段段/附加数据段名,MOV DS/ES,AX,编程⼈员不能⽤指令去取其值或给其设置给定值的寄存器是IP,但是可以通过某些指令的执⾏⽽⾃动修改其内容,如JMP NEXT指令的功能是将⽬的地址的偏移量送⼊IP。
3.PSW是程序状态字寄存器⼜称为标志寄存器,⽤来反映微处理器在程序运⾏时的某些状态,其中的6个状态标志位分别是OF、SF、ZF、AF、PF和CF,反映了刚执⾏完算术或逻辑运算指令后的某些特征。
三个控制标志位是DF即⽅向标志、IF即中断标志位和TF陷阱标志。
如两个8位的⼆进制数相加其状态标志位中各标志的值是多少?10110101+10011011。
4.8086CPU数据总线16根地址总线是20根能访问的最⼤存储空间是1MB。
第3章存储器的分段1.在8086CPU中存储器的编址原则是按字节编址即每⼀个字节单元是⼀个存储器地址,在源程序中⽤常⽤⼗六进制数或符号来表⽰⼀个存储单元的地址。
arm汇编移位指令
ARM汇编语言中,移位指令是非常重要的操作之一。
ARM架构的
移位指令允许对操作数进行位移或者逻辑移位操作,常见的移位指
令包括LSL(逻辑左移)、LSR(逻辑右移)、ASR(算术右移)和ROR(循环右移)等。
LSL(Logical Shift Left)指令将操作数向左移动指定的位数,空出的位用0填充。
LSR(Logical Shift Right)指令将操作数向
右移动指定的位数,空出的位同样用0填充。
ASR(Arithmetic
Shift Right)指令将操作数向右移动指定的位数,并在最高位(符
号位)进行扩展,以保持负数的符号不变。
ROR(Rotate Right)指
令将操作数向右循环移动指定的位数,移出的位会重新移动到最高位。
这些移位指令在ARM汇编语言中使用非常广泛,可以用于实现
乘法、除法、逻辑运算等各种功能。
在实际编程中,程序员可以根
据具体的需求选择合适的移位指令来完成相应的操作。
同时,移位
指令还可以和其他指令结合使用,以实现更复杂的功能。
总的来说,移位指令在ARM汇编语言中扮演着重要的角色,能
够灵活地处理数据的位移和逻辑运算,为程序的实现提供了强大的支持。
汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。
’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。
’。
三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。
汇编语言程序设计》期末复习题及答案一、选择( 30 题)1.下列是 8 位带符号二进制数的补码,其中最大的是( B )。
B、000000012.在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现( C )C、占内存空间大,但速度快3.数据定义为:EE DB 3 , 4CC DW 3456H , 6789H执行指令“ MOV CX WORD PTR EE+1'后,(CX = ( B )B、5604H4.有如下指令序列:MOV AL, 95HMOV CL, 2SAR AL , CL上述指令序列执行后,AL的内容是(D )D、0E5H5. 设A=186io, B=273s, C=0B^,把这三个数看成无符号数,则它们之间的关系是(D )D、 A<B=C6. 用一条指令实现寄存器 BX和SI的内容相加,并将结果送入AX中,这条指令是(D )D、LEA AX, [BX][SI]7 .要从端口 1234H中读入8位数据,其指令应是( C )C、MOV DX, 1234HIN AL , DX&循环控制指令 LOOPNZ/LOOPNE续执行循环的条件是(B )B、CX^ 0 且 ZF=09. 8088/8086 存储器分段,每个段不超过( D )D、64K 个字节10.表示过程定义结束的伪指令是( A )A、ENDP11 .用来存放下一条将要执行的指令代码段地址的段寄存器是( D )D 、CS12 .假定(SS) =1000H, (SP) =0100H, (AX)=5609H,执行指令 PUSH AX 后,存放数据56H 的物理地址是( D )D、100FFH13.执行“ SUB AX, [BP][DI] ”指令,取源操作数时,使用的物理地址表达式是( A )A、16*SS+BP+DI14 .设AX中有一带符号数 8520H,执行“ SAR AX, 1”指令后,AX中的值是(C )C、0C290H15 .设(BX =1234H,( DS =2000H, ( 21234H) =5678H,则指令“ LEA SI,[BX] ” 执行后的结果是:( B )B、SI=1234H16 .测试BL中的数是否为负数,若为负数则转移至AA1处,横线处的指令应为( A )A 、 JNE17 .设 DF=Q (SI) =20H, (CX) =10,执行“ REP LODSW 指令后,SI 中的内容是(C )C 、 34H18.在程序执行过程中, IP 寄存器中始终保存的是( B )B 、下一条指令的首地址19 .设SP初值为2000H,执行指令“ POP AX'后,SP的值是(A )A、2002H20 .若 AX=3500H CX=56B8H 当 AND AX CX指令执行后, AX= ( A )A、1400H21 .汇编源程序时,出现语法错误的语句是( A )A、MOV DS, 1200H22 •将数据1234H存放在存储单元中的伪指令是( C )C 、 DATA1 DB 34H, 12H23 .下面指令执行后,可能改变AL寄存器内容的指令是( D )D 、AND AL, BLB、寄存器间接寻址25 •用户为了解决自己的问题,用汇编语言所编写的程序,称为( B )B、汇编语言程序26 .用DOS功能调用时,子功能调用的编号应放在( C )C、AH27 .提供串指令中目的操作数地址的是( C )C、ES: [DI]28 .在寄存器间接寻址方式下,能够提供有效地址的寄存器有( B )B、BX BP, SI , DI29 .已知某操作数的物理地址是2117AH则它的段地址和偏移地址可能是( A )A、2025 : 0F2A30 .中断向量表中的每个中断向量所占内存空间为:(B )B、4个字节、填空(30题)1.在用直接寻址方式寻址操作数时,系统对段地址的默认值在段寄存器DS中。
移位除法运算(汇编)推荐文章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)恢复余数法。
恢复余数法的特点是:当余数为负时,需加上除数,将其恢复成原来的余数。
(然后再执行左移一位后减去除数的运算)由上所述,商值的确定是通过比较被除数和除数的绝对值大小,即x*-y*实现的,而计算机内只设加法器,故需将x*-y*操作变为[x*]补+[-y*]补的操作。
汇编语言运算符汇编语言是一种低级语言,直接操作计算机硬件的指令和数据。
运算符是汇编语言中常用的操作符号,用于执行各种数学和逻辑运算。
本文将介绍汇编语言中常见的运算符及其使用方式。
一、算术运算符1. 加法运算符(ADD):将两个数相加,并将结果存储在目标操作数中。
例如,ADD AX, BX表示将寄存器AX和BX中的值相加,结果存储在AX中。
2. 减法运算符(SUB):将第二个操作数的值从第一个操作数中减去,并将结果存储在目标操作数中。
例如,SUB AX, BX表示将寄存器BX的值从AX中减去,结果存储在AX中。
3. 乘法运算符(MUL):将两个数相乘,并将结果存储在目标操作数中。
例如,MUL AX, BX表示将寄存器AX和BX中的值相乘,结果存储在AX中。
4. 除法运算符(DIV):将第一个操作数的值除以第二个操作数,并将商存储在目标操作数中。
例如,DIV AX, BX表示将AX的值除以BX,商存储在AX中,余数存储在DX中。
二、逻辑运算符1. 与运算符(AND):对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。
例如,AND AX, BX表示将寄存器AX和BX中的值进行逻辑与运算,结果存储在AX中。
2. 或运算符(OR):对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。
例如,OR AX, BX表示将寄存器AX和BX中的值进行逻辑或运算,结果存储在AX中。
3. 非运算符(NOT):对一个操作数进行逻辑非运算,并将结果存储在目标操作数中。
例如,NOT AX表示对寄存器AX的值进行逻辑非运算,结果存储在AX中。
4. 异或运算符(XOR):对两个操作数进行逻辑异或运算,并将结果存储在目标操作数中。
例如,XOR AX, BX表示将寄存器AX和BX 中的值进行逻辑异或运算,结果存储在AX中。
三、移位运算符1. 左移运算符(SHL):将一个操作数的二进制位向左移动指定的位数,并将结果存储在目标操作数中。
移位除法运算(汇编)
推荐文章 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)恢复余数法。
恢复余数法的特点是:当余数为负时,需加上除数,将其
恢复成原来的余数。
(然后再执行左移一位后减去除数的运算)。