汇编学习笔记——汇编指令

目录

汇编指令

nop指令

mov、add、sub指令

adc、sbb指令

and、or指令

移位指令

逻辑左/右移指令

循环左/右移指令

算术左/右移指令

带进位循环左/右移指令

inc指令

push、pop指令

pushf、popf指令

栈存储

栈原理

loop指令

word/byte ptr指令

div指令

mul指令

jmp指令

段内短转移

段内近转移

段间转移(远转移)

未定距离转移

条件转移指令

以CX寄存器为条件(jcxz)

以PSW寄存器为条件

cmp指令

cld、std、movsb、movsw指令

rep指令

call与ret指令

int与iret指令

in与out指令

指令操作规范

指令汇总

操作符汇总

书写规范

指向内容

任意常量


 

汇编指令

定义:有对应的机器码的指令,可以被编译为机器指令,最终被CPU执行。

 

nop指令

定义:用于占位的空指令,无任何效果,在指令书写处占用一个字节的内存空间

示例:nop指令在内存中的状态

PS:如上图所示,nop指令的机器码为90h,占用一个字节

 

mov、add、sub指令

定义:mov A,B 将B中的数据移入A;add A,B 将A与B相加的结果存入A;sub A,B 将A与B相减的结果存入A

示例1:mov与add指令对应到高级编程语言中

汇编学习笔记——汇编指令_第1张图片

PS:汇编指令不区分大小写,即MOV等效与mov

示例2:使用高低8位寄存器的情况下的指令执行结果

汇编学习笔记——汇编指令_第2张图片

PS:最后一条指令中,C5H与93H相加的结果为158,但因为al寄存器只能存储8位数据,因此最高位1因为数据溢出而被舍弃(因使用的是al寄存器进行独立运算,故该进位不会进入ah寄存器中

示例3:mov指令操作段寄存器

汇编学习笔记——汇编指令_第3张图片

PS1:如上图,mov指令不能修改段寄存器的内容为固定值(mov ds 2000或mov cs,0001),但可通过使用通用寄存器进行中转来实现这一过程(mov ax,2000 mov ds,ax)

PS2:mov、add指令操作固定地址的值时需要使用对内存寻址(mov 2000:1000,ffff或mov 2000:1000,ax或mov ax,2000:1000都是不成立的),具体方式见汇编学习笔记——寻址与存储对内存寻址部分

示例4:mov/add指令操作指令指针寄存器及add操作段寄存器

汇编学习笔记——汇编指令_第4张图片

PS:如上图,mov与add指令都无法以任何形式操作指令指针寄存器ip,且add指令无法以任何形式操作段寄存器的值(sub指令的特性与add指令的特性相同)

 

adc、sbb指令

定义:adc A,B 将A与B相加的结果加上PSW寄存器中的CF位后存入A;sub A,B 将A与B相减的结果减去上PSW寄存器中的CF位后存入A(关于PSW寄存器及CF位相关,见汇编学习笔记——寄存器的标志寄存器PSW部分)

示例1:编程计算1EF0001000H+2010001EF0H,将结果存放于ax(高16位),bx(次高16位),cx(低16位)中

汇编学习笔记——汇编指令_第5张图片

PS:如上图所示,先将最低16位相加,若有进位,则会将CF位置为1,再用adc将次高16位相加时便会加上该进位,最后使用adc将最高16位相加同理。adc指令因其将CF位加入计算的设计,可用于超大数据的相加运算

示例2:编程计算003E1000H-00202000H,将结果存放于ax(高16位),bx(低16位)中

汇编学习笔记——汇编指令_第6张图片

PS:如上图所示,先将低16位相减,若有借位,则会将CF位置为1,再用sbb将高16位相减时便会减去该借位sbb指令因其将CF位加入计算的设计,可用于超大数据的相减运算

示例3:使用adc指令进行超大数据相加

你可能感兴趣的:(汇编,学习笔记,基础,编程语言,汇编)