算术运算类指令
六个状态标志
1.进位标志CF (Carry Flag)
当加减运算结果的最高有效位进位或借位时,CF=1
进位标志是针对无符号整数运算设计的,反映无符号数据加减运算结果是否超出范围
2.溢出标志OF (Overflow Flag)
用于表达有符号整数进行加减运算的结果是否超出范围
3.零状态标志ZF (Zero Flag)
运算结果为0,ZF=1
4.符号标志SF (Sign Flag)
反映运算结果是正数还是负数,最高位的值是什么SF就是什么
5.奇偶标志PF (Parity Flag)
反映运算结果最低字节中1的个数是奇数还是偶数,是偶数(包括0)时,PF=1
6.调整表示AF (Adjust Flag)
反映加减运算时最低半字节有无进位或借位(一般不用 忽略掉)
加法指令
1加法指令ADD
add dest,src ;dest=dest+src
2.带进位加法指令ADC
adc dest,src ;dest=dest+src+CF
3.增量指令INC
inc edx ;edx自增1
减法指令
1.减法指令SUB
sub dest,src ;dest=dest-src
2.带借位减法指令SBB
sbb dest,src ;dest=dest-src-CF
3.减量指令DEC
dec eax ;eax自减1
大小写字母转换程序
; eg3.12.asm in Windows Console
include io32.inc
.data
msg byte ‘welcome’,0
.code
start:
mov ecx,(lengthof msg)-1
mov ebx,0
again:
sub msg[ebx],’a’-‘A’
inc ebx
loop again
mov eax,offset msg
call dispmsg
exit 0
end start
求补指令
NEG 它对操作数进行求补运算,即用0减去操作数,然后结果返回操作数
比较指令
CMP 它使目的操作数减去源操作数,差值不送回到目的操作数,但按照减法结果影响状态标志(后续会有应用)
乘法指令
mul 无符号数乘法
imul 有符号数乘法
指出源操作数,隐含目的操作数
若src是8位的数,则AL与src相乘得到16积,存入AX中;若src是16的数,则AX与src相乘得到32位积,高16位存入DX,低16位存入AX中;若src是32位的数,则EAX与src相乘,得到64的积,高32位存入EDX,低32位存入EAX中
除法指令
div
idiv
同乘法
(乘法除法大致了解 见到具体应用再详细添加)
零位扩展和符号扩展指令
mov al,82h ;AL=82H
movzx bx,al ;AL=82H 零位扩展 BX=0082H
movzx ebx,al ;AL=82H 零位扩展 EBX=00000082H
mov al,82h
movsx bx,al ;AL=82H 符号扩展 BX=FF82H
movsx ebx,al ;AL=82H 符号扩展 EBX=FFFFFF82H