dx汇编dec_汇编语⾔——汇编指令
mov
功能:⽤来进⾏数据传输。
以 “mov A, B”为例,相当于A=B。
具有以下形式:mov 寄存器, 数据;mov 寄存器, 寄存器;mov 寄存器, 内存单元;mov 内存单元, 寄存器;mov 段寄存器,寄存器;add
功能:⽤来做加法。
以“add A, B”为例,相当于A=A+B。
具有的形式,和 mov ⼀样。
sub
功能:⽤来做减法。
以“sub A, B”为例,相当于A=A-B。
汇编语言结束指令具有的形式,和 mov ⼀样。
inc,dec
功能:⽤来⾃增,⾃减
以“inc A”为例,相当于A=A+1。
以“dec A”为例,相当于A=A-1。
push
功能:⼊栈
以“push A”为例,⼤概相当于:SP=SP-2 ;将A中的内容送⼊SS:SP指向的内存单元处。
具有以下形式:push 寄存器;push 内存单元;push 段寄存器
pop
功能:出栈
以“pop A”为例,⼤概相当于:将SS:SP指向的内存单元处的数据送⼊A中;SP=SP+2。
具有形式和push相同
Loop
功能:实现基于cx的循环功能
以“loop S“为例,⼤概相当于:cx=cx-1,判断cx中的值,不为0则转⾄标号处执⾏程序。
and
功能:逻辑与指令,按位进⾏与运算。
通过该指令可将操作对象的相应位设置为0,其他位不变。
or
功能:逻辑或指令,按位进⾏或运算。
通过该指令可将操作对象的相应位设置为1,其他位不变。
mul
功能:乘法指令
当乘数是字节操作数时,把AL中的⽆符号数与乘数相乘,结果16位放⼊AX中
当乘数是字操作数时,把AX中的⽆符号数与乘数相乘,结果32位,⾼位放⼊DX中,低位放⼊AX中。
div
功能:除法指令
除数:有8位和16位两种,在⼀个reg或内存单元中。
被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX 和AX中存放,DX存放⾼16位,AX存放低16位。
结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
jmp
1. 依据位移进⾏转移的 jmp 指令:
(1) jmp short 标号
这种 jmp指令实现的是段内短转移,它对IP的修改范围为 -128-127 。
实际上,“jmp short 标号”的功能为:(IP)=(IP)+8位位移
8位位移=标号处的地址-jmp指令后的第⼀个字节的地址。
short指明此处的位移为8位位移。
8位位移⽤补码表⽰。
8位位移由编译程序在编译时算出。
(2)jmp near ptr 标号
这种 jmp 指令实现的是段内近转移。
实际上,“jmp near 标号”的功能为:(IP)=(IP)+16位位移
2. 转移的⽬的地址在指令中的 jmp 指令
jmp far ptr 标号 实现的是段间转移,⼜称为远转移。
功能:(CS)= 标号所在段的段地址,(IP)= 标号所在段中的偏移地址
3. 转移地址在寄存器中的 jmp 指令
指令格式:jmp 16位 reg
功能:(IP)=(16位reg)
4.转移地址在内存单元中的 jmp 指令
(1)jmp word ptr 内存单元地址
功能:从内存单元地址处开始存放着⼀个字,是转移的⽬的偏移地址。
(2)jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字,⾼地址处的字是转移的⽬的地址,低地址处是转移的⽬的偏移地址。
jcxz(jump if cx = zero)
指令格式:jcxz 标号
操作:当 cx=0 时,(IP)=(IP)+8位位移
ret
ret指令⽤栈中的数据,修改IP的内容,从⽽实现近转移;
CPU执⾏ ret 指令时,进⾏下⾯两步操作:
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+ 2
retf
retf指令⽤栈中的数据,修改CS和IP的内容,从⽽实现远转移;CPU执⾏ retf 指令时,进⾏下⾯4步操作:
(1)(IP)=((ss)*16 + (sp))
(2)(sp)=(sp)+ 2
(3)(CS)=((ss)*16 + (sp))
(4)(sp)=(sp)+ 2
call
⼀. 依据位移进⾏转移的call指令
1. call 标号(将当前的 IP 压栈后,转到标号处执⾏指令)
CPU执⾏这种格式的call指令后,进⾏如下的操作:
(1)(sp)=(sp)- 2
((ss)* 16 +(sp))=(IP)
(2)(IP)=(IP)+ 16位位移
⼆. 转移的⽬的地址在指令中的call指令
1. call far ptr 标号
CPU执⾏此种格式的call指令时,进⾏如下的操作:
(1)(sp)=(sp)- 2
((ss)*16 + (sp))=(CS)
(sp)=(sp)- 2
((ss)*16 + (sp))=(IP)
(2)(CS)=标号所在段的段地址
(IP)=标号在段中的偏移地址
三. 转移地址在寄存器中的call指令
call 16位 reg
功能:
(sp)=(sp)- 2
((ss)*16 +(sp))=(IP)
(IP)=(reg)
四. 转移地址在内存中的call指令
1. call word ptr 内存单元地址
功能:
push IP
jmp word ptr 内存单元地址
2. call dwordd ptr 内存单元地址
功能:
push CS
push IP
jmp dword ptr 内存单元地址
adc
adc是带进位加法指令,它利⽤了CF位上记录的进位值。
指令格式:adc 操作对象1,操作对象2
功能:操作对象1=操作对象1+操作对象2+CF
sbb
sbb是带借位减法指令,它利⽤了CF位上记录的借位值。
指令格式:sbb 操作对象1,操作对象2
功能:操作对象1=操作对象1-操作对象2-CF
cmp
cmp是⽐较指令,cmp的功能相当于减法指令,只是不保存结果,关键作⽤是对标志寄存器的影响。指令格式:cmp 操作对象1,操作对象2
功能:计算操作对象1-操作对象2但不保存结果,仅仅根据计算结果对标志寄存器进⾏设置。
检测⽐较结果的条件转移指令
指令
含义
检测的相关标志位
je
等于则跳转
zf=1
jne
不等于则跳转
zf=0
jb
⼩于则跳转
cf=1
jnb
不⼩于则跳转
cf=0
ja
⼤于则跳转
cf=0且zf=0
jna
不⼤于则跳转
cf=1且zf=1
movsb
格式:movsb
功能:将ds:si指向的内存单元中的字节送⼊es:di中,然后根据df的值,将si和di递增1或递减1。
执⾏movsb指令相于进⾏下⾯⼏步操作
(1)((es)*16+(di))=((ds)*16+(si))
(2)如果df=0则:(si)=(si)+ 1;(di)=(di)+ 1
如果df=1则:(si)=(si)- 1;(di)=(di)- 1
movsw
格式:movsw
功能:将ds:si指向的内存字单元中的字送⼊es:di中,然后根据标志寄存器df的值,将si和di递增2或递减2 。rep
⼀般和movsb,movsw联动
功能:rep的作⽤是根据cx的值,重复执⾏后⾯的串传送指令。
pushf ,popf
pushf的功能是将标志寄存器的值压栈,popf的功能是从栈中弹出数据,放⼊标志寄存器中。
int
功能:引发中断过程。
指令格式:int n (n为中断类型码)
cpu执⾏int n指令,相当于引发⼀个n号中断的中断过程,执⾏过程如下。
(1)取中断类型码n;
(2)标志寄存器⼊栈,IF=0,TF=0;
(3)CS、IP⼊栈;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论