当前位置:网站首页>汇编语言学习(十)常用指令总结
汇编语言学习(十)常用指令总结
2022-08-09 13:30:00 【目标是技术宅】
本部分为王爽《汇编语言》中涉及到的常用指令。
1.Debug中使用的命令
| 指令 | 功能 |
|---|---|
-a | 以汇编指令的形式向内存中写入指令。 |
-d | 查看内存当中的内容。 |
-e | 修改内存中的内容。 |
-g | 在Debug时,直接执行到 [输入的CS值]:[输入的IP值]所在位置。 |
-p | 在Debug时loop处用,自动重复执行循环中的指令;在int 21h处用,使程序自然结束。 |
-r | 查看、修改CPU中寄存器的内容。 |
-t | 执行CS:IP处的命令。 |
-u | 查看内存当中的内容,将其解释为机器指令和对应的汇编指令。 |
2.部分常用指令的含义
| 指令 | 含义 |
|---|---|
db/dw/dd | 定义大小为1个字节、1个字单元、两个字单元的数据 |
inc bx | 使bx自增 |
mov al,[0] | Debug将[0]解释为内存单元,编译器masm将其解释为(al) = 0 |
div | 除数:可以为8位或者16位,存在reg或者内存单元中。 |
| 被除数:除数为8位,被除数为16位存在AX ;若除数为16位,则被除数为32位,高位在DX,低位在AX。 | |
| 结果:除数为8位,则商在AL,余数在AH;除数为16位,商在AX,余数在DX。 | |
mul | 两个相乘的数:全为8位,或者全为16位。 |
| 若8位,一个默认在AL中,另一个在8位reg或内存单元中;16位,一个默认在AX,另一个在16位寄存器或内存。 | |
| 结果:8位乘法,结果放在AX中;16位,高位在DX中,低位在AX中。 | |
dup | db/dw/dd 重复的次数 dup (重复的相应类型的数据) |
offset | 功能是取得标号的偏移地址。start: mov ax,offset start |
3.寻址相关指令
| 寻址方式 | 名称 | 含义 |
|---|---|---|
[idata] | 直接寻址 | 用一个常量表示地址,直接定位一个内存单元 |
[bx] | 寄存器间接寻址 | 用一个变量表示地址,间接定位一个内存单元 |
[bx + idata] | 寄存器相对寻址 | 用一个变量和一个常量表示地址,可在起始地址的基础上用变量间接定位一个内存单元 |
[bx + si] | 基址变址寻址 | 用两个变量表示地址 |
[bx + si + idata] | 相对基址变址寻址 | 用两个变量和一个常量表示地址 |
只有[bx]、[bp]、[si]、[di]这四个寄存器可以用来进行内存单元的寻址。
这四个寄存器要么单独出现,要么以以下四种组合形式出现:
[bp+si]、[bp+di]、[bx+si]、[bx+di]
4.转移指令
| 转移指令 | 特点 | 功能 |
|---|---|---|
jmp short 标号 | 段内短转移:依据位移进行转移 | (IP)=(IP)+8位位移 |
jmp near ptr 标号 | 段内近转移:依据位移进行转移 | (IP)=(IP)+16位位移 |
jmp far ptr 标号 | 段间(远)转移:转移目的地址在指令中 | (CS:IP)标号在段中地址 |
jmp 16位reg | 后加寄存器 | (IP)=(16位reg) |
jmp word ptr 内存单元地址 | 段内转移:后加内存单元地址 | (IP)等于内存单元数据 |
jmp dword ptr 内存单元地址 | 段间转移:后加内存单元地址 | (CS:IP)等于内存单元数据 |
jcxz 标号 | 短转移,依据位移,cx不为0向下执行 | cx=0,则(IP)=(IP)+8位位移 |
loop 标号 | 短转移,依据位移进行转移 | cx减1,cx不为零跳到标号处执行 |
| call和ret | 特点 | 功能类似于汇编指令 |
|---|---|---|
ret | 用栈中数据修改IP,近转移 | pop IP |
retf | 用栈中数据修改CS和IP,远转移 | pop IP | pop CS |
call 标号 | 转到标号处执行,依据位移转移 | push IP | jmp near ptr 标号 |
call far ptr 标号 | 转到标号处执行,实现段间转移 | push CS|push IP|jump far ptr 标号 |
call 16位reg | 转移地址在寄存器 | push IP | jump 16位reg |
call word ptr 内存地址 | 转移地址在内存 | push IP|jump word ptr 内存 |
call dword ptr 内存地址 | 转移地址在内存 | push CS|push IP|jmp dword ptr 内存 |
5.寄存器标志及寄存器相关指令
8086CPU的flag寄存器结构:
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| OF | DF | IF | TF | SF | ZF | AF | PF | CF |
| 标志 | |
|---|---|
| ZF零标志位 | 运算结果为0,ZF为1 |
| PF奇偶标志位 | 运算结果所有比特位中1的个数为偶数,PF为1 |
| SF标志位 | 运算结果为负数,SF为1。注意SF取值时是将数据视作有符号数的。 |
| CF进位标志位 | 无符号数运算,结果中有最高有效位向更高位的进位或借位,CF为1 |
| OF标志位 | 有符号数运算,如果出现溢出,则OF为1 |
| DF方向标志位 | 串处理指令中,控制每次操作后si、di的增减。DF=0,递增。DF=1,递减。 |
1.SF取值举例:
mov ax,10000001B
add ax,1
执行后SF为1。表示,如果进行的是有符号数的运算,则结果为负。
mov ax,10000001B
add ax,01111111B
执行后SF为0。表示,如果进行的是有符号数的运算,则结果为正。2.取值举例:
sub al,al CF OF SF ZF PF
mov al,7DH
add al,0BH 0 1 1 0 1Debug中对已知标志位的表示:
| 标志 | 值为1的标记 | 值为0的标记 |
|---|---|---|
| of | OV | NV |
| sf | NG | PL |
| zf | ZR | NZ |
| pf | PE | PO |
| cf | CY | NC |
| df | DN | UP |
| 标志位相关指令 | 功能 |
|---|---|
adc进位加法指令 | 操作对象1=操作对象1+操作对象2+CF |
sbb借位减法指令 | 操作对象1=操作对象1-操作对象2-CF |
cmp比较指令 | 计算操作对象1-操作对象2,影响标志位,不保存结果。 |
判断无符号数大小,结合ZF和CF标志寄存器看 | |
判断有符号数大小,结合ZF和OF以及SF标志寄存器看 | |
rep movsb | 将ds:si指向内存单元的字节送入es:di中,根据DF值si和di递增或递减1。 |
rep movsw | 一次传送一个字单元,递增或递减2。 |
cld | 将DF位置0 |
std | 将DF位置1 |
pushf | 将标志寄存器的值压栈 |
popf | 出栈,将栈中的值赋给标志寄存器 |
| 与cmp配合的转移指令 | 含义 | 检测标志位 |
|---|---|---|
je | 等于则转移 | zf=1 |
jne | 不等于则转移 | zf=0 |
jb | 低于则转移 | cf=1 |
jnb | 不低于则转移 | cf=0 |
ja | 高于则转移 | cf=0且zf=0 |
jna | 不高于则转移 | cf=1或zf=1 |
6.逻辑左移和右移:
shl是逻辑左移指令,功能为:
(1)将一个寄存器或内存单元中的数据向左移位
(2)将最后移出的一位写入CF中
(3)最低位补0
shl al,1
移动位数大于1,则必须将移动位数放在cl中。
shr是逻辑右移指令。
边栏推荐
猜你喜欢
随机推荐
typeorm 批量插入数据优化和插入冲突操作
蓝桥杯嵌入式(STM32F103RBT6)最全攻略(一)
Mysql seven connection query methods
Jetpack Compose——TextField及OutlinedTextField(文本框)的使用
华为ensp静态路由、DHCP
KMP方法
vs how to use a Button to link to another page
C语言 指针的解引用详解
响应式pbootcms模板家禽饲养类网站
激光器如何养护才能远离结露没烦恼
Mysql的七种连接查询方法
几种常见路由类型及其优先级
Es7.x使用RestHighLevelClient进行查询操作
易语言获取cookie
Badge of openharmony container components
去IOE-EBS何去何从
Flex for openharmony container components
idea安装
The use of Jetpack Compose - Button (Button)
探索快八年,谁挡住了小红书的电商梦?









