32位汇编的位移指令和乘除指令
普通位移指令:
SAL OPRD,count 算数左移指令
SHL OPRD,count 逻辑左移指令(同上)
SAR OPRD,count 算数右移指令
SHR OPRD,count 逻辑右移指令
操作数OPRD可以是通用寄存器,也可以是储存单元,其尺寸可以是字节可以是字也可以是双字,count可以是一个8位立即数也可以是寄存器CL。
这些指令可以导致标志位CF受其影响。
SAL/SHL:
逻辑左移指令和算数左移指令是一样的,右边补0,左边一移出的最后一位补到CF中(移位指令工作时是用二进制形式移位)
SAR:
算数右移指令左边的符号位不变,右边最后一个移出的填入CF中。
SHR:
逻辑右移指令左边补0,右边移出最后一位填入CF中去。
循环位移指令:
ROL OPRD,count ;左循环移位指令
ROR OPRD,count ;右循环移位指令
RCL OPRD,count ;带进位的左循环位移指令
RCR OPRD,count ;带进位的右循环位移指令
ROL:
左循环移位指令是把操作数OPRD循环左移count位。每向左移一位,移出的最高有效位变成最低有效位同时变成CF
ROR:
右循环移位指令是把操作数OPRD循环右移count位。每向右移一位,移出的最低有效位变成最高有效位同时变成CF
RCL:
带进位的左循环位移指令是把CF加入循环中去,把最高有效位移入CF,而CF中数移入最低有效位中。
RCR:
带进位的右循环位移指令是把CF加入循环中去,把最低有效位移入CF,而CF中数移入最高有效位中。
32位汇编乘法指令:
一.mul
mul oprd
如果oprd是32位,则将其与eax相乘。将结果送到edx含高32位,eax含低32位
**
32位汇编除法指令:
一.div
div oprd
如果oprd是32位
则edx含有被除数高32位,eax含有被除数低32位
结果的商送到eax,结果的余数送到edx中
16位汇编乘法指令
一.mul
(1).8位的话,一个默认存放在AL中,另一个存放在8位寄存器或内存字节单元中
相乘的积:8位乘法默认存放在AX中
(2).若是16位,一个默认存放在AX中,另一个存放在16位寄存器或内存字单元中
相乘的积:高8位默认放在DX,低位放在AX
16位汇编除法指令
一.div
div除法指令分被除数是16位和32位。
(1).如果被除数是32位则除数为16位, 除数为16位,被除数存放在AX和DX中,AX低8位,DX高8位。
结果表示:AX存放商,DX存放余数。
(2).如果被除数是16位则除数为8位,被除数默认存放在AX中; 除数为8位,(16位最大表示65535)
结果表示:AL存放商AH存放余数。
注:
(1). 而且如果除数不足也要放置相应位数的寄存器中;
(2).32位汇编指令同时可以使用16位汇编指令