首页 > 编程语言 >三、常用汇编指令

三、常用汇编指令

时间:2024-10-30 12:00:14浏览次数:2  
标签:汇编 常用 al mov 指令 寄存器 ax bx

MOV指令

作用:数据移动

image

mov cx,ax		// 将ax寄存器中的值复制到cx寄存器中
mov dx,FFFF		// 将数据0xFFFF放到寄存器dx中
mov al,bh		// 将bx寄存器的高八位的数据复制到ax寄存器的低八位

image

image

NOP:空指令

指令、数据对齐可以有效地提高程序的性能, 使用 NOP 指令,可以使得指令按字对齐,从而提高效率 。

比如一条指令占用 3 个字节,再加上一个 NOP 指令,就使得指令 4 字节对齐了

运算指令

ADD指令:加

作用:加法

image

add ax,bx	// ax寄存器的值加上bx寄存器的值,结果放到ax寄存器中
add bx,ff	// bx寄存器的值加上0xff,结果放到bx寄存器中
add cl,11	// cx寄存器的低8位加上0x11,结果放到cx寄存器的低八位里面

image

注意:假设计算的结果超过了寄存器的位数时,多出来的高位会被舍弃。或者说当计算的值超过超过寄存器可容纳的最大值(16位寄存器最大值是0xFF)后,寄存器会从0开始计算(0xffff+1 = 0;0xffff+2 = 1)

例如:0xCDEF + 0xEFDD = 0x1BDCC

但是寄存器只会保留0xBDCC,如下图

image

只计算低八位的需要进位时,也不会向高位进位,会直接舍弃

SUB指令:减

作用:减法

image

注意:当被减数小于减数时,被减数会向前借位。或者说被减数被减到0x00后,再减就会变成0xff

示例:

sub ax,bx	// ax寄存器减去bx寄存器,结果放到ax寄存器中
sub bx,33	// bx寄存器减去0x33,结果放到bx寄存器中
sub cl,bh	// cx寄存器的低八位减去bx寄存器的高八位,结果放到cx寄存器的低八位

image

MUL指令:乘

作用:乘法

注意:

  1. 两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位reg或内存字单元中。

  2. 结果:如果是8位乘法,结果默认放在AX中:如果是16位乘法,结果高位默认在DX中存放,低位在AX中放。

示例:

  • 2个8位数相乘(小于255):0x64 * 0x0a = 0x03e8 (100 * 10)

    mov al,64	// ax寄存器低八位设置为0x64
    mov bx,a	// bx寄存器设置为0x0a
    mul bx		// bx寄存器的值乘以al寄存器的值,结果放到ax寄存器中
    

    image

  • 2个16位数相乘:0x03e8 * 0x03e8= 0xF4240 (1000*1000)

    mov ax,3e8	// ax寄存器设置为0x3e8
    mov bx,3e8	// bx寄存器设置为0x3e8
    mul bx		// ax的值乘以bx的值,结果的高16位放到dx,低16位放到ax
    

    image

DIV指令:除

作用:除法

注意:

  1. 除数:有8位和16位两种,在一个reg或内存单元中。
  2. 被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
  3. 结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数:如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

示例:

  • 8位除法:23 / 5 = 4 ... 3 (0x17 / 0x05)

    mov ax,17	// 设置被除数为0x17
    mov bl,5	// 设置除数为8位的0x05
    div bl		// 计算0x17 / 0x05。结果的商在al,余数在ah
    

    image

  • 16位除法:305419896 / 61166 = 4993 ... 18058 (0x12345678 / 0xEEEE)

    mov dx,1234		// 设置被除数的高16位
    mov ax,5678		// 设置被除数的低16位
    mov bx,eeee		// 设置除数
    div bx			// 相除。结果的商放在ax,余数放在dx
    

    image

AND指令:与

作用:按位与运算

示例:0x4f与0xef进行与运算

mov al,4f	
and al,fe	// al的值按位与0xfe,结果放到al中

image

OR指令:或

作用:按位或运算

示例:0xac与0x01进行或运算

mov al,ac
or al,01	// al的值按位或0x01,结果放到al中

image

SHL指令:左移

作用:普通左移,将最后移出的一位写入:CF中,低位补0

注意:如果移动的位数大于1,则必须将移动位数放到cl中

示例:

  • 移动一位

    0xffff左移一位

    mov ax,ffff
    shl ax,1		// ax的值左移一位,结果放到ax中
    

    image

  • 移动多位

    0xffff左移3位

    mov ax,ffff
    mov cl,3	// 要移动的位数大于1时,要放到cl中
    shl ax,cl	// ax的值左移3位,结果放到ax中
    

    image

SHR指令:右移

作用:普通右移,将最后移出的一位写入:CF中,高位补0

注意:如果移动的位数大于1,则必须将移动位数放到cl中

与左移同理,只不过移动的方向相反

ROL指令:不带进位的循环左移

作用:向左移,最后移出来的一位写入CF中,并且回到最低位

image

注意:如果移动的位数大于1,则必须将移动位数放到cl中

示例:

  • 0x80向左移动一位

    mov al,80	
    rol al,1	// al中的值循环左移一位,结果放到al中
    

    image

  • 0x80向左移动4位(交换高四位和第四位)

    mov al,80
    mvo cl,4	// 要移动的位数放到cl中
    rol al,cl	// al的值循环左移4次,结果放到al中
    

    image

ROR指令:不带进位的循环右移

作用:向右移,最后移出来的一位写入CF中,并且回到最高位

注意:如果移动的位数大于1,则必须将移动位数放到cl中

其他与循环左移同理

RCL指令:带进位的循环左移

作用:左移, 将CF位放到目标操作数的最左边,一起参与循环,从CF位移出去的数字循环回最低位

image

注意:如果移动的位数大于1,则必须将移动位数放到cl中

示例:

0x80带进位循环左移两次

mov al,80
rcl al,1
rcl al,1

image

RCR指令:带进位的循环右移

作用:右移,将CF位放到目标操作数的最右边,一起参与循环,从CF位移出去的数字循环回最高位

注意:如果移动的位数大于1,则必须将移动位数放到cl中

其他与带进位循环左移同理

NEG指令:求补

作用: 求补运算,即用零减去操作数,然后将结果返回给操作数。这个过程也可以理解为将操作数按位取反后再加1。NEG指令通常用于求一个数的相反数,也就是它的补码。

NEG指令的工作原理:

  • 按位取反加一:首先,将操作数转换为补码表示,然后按位取反,最后在末位加1。例如,如果操作数是正数64h(二进制0110 0100),按位取反后得到1001 1011,再加1得到1001 1100,即9ch,这就是-64h的补码表示。

  • 从运算角度:可以将NEG指令看作是0减去操作数的运算。例如,如果操作数是64h,那么neg al相当于0 - 64h = -64h。如果操作数是-8,那么neg al相当于0 - (-8) = 8。这种方法对于操作数为负数的情况更为简便,相当于直接求绝对值。

示例:对0xff08求补

mov ax,ff08
neg ax			// 对ax中的值求补,结果放到ax中

image

INC指令:自增

作用:自增

注意:超过最大值后会归零,或者说向前进了一位,但是进的位被舍弃了

示例:

mov al,fc
inc al		// al的值自增1,结果放到al中
inc al		// al的值自增1,结果放到al中

image

DEC指令:自减

作用:自减

注意:等于0后还减会等于最大值,或者说向前借了一位

示例:

mov al,01
dec al		// al的值自减1,结果放到al中
dec al		// al的值自减1,结果放到al中

image

XCHG指令:交换值

作用: 交换两个数据的内容

注意:

  • 不能交换两个内存操作数,只能寄存器与寄存器,寄存器与内存操作数。如果要交换两个内存操作数,需要用寄存器做临时容器,mov和xchg一起使用
  • 两个交换的数的大小必须一致,8位和8位交换,16位和16位交换,不能8位和16位交换

示例:交换ax和bx

mov ax,1111
mov bx,2222
xchg ax,bx		// 交换ax和bx

image

标签:汇编,常用,al,mov,指令,寄存器,ax,bx
From: https://www.cnblogs.com/liuhousheng/p/18515600

相关文章

  • 二、DEBUG模式及常用指令
    debug概述debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用他可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行debug的功能调试(Debug)的命令比较多,共有20多个,但这6个命令是和汇编学习密切相关的。在以后的实验中,我们还会用到一个P命令。......
  • Linux常用信息收集命令
    查看Linux系统内核信息uname-a查看Linux操作系统版本信息cat/proc/version查看Linux操作系统发行版信息lsb_release-acat/etc/issuecat/etc/redhat-release查看设备型号sudo/usr/sbin/dmidecode-ssystem-product-name查看CPU相关信息CPU数量:cat/pro......
  • 十五、PyTorch常用工具模块
      在训练神经网络过程中,需要用到很多工具,其中最重要的三部分是:数据、可视化和GPU加速。本章主要介绍Pytorch在这几方面的工具模块,合理使用这些工具能够极大地提高编码效率。1.1数据处理  在解决深度学习问题的过程中,往往需要花费大量的精力去处理数据,包括图像、文本、语音......
  • jenkins 常用shell
    1、发布前端shellip="192.168.31.33"port=22#前端打包后的包名dist_name="dist"#app的名字,app下有index.htmlapp_name="dist"#app所在的目录app_dir="/data/project/html/nmg-ibuilds-pc-visitor"#备份个数bak_count=3#备份目录bak_dir="/dat......
  • Linux基本指令(一)
    01ls指令语法:ls[选项][目录或文件]功能:罗列当前目录下的指定文件或目录常见选项-a(显示当前目录下的所有文件) -l(显示文件详情) -d(不进入文件里面)示例:ls-a ls-l ls-a-l(命令中的选项可以传递多个)以“.”开头的为隐藏文件,在加上-a后才可见  文件=......
  • 【APP测试】ADB安装、常用命令、monkey的使用及日志分析
    前言原生和混合在市场上区分原生、混合开发原生:是区分安卓(Andriod)和IOS(C语言)。1.一个app有两套代码,两个不同的岗位去完成的。2.性能会更好、兼容性也会好3.开发成本高、时间慢混合:原生+H5。一般可以实现一套代码生成安卓版本和iOS版......
  • 现在职业PHP 程序员通常用什么编程工具
    标题:现代职业PHP程序员通常使用的编程工具开头段落:现代职业PHP程序员通常使用的编程工具主要包括集成开发环境(IDE)、版本控制系统、调试工具、数据库管理工具、以及代码质量工具。这些工具共同构建了PHP开发的基础框架,使开发工作更加高效、组织化。特别地,集成开发环境(IDE)无疑是......
  • git常用命令
    提交代码:1、先去github创建一个仓库(Repositories),得到这个仓库地址,如:https://github.com/xxxx/htmlDemo.git2、在要上传的文件夹里面打开gitbash,按顺序执行①gitinit②gitremoteaddoriginhttps://github.com/xxxx/htmlDemo.git③gitadd.④gitcommit-m‘备注信......
  • MarkDown All in One插件预览与常用快捷键
    MarkDownAllinOne插件预览与常用快捷键预览实时预览:Ctrl+Shift+P调出主命令框,输入Markdown,应该会匹配到几项Markdown相关命令,选择Markdown:OpenPreviewtotheSide,就能调出实时预览框了。新窗口预览:Ctrl+Shift+V打开新窗口,加载md文件预览。常用快捷键......
  • 运维监控丨16条常用的Kafka看板监控配置与告警规则
    本期我们针对企业运维监控的场景,介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求,灵活调整和扩展这些监控配置及告警规则。在实际应用场景中,需要综合运用多种监控工具(例如Prometheus、Grafana、Zabbix等)和告警机制,以保障Kafka集群的稳定性和可靠性。此外,定期审核并......