2017年春季汇编语言第七讲基础指令(二)-v10_第1页
2017年春季汇编语言第七讲基础指令(二)-v10_第2页
2017年春季汇编语言第七讲基础指令(二)-v10_第3页
2017年春季汇编语言第七讲基础指令(二)-v10_第4页
2017年春季汇编语言第七讲基础指令(二)-v10_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言第七讲基础指令(二)第七讲基础指令(二)一、移位指令二、乘除指令三、杂项指令四、字节指令五、程序实例一、移位指令SHL:逻辑左移SHR:逻辑右移SAL:算术左移SAR:算术右移SHLD:双精度左移SHRD:双精度右移SHL/SALSHL/SAL:逻辑左移/算术左移指令格式(Intel):SHLdest,count/SALdest,count语义:将dest操作数向左移动count位,CF位保存最后移出的一位,右侧低位补count个0标志位影响当count=0时,所有标志位不受影响当count>0时,CF位等于最后移出的一位,SF、ZF、PF根据移位结果设置,AF未定义当count=1时,如果移位前dest的最高2位相同,OF=0,否则OF=1;当count>1时,OF未定义SHL/SAL移位工作原理SHL/SAL指令基本格式指令格式(Intelsyntax)说明sal

r/m,18/16/32寄存器或内存单元左移1位sal

r/m,imm88/16/32寄存器或内存单元左移imm8位sal

r/m,cl8/16/32寄存器或内存单元左移,位数为cl寄存器的值shl

r/m,18/16/32寄存器或内存单元左移1位shl

r/m,imm88/16/32寄存器或内存单元左移imm8位shl

r/m,cl8/16/32寄存器或内存单元左移,位数为cl寄存器的值注意imm8或者cl寄存器的内容只使用低5位,即移位的位数是0~31左移操作相当于N次×2操作,N是移位位数SHRSHR:逻辑右移指令格式(Intel):SHRdest,count

语义:将dest操作数向右移动count位,CF位保存最后移出的一位,左侧高位补count个0标志位影响当count=0时,所有标志位不受影响当count>0时,CF位等于最后移出的一位,SF、ZF、PF根据移位结果设置,AF未定义当count=1时,OF=移位前dest的最高位;当count>1时,OF未定义SHR移位工作原理SHR指令基本格式指令格式(Intelsyntax)说明shr

r/m,18/16/32寄存器或内存单元逻辑右移1位shr

r/m,imm88/16/32寄存器或内存单元逻辑右移imm8位shr

r/m,cl8/16/32寄存器或内存单元逻辑右移,位数为cl寄存器的值注意imm8或者cl寄存器的内容只使用低5位,即移位的位数是0~31逻辑右移操作相当于无符号数的N次÷2操作,N是移位位数SARSAR:算术右移指令格式(Intel):SARdest,count

语义:将dest操作数向右移动count位,CF位保存最后移出的一位,左侧高位补count个原符号位标志位影响当count=0时,所有标志位不受影响当count>0时,CF位等于最后移出的一位,SF、ZF、PF根据移位结果设置,AF未定义当count=1时,OF=0;当count>1时,OF未定义SAR移位工作原理SAR指令基本格式指令格式(Intelsyntax)说明sar

r/m,18/16/32寄存器或内存单元算术右移1位sar

r/m,imm88/16/32寄存器或内存单元算术右移imm8位sar

r/m,cl8/16/32寄存器或内存单元算术右移,位数为cl寄存器的值注意imm8或者cl寄存器的内容只使用低5位,即移位的位数是0~31算术右移操作相当于有符号数的N次÷2操作,N是移位位数SHLDSHLD:双精度左移指令格式(Intel):SHLDdest,src,count语义:将dest操作数向左移动count位,CF位保存最后移出的一位,右侧低位补充来自src的count个高位标志位影响当count=0时,所有标志位不受影响当count>0时,CF位等于最后移出的一位,SF、ZF、PF根据移位结果设置,AF未定义当count=1时,如果移位前后dest的符号位发生变化,OF=1,否则OF=0;当count>1时,OF未定义SHLD移位工作原理另一个例子destsrc9BA6AC36Beforeshift:count=4BA6AAC36Aftershift:CFX1SHLD指令基本格式指令格式(Intelsyntax)说明shldr/m16,r16,imm816位寄存器或内存单元双精度左移imm8位shldr/m16,r16,cl16位寄存器或内存单元双精度左移,位数为cl寄存器的值shldr/m32,r32,imm832位寄存器或内存单元双精度左移imm8位shldr/m32,r32,cl32位寄存器或内存单元双精度左移,位数为cl寄存器的值注意imm8或者cl寄存器的内容只使用低5位,即移位的位数是0~31src操作数只能是寄存器SHRDSHRD:双精度右移指令格式(Intel):SHRDdest,src,count语义:将dest操作数向右移动count位,CF位保存最后移出的一位,左侧高位补充来自src的count个低位标志位影响当count=0时,所有标志位不受影响当count>0时,CF位等于最后移出的一位,SF、ZF、PF根据移位结果设置,AF未定义当count=1时,如果移位前后dest符号位发生变化,OF=1,否则OF=0;当count>1时,OF未定义SHRD移位工作原理另一个例子destCF234BXBeforeshift:count=442341Aftershift:src76547654SHRD指令基本格式指令格式(Intelsyntax)说明shrdr/m16,r16,imm816位寄存器或内存单元双精度右移imm8位shrdr/m16,r16,cl16位寄存器或内存单元双精度右移,位数为cl寄存器的值shrdr/m32,r32,imm832位寄存器或内存单元双精度右移imm8位shrdr/m32,r32,cl32位寄存器或内存单元双精度右移,位数为cl寄存器的值注意imm8或者cl寄存器的内容只使用低5位,即移位的位数是0~31Src操作数只能是寄存器SHLD/SHRD的AT&T指令格式shldx

count,src,destshrdx count,src,dest指令后缀x可要可不要因为src是寄存器,可确定指令的操作数大小指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……

ax=0xac19 eflags=[IF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]

ax=0x5832 eflags=[CFIFOF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]var=0x00000567eflags=[CFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]var=0x00000567eflags=[CFIF]eax=0x13579bdfeflags=[CFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]var=0x00000567eflags=[CFIF]eax=0x13579bdf eflags=[CFIF]eax=0x13579bdf var=0xf0000056 eflags=[PFSFIF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]var=0x00000567eflags=[CFIF]eax=0x13579bdf eflags=[CFIF]eax=0x13579bdf var=0xf0000056 eflags=[PFSFIF]var=0x001584d5eflags=[IF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]var=0x00000567eflags=[CFIF]eax=0x13579bdf eflags=[CFIF]eax=0x13579bdf var=0xf0000056 eflags=[PFSFIF]var=0x001584d5eflags=[IF]var=0x800ac26a eflags=[CFPFSFIFOF]指令示例(AT&T).section.data

var:.int0xafc05679.section.text.globl_start_start:

movw$0xac19,%ax

shlw$1,%ax

shrw$1,%ax

sal$5,%ax

sar$6,%ax

movb$10,%cl

shll%cl,var

movb$14,%cl

sarl%cl,var

movl$0x13579bdf,%eax

shrdl$4,%eax,var

shld%cl,%eax,var

shrd$33,%eax,var

sal$32,%eax

……ax=0xac19 eflags=[IF]ax=0x5832 eflags=[CFIFOF]ax=0x2c19 eflags=[IF]ax=0x8320 eflags=[CFSFIF]ax=0xfe0c eflags=[CFPFSFIF]var=0xafc05679 eflags=[CFPFSFIF]var=0x0159e400eflags=[CFPFIF]var=0x00000567eflags=[CFIF]eax=0x13579bdf eflags=[CFIF]eax=0x13579bdf var=0xf0000056 eflags=[PFSFIF]var=0x001584d5eflags=[IF]var=0x800ac26a eflags=[CFPFSFIFOF]eax=0x13579bdfeflags=[CFPFSFIFOF]未定义标志位

……

mov$0x7f,%aladd$1,%al

sal$5,%ax

…………eax=0x7f eflags=[IF]eax=0x80 eflags=[AFSFIFOF]eax=0x1000 eflags=[PFAFIFOF]……未定义标志位的行为不确定,不能使用!第七讲基础指令(二)一、移位指令二、乘除指令三、杂项指令四、字节指令五、程序实例二、乘除指令MULDIVIMULIDIVCBW/CWDECWD/CDQMULMUL:无符号数乘法指令格式(Intel):MULsrc语义:src与隐含操作数累加器(AL/AX/EAX)相乘,结果存放在(AX/DX:AX/EDX:EAX),其中高位部分存放在AH/DX/EDX标志位如果高位部分为0,CF=OF=0,否则,CF=OF=1SF、ZF、PF、AF未定义MUL指令基本格式指令格式(Intelsyntax)说明mulr/m88位无符号乘法,结果为16位(AX<-AL*r/m8)mulr/m1616位无符号乘法,结果为32位(DX:AX<-AX*r/m16)mulr/m3232位无符号乘法,结果为64位(EDX:EAX<-EAX*r/m32)注意乘法的结果存放在寄存器对中,AX相当于8位寄存器对AH:ALDIVDIV:无符号数除法指令格式(Intel):DIVsrc语义:隐含dest(AX/DX:AX/EDX:EAX)除以src,结果存放在dest(AH:AL/DX:AX/EDX:EAX),其中商放在低位寄存器,余数放在高位寄存器除法错例外(#DE)除数为0或者商的大小超过低位寄存器的大小标志位CF、OF、SF、ZF、PF、AF未定义DIV指令基本格式指令格式(Intelsyntax)说明divr/m88位无符号除法,AX÷r/m8(AL<-商,AH<-余数)divr/m1616位无符号除法,(DX:AX)÷r/m16(AX<-商,DX<-余数)divr/m3232位无符号除法,(EDX:EAX)÷r/m32(EAX<-商,EDX<-余数)注意8位除法被除数是16位,16位除法被除数是32位,32位除法被除数是64位当不能整除时,商的截取趋向0IMULIMUL:有符号数乘法指令格式(Intel)imul

srcimul

dest,srcimul

dest,src1,src2语义单操作数:

src与隐含操作数累加器(AL/AX/EAX)相乘,结果存放在(AX/DX:AX/EDX:EAX),其中高位部分存放在AH/DX/EDX双操作数:src与dest相乘,结果截断后存放dest三操作数:src1与src2相乘,结果截断后存放dest标志位SF=MSB(dest)ZF、PF、AF未定义对于单操作数,如果高位寄存器的内容不是低位寄存器结果的符号扩展,则CF=OF=1,否则CF=OF=0;对于双操作数/三操作数,如果中间计算结果不是dest存放结果的符号扩展,则CF=OF=1,否则CF=OF=0IMUL指令基本格式指令格式(Intelsyntax)说明imulr/m88位有符号乘法,结果为16位(AX<-AL*r/m8)imulr/m1616位有符号乘法,结果为32位(DX:AX<-AX*r/m16)imulr/m3232位有符号乘法,结果为64位(EDX:EAX<-EAX*r/m32)imulr16,r/m16r16<-r16*r/m16(16位有符号乘法,结果为16位)imulr32,r/m32r32<-r32*r/m32(32位有符号乘法,结果为32位)imulr16,r/m16,imm8r16<-r/m16*sign-extendedimm8(16位有符号乘法,结果为16位)imulr32,r/m32,imm8r32<-r/m32*sign-extendedimm8(32位有符号乘法,结果为32位)imulr16,r/m16,imm16r16<-r/m16*imm16(16位有符号乘法,结果为16位)imulr32,r/m32,imm32r32<-r/m32*imm32(32位有符号乘法,结果为32位)注意:dest操作数是寄存器IDIVIDIV:有符号数除法指令格式(Intel):IDIVsrc语义:隐含dest(AX/DX:AX/EDX:EAX)除以src,结果存放在dest(AH:AL/DX:AX/EDX:EAX),其中商放在低位寄存器,余数放在高位寄存器除法错例外(#DE)除数为0或者商的大小超过低位寄存器可表示的有符号数的大小标志位CF、OF、SF、ZF、PF、AF未定义IDIV指令基本格式指令格式(Intelsyntax)说明idivr/m88位有符号除法,AX÷r/m8(AL<-商,AH<-余数)idivr/m1616位有符号除法,(DX:AX)÷r/m16(AX<-商,DX<-余数)idivr/m3232位有符号除法,(EDX:EAX)÷r/m32(EAX<-商,EDX<-余数)注意8位除法被除数是16位,16位除法被除数是32位,32位除法被除数是64位当不能整除时,商的截取趋向0如-5÷3,商=-1,余数=-2CBWCBW:字节扩展为字指令格式(Intel):CBW语义:将隐含源操作数AL的字节数据符号扩展为隐含目的操作数AX的字数据AX<-signed-extend(AL)指令格式(AT&T):CBTWas汇编器也能正确识别CBWCWDECWDE:字扩展为双字指令格式(Intel):CWDE语义:将隐含源操作数AX的字数据符号扩展为隐含目的操作数EAX的双字数据EAX<-signed-extend(AX)指令格式(AT&T):CWTLas汇编器也能正确识别CWDECWDCWD:字扩展为双字指令格式(Intel):CWD语义:将隐含源操作数AX的字数据符号扩展为隐含目的操作数DX:AX的双字数据DX:AX<-signed-extend(AX)指令格式(AT&T):CWTDas汇编器也能正确识别CWDCDQCDQ:双字扩展为四字指令格式(Intel):CDQ语义:将隐含源操作数EAX的双字数据符号扩展为隐含目的操作数EDX:EAX的四字数据EDX:EAX<-signed-extend(EAX)指令格式(AT&T):CLTDas汇编器也能正确识别CDQmul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bldiv%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0xfcedx=0x0eflags=[IF]mul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bldiv%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0xfcedx=0x0eflags=[IF]eax=0x2f4edx=0x0eflags=[CFIFOF]mul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bl

div%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0x2f4edx=0x0eflags=[CFIFOF]eax=0x844edx=0x0eflags=[CFIFOF]mul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bldiv%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0x844edx=0x0eflags=[CFIFOF]eax=0xfffcedx=0x0eflags=[CFIFOF]mul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bldiv%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0xfffcedx=0x0eflags=[CFIFOF]eax=0xfff4edx=0xffffeflags=[IF]mul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bldiv%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0xfff4edx=0xffffeflags=[IF]eax=0x12345678edx=0xffffeflags=[IF]mul/div/imul指令示例(AT&T)#mul_div.S.section.datamultiplier:.int16.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

mul%bl

mov$11,%bldiv%bl

mov$0xfffc,%ax

mov$3,%bx

imul%bx

mov$0x12345678,%eax

imulmultiplier,%eax……eax=0x12345678edx=0xffffeflags=[IF]eax=0x23456780edx=0xffffeflags=[CFIFOF]idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0eax=0x102 edx=0x10idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0eax=0x102 edx=0x10eax=0x1234 edx=0x0idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0eax=0x102 edx=0x10eax=0x1234 edx=0x0eax=0xfffffefe edx=0x10idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0eax=0x102 edx=0x10eax=0x1234 edx=0x0eax=0xfffffefe edx=0x10eax=0xffffffe0 edx=0x10idiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0eax=0x102 edx=0x10eax=0x1234 edx=0x0eax=0xfffffefe edx=0x10eax=0xffffffe0 edx=0x10eax=0xffffffe0 edx=0xffffffffidiv/cbw指令示例(AT&T).section.datadivisor:.int-7.section.text.globl_start_start:

mov$0xfc,%al

mov$3,%bl

cbw

idiv%bl

mov$0x1234,%ax

mov$0x12,%cx

cwd

idiv%cx

mov$0x1234,%eax

mov$-0x12,%ecx

cdq

idiv%ecx

mov$-32,%eax

cltd

idivldivisoreax=0xfc edx=0x0eax=0xfffc edx=0x0eax=0xffff edx=0x0eax=0x1234 edx=0x0eax=0x102 edx=0x10eax=0x1234 edx=0x0eax=0xfffffefe edx=0x10eax=0xffffffe0 edx=0x10eax=0xffffffe0 edx=0xffffffffeax=0x4 edx=0xfffffffc第七讲基础指令(二)一、移位指令二、乘除指令三、杂项指令四、字节指令五、程序实例LEA指令LEA:装载有效地址指令格式(Intel):LEAdest,src语义:dest<-effectiveaddress(src),src是内存操作数,dest是寄存器操作数LEA指令常被用作计算指令LEA指令基本格式指令格式(Intelsyntax)说明lear16,mr16<-effectiveaddress(m)Effectiveaddress可以是16位或者32位lear32,mr32<-effective

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论