汇编指令学习(待补充)
- mov 内存地址1:内存地址2。把地址上的数据从2赋值到1
- sub 。。。 数据1-数据2
- add 。。。 +
- inc 寄存器 让寄存器上的数据+1
- dw “define word” 定义字型数据
- and 逻辑与命令,按位进行与运算 可以通过该命令将相应为变为0,其他位不变
例如:
mov al,01100011b
and al,00111011b
执行后al=00100011b
- or 按位进行或运算 前面一个例子,如果是or的话为01111011b,可以通过该命令将相应位变为1,其他为不变
- db,字符型数据
- ptr word ptr,byte ptr ,确定是什么数据
- div 除法指令,被除数要比除数多8位,如果除数为8位,被除数为16位,除数为16位,被除数为32位,被除数可以用dx和ax存放
如果除数为8位,则用al储存商,ah储存余数,如果除数为16位,则用ax储存商,dx储存余数
例: div bl 这个就是除数为8位,默认被除数是ax
div bx 这个除数是16位,则要用dx和ax两个寄存器来储存被除数,先转为16进制,dx储存高位,ax储存低位
例 计算 100001/100
被除数大于65536,因此要用32位 寄存器,100001的16进制是186A1h
mov dx,1h
mov ax,86A1h
mov bx,100
div bx
- diwdw(这不是关键字,这是一个子程序) 进行不会产生除法溢出的运算,被除数为dword型,除数为word型,结果为dword型
参数: ax=dword 型数据低十六位
dx=高十六位
cx=除数
返回:dx=结果高十六位,ax=结果低十六位 cx=余数
原理(公式):x/n=int(h/n)65536+[rem(h/n)65536+l]/n
x:被除数 , n:除数 h :x高十六位 ,l :x低十六位,int():取商,例 int(38/10)=3,rem():取余数
- dd 双字型
- dup 用于数据的重复
- jmp 用于跳转
- jcxz 格式 jcxz 标号(如果cx=0,则跳转到标号处运行) 这是短指令
- ret 用栈数据修改ip
- retf 用栈数据修改cs和ip
- call 先把ip存入栈,再跳转
- call far ptr 先存 ip,再存cs,再跳转
- call word ptr 根据内存
- mul 乘法指令
- offset 获取标号的偏移地址
- adc 带进位加法指令
- sbb 带借位减法指令
- cmp 比较指令
- j… 例 je ja jb 带条件跳转指令
- movsb, movsw ,串传送指令
- rep 根据cx的值,重复执行串传送指令
- cld df=0
- std df=1
- pushf,将标志寄存器的值压入栈
- popf,将标志寄存器的值弹出栈
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment