提问与回顾
第五章内容中我们介绍并练习了外部链接库中的一些常用过程
调用这些过程使用什么指令?
在逻辑运算部分内容中
AND指令用于进行逻辑与运算,但他在改变标志位的同时也改变了目的操作数,什么指令能够实现逻辑与运算功能但只改变标志位而不改变操作数?
同样,哪条指令与SUB类似但只改变标志位?
该条指令比较后,如相等则跳转,应使用什么指令?
尝试将下面的为指令转化成为汇编代码和决策伪指令
1
if (bx > cx) X=1;
提问与回顾…
SHL(Shift Left),逻辑左移操作
最低位以0填充,最高位传送到CF中
SHR(Shift Right),逻辑右移操作
最高位以0填充,最低位传送到CF中
左移和右移的意义:乘法和除法
逻辑移位
2
B7
B6
B5
B4
B3
B2
B1
B0
0
SHL/SHR
reg, imm8
mem, imm8
reg, CL
mem, CL
B7
B6
B4
B3
B2
B1
B0
CF
B5
mov al, 0D0h
AL = 1101 0000b
CF
0
shr al, 1
AL = 0110 1000b
CF = 1
Section 1…
逻辑移位
课堂练习题目——位串分离
如果需要从一个字或者字节中的特定区域提取一系列位,这些位称为位串
例如文件的时间戳(文件最后访问时间)的分离
3
Section 1…
0
0
1
0
0
1
1
0
0
1
1
0
1
0
1
0
DH
DL
year
month
day
mov al, dl
and al, 01Fh
mov day, al
mov ax, dx
shr ax, 5
and al, 0Fh
mov month, al
mov al, dh
shr al, 1
and ah, 0h
add ax, 1980
mov year, ax
SAL(Shift Arithmetic Left),算术左移操作
最低位以0填充,最高位传送到CF中,同SHL
SAR(Shift Arithmetic Right),算术右移操作
最高位以自身填充,最低位传送到CF中
右移的算术意义:有符号数除法
算术移位
4
B7
B6
B5
B4
B3
B2
B1
B0
0
SAL/SAR
reg, imm8
mem, imm8
reg, CL
mem, CL
B7
B6
B4
B3
B2
B1
B0
CF
B5
mov al, -128
AL = 1000 0000b
CF
sar al, 4
AL = 1111 1000b
Section 1…
ROL(Rotate Left),循环左移操作
最低位以最高位填充,最高位传送到CF中
ROR(Rotate Right),循环右移操作
最高位以最低位填充,最低位传送到CF中
循环移位不丢弃数据
可用来将特定的位移入CF中
循环移位
5
B7
B6
B5
B4
B3
B2
B1
B0
ROL/ROR
reg, imm8
mem, imm8
reg, CL
mem, CL
B7
B6
B4
B3
B2
B1
B0
CF
B5
CF
Section 1…
SHLD(Shift Left Double),双精度左移操作
目的操作数向左移指定位数
空位用源操作数的高位填充
源操作数不会有任何改变
SHRD(Shift Right Double)
目的操作数向右移指定位数
空位用源操作数的低位填充
源操作数不会有任何改变
双精度移位
6
1001
SHLD/SHLR
reg16, reg16, CL/imm8
mem16,reg16, CL/imm8
reg32, reg32, CL/imm8
mem32,reg32, CL/imm8
Section 1…
1011
1010
0110
1001
1011
1010
0110
bx
ax
mov bx, 9BA6h
mov ax, 0AC36h
shld bx, ax, 4
乘法指令
MUL无符号数乘法指令
8位、16位或32位被乘数依次为AL、AX或EAX
对应的乘数可以是尺寸相等的寄存器或内存
对应结果保存在AX、DX:AX、EDX:EAX中
CF标值位的影响
高半部分如果不为0则CF位置位
汇编语言程序设计06整数运算指令与高级过程 来自淘豆网m.daumloan.com转载请标明出处.