5:整数算术
来源:互联网 发布:网络下载速度慢怎么办 编辑:程序博客网 时间:2024/05/21 08:41
移位和循环移位指令
逻辑移位和算术移位
逻辑移位即以0填充最后移除的位。
算术移位是以原来的符号为填充移除的位
SHL指令
对操作数进行逻辑左移操作,最低位以0填充,移出的最高位送入进位标志(CF),原来进位标志的值将丢失
格式: SHL 目的操作数,移位位数
ð SHL reg,imm8
ð SHL mem,imm8
ð SHL reg,CL
ð SHL mem,CL
Eg: mov b1,8Fh
SHL b1,1 ;CF=1,b1=00011110b
快速乘法
使用SHL指令 可以进行2的次幂的高速乘法操作,任何操作数左移n位就是相当于乘以2的n次幂
Eg: mov dl,10
Shl dl,2 ;10*(2的2次方)
SHR指令
对操作数进行逻辑右移操作,移出的数据位以0代替,最低位被复制到进位标志中,原来的进位标志将丢失
Eg: mov al,0D0h
Shr al,1 ;AL=01101000b,CF=0
快速除法
任何无符号操作数逻辑右移动n位就是相当于该操作数除以2的n次幂
Eg: mov dl,32
Shr dl,2 ;dl=32/2/2=8
SAL和SAR指令
SAL指令和SHL相同,执行逻辑左移。SAR指令对目的操作数执行算术右移操作
Eg: mov al,0f0h ;al=11110000b-16
SAR al,1 ;al=11111000b-8,CF=0
有符号数的除法
使用SAR指令可以对有符号数进行除以2的次幂的快速操作
Eg: mov dl,-128 ;10000000b
Sar dl,3 ;11110000b
符号扩展AX到EAX
先左移EAX16位,在算术右移EAX16位
Eg: mov ax,-128 ;????FF80h
Shl eax,16 ;FF800000h
Sar eax,16 ;FFFFFF80h
ROL指令
循环左移,移动后把最高位复制到进位标志中。数据从一段移走后会在另一段出现
Eg: mov al,40h ;01000000b
Rol al,1 ;10000000b ;CF=0
Rol al,1 ;00000001b ;CF=1
ROR指令
循环右移,移动后把最高位复制到进位标志中。数据从一段移走后会在另一段出现
Eg: mov al,40h ;01000000b
RoR al,1 ;00100000b ;CF=0
RoR al,1 ;00010000b ;CF=0
RCL和RCR指令
RCL指令在每位左移一位后,把进位标志送到最低有效位中,把最高有效位复制到进位标志中。
Eg: clc ;CF=0
Mov bl,88h ;CF=0,bl=10001000b
Rcl bl,1 ;CF=1,bl=00010000b
Rcl bl,1 ;CF=0,bl=00100001b
RCR指令在每位右移一位后,把进位标志送到最高有效位中,把最低有效位复制到进位标志中。
Eg: clc ;CF=0
Mov bl,88h ;CF=0,bl=10001000b
RcR bl,1 ;CF=0,bl=01000100b
Rc bl,1 ;CF=0,bl=00100010b
符号溢出
。。。。。。。。。。。。。
SHLD和SHRD指令
SHLD指令把目的操作数左移指定的位数,左移空出来的位用源操作数的高位来填充
格式: SHLD 目的操作数,源操作数,移位位数
ð SHLD reg16,reg16,CL/imm8
ð SHLD mem16,reg16,CL/imm8
ð SHLD reg32,reg32,CL/imm8
ð SHLD mem32,reg32,CL/imm8
Eg: .data
Wval WORD 9ba6h
.code
Mov ax,0ac36h
SHLD wval,ax,4 ;wal左移4位,把ax高4位插入wval低4位
SHRD指令把目的操作数右移指定的位数,右移空出来的位用源操作数的低位来填充
格式: SHRD 目的操作数,源操作数,移位位数
Eg:mov ax,234bh
Mov dx,7654h
Shrd ax,dx,4 ;ax右移4位,ax的高4位由dx低4位填充
乘法和除法指令
MUL指令 无符号乘法
格式: MUL r/m8 操作数与AL相乘 积为AX
MUL r/m16 操作数与AX相乘 积为DX:AX
MUL r/m32 操作数与EAX相乘 积为EDX:EAX
注意:在DX或EDX存储结果时,如果DX或EDX不为0则进位标志置位
Eg: mov eax,12345h
Mov ebx,10000h
Mul ebx ;EDX:EAX=0000000012345000h,CF=0
IMUL指令 有符号乘法
单操作数
单操作数格式把乘积存储在累加器(AX,DX:AX,EDX,EAX)中
ð IMUL r/m8
ð IMUL r/m16
ð IMUL r/m32
Eg: mov eax,4823424
Mov ebx,-423
Imul ebx ;EDX:EAX=FFFFFFFF86635D80h,OF=0
双操作数
乘积存储在第一个操作数中,第一个操作数必须是寄存器,第二个操作数可以是寄存器,内存操作数或立即数
ð IMUL r16,r/m16
ð IMUL r16,imm8
ð IMUL r16,imm16
--------------------------------
ð IMUL r32,r/m32
ð IMUL r32,imm8
ð IMUL r32,imm32
Eg: mov ax,-16
Mov bx,2
Imul bx,ax ;bx=-32
三操作数
乘积存储在第一个操作数中,一个16进制的寄存器可以被一个8位或16位的立即数乘。同理 一个32位的寄存器合一被一个8位或32位的寄存器乘
ð IMUL r16,r/m16,imm8
ð IMUL r16,r/m16,imm16
---------------------------------
ð IMUL r32,r/m32,imm8
ð IMUL r32,r/m32,imm32
Eg: .data
Word1 SWORD 4
Dword1 SDWORD 4
.code
Imul bx,word1,-16 ;BX=-64
Imul ebx,dword1,-16 ;EBX=-64
Imul ebx,dword1,-20000000 ;OF=1 溢出
DIV指令
无符号除法,执行8位,16位或32位无符号整数除法。
除数 商 余数
ð DIV r/m8 r/m8 AL AH
ð DIV r/m16 r/m16 AX DX
ð DIV r/m32 r/m32 EAX EDX
Eg: mov dx,0
Mov ax,8003h
Mov cx,100h
Div cx ;AX=0080h,CX=0003h
有符号整数除法
符号扩展指令(CBW,CWD,CDQ)
CBW指令(字节符号扩展至字)扩展AL的符号位至AH中,保留数字的符号
Eg: mov al,-101 ;AL=9bh
Cbw ;AX=FF9bh
CWD指令(字符号扩展至双字)扩展AX符号至DX中
Eg: mov ax,FF9bh ;AX=FF9Bh
Cwd ;DX:AX=FFFFFF9Bh
CDQ指令(双字节扩展至8字节)扩展EAX中的符号位至EDX中
Eg: mov eax,FFFFFF9Bh ;EAX=FFFFFF9Bh
CDQ ;EDX:EAX=FFFFFFFFFFFFFF9Bh
IDIV指令
进行有符号整数的除法运算,格式和DIV一样,在进行计算前,需要进行符号扩展
Eg: .data
wordVal SWORD -5000
.code
Mov ax,wordVal
Cwd
Mov bx,+256
Idiv bx ;商AX=-9,余数DX=-136
除法溢出
如果商太大,目的操作数不能容纳,那么会导致溢出。如果除数是0 也会溢出
扩展加法和减法
任意尺寸大小数字的加减法
ADC指令
该指令把源操作数、目的操作数以及进位标志相加,格式于Mov指令相同
Eg:mov edx,0
Mov eax,0FFFFFFFFh
Add eax,0FFFFFFFFh
Adc eax,0
SBB指令
从目的操作数中减去源操作数和进位标志的值。指令允许的操作数与ADC一样
指令格式:sbb 操作对象1,操作对象2
功能:操作对象1=操作对象1-操作对象2-CF
- 5:整数算术
- 简单整数算术运算
- 整数算术运算
- check和unchecked整数算术
- 算术运算 (SSE2 整数内部)
- 算术运算 (SSE2 整数内部)
- 数理逻辑:公理化算术(5)算术公理
- 初步篇11算术运算符与算术表达式项目2分离整数和小数部分
- 算术符号和算术表达式——分离整数和小数部分
- [day 5]算术测验
- Intel汇编程序设计-整数算术指令(上)
- Intel汇编程序设计-整数算术指令(中)
- Intel汇编程序设计-整数算术指令(下)
- 分而治之——大整数的算术运算
- 算术
- 算术
- 11 算术运算符与算术表达式的项目(1 分离各位数) (2分离整数和小数部分) (3如何买玫瑰) (4玩数字) (5坐标转换)
- Lesson 11 算术运算符与算术表达式 实践项目:1-分离各位数 2-分离整数和小数部分 项目3-如何买玫瑰? 项目4-玩数字 项目5-坐标转换
- svn在linux下的使用(svn命令)
- 10.07
- C++中的static(引用)
- 继续摘抄:简易FTP 服务器设置
- conio.h
- 5:整数算术
- 如何载入一个图片,并将其作为Stage背景
- 做自己的系统分析师
- 国庆c语言日记(结构2)
- 继续摘抄: ubuntu9.04+vsftpd+mysql
- 余三码和8421码对比
- IT杂志面面谈
- SQL Server中的通配符
- Linux Bash Shell学习(四):编辑命令