asm:常见指令大全

这篇具有很好参考价值的文章主要介绍了asm:常见指令大全。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算数指令

INC 指令

INC的全称是Increment,表示“增加”、“递增”的意思。
INC 指令用于将操作数加 1。它对可以在寄存器或内存中的单个操作数起作用。

INC 指令的语法如下:

INC destination
目标操作数 可以是 8 位,16 位或 32 位操作数。
实例
INC EBX      ; 32 位寄存器 自增 1
INC DL       ; 8 位寄存器 自增 1
INC [count]  ; 变量 count 自增 1

DEC 指令

DEC的全称是Decrement,表示“减少”、“递减”的意思
DEC 指令用于将操作数减 1。它对可以在寄存器或内存中的单个操作数起作用。

DEC 指令的语法如下:

DEC destination
目标操作数 可以是 8 位,16 位或 32 位操作数。
实例
INC EBX      ; 32 位寄存器 自增 1
INC DL       ; 8 位寄存器 自增 1
INC [count]  ; 变量 count 自增 1

ADD 指令

用于将两个操作数相加并将结果存储到一个目标操作数中。ADD指令的语法和功能如下:

ADD destination, source

其中,destination表示目标操作数,可以是一个寄存器或内存地址;source表示源操作数,可以是一个立即数、寄存器或内存地址。ADD指令将目标操作数和源操作数相加,并将结果存储到目标操作数中。

例如,以下汇编代码使用ADD指令将寄存器AX和BX中的值相加,并将结果存储到AX寄存器中:

MOV AX, 10   ; 将立即数10存储到AX寄存器中
MOV BX, 20   ; 将立即数20存储到BX寄存器中
ADD AX, BX   ; 将AX寄存器和BX寄存器中的值相加,结果存储到AX寄存器中

注意:目标操作数和源操作数不能同时为内存地址

在执行ADD指令时,需要注意以下几点:

  1. 目标操作数和源操作数的数据类型必须相同。例如,如果目标操作数是一个字节(8位),则源操作数也必须是一个字节。
  2. 如果源操作数是一个内存地址,则需要使用方括号将其括起来。例如,ADD AX, [BX]表示将AX寄存器和BX寄存器指向的内存地址中的值相加。
  3. ADD指令可能会产生进位(carry),因此需要根据具体情况进行处理。例如,在进行无符号整数加法时,如果结果超出了目标操作数的范围,则会发生进位。

SUB指令

SUB指令用于将两个操作数相减,并将结果存储到一个目标操作数中。其余与ADD类似。

MUL指令

MUL指令是一种汇编语言中的算术指令,用于将两个操作数相乘,并将结果存储在一个目标操作数中。MUL指令的格式如下:

MUL destination

其中,destination表示目标操作数,可以是一个寄存器、立即数或内存地址。具体描述如下:

  • 如果 destination 是一个寄存器,则 MUL 指令将 AX 寄存器中的值与该寄存器中的值相乘,并将结果存储在 DX:AX 寄存器中。例如,执行 MUL BX 将计算 AX * BX,并将结果存储在 DX:AX 中。
  • 如果 destination 是一个内存地址,则需要使用方括号将其括起来。MUL 指令将 AX 寄存器中的值与该内存地址中的值相乘,并将结果存储在 DX:AX 寄存器中。例如,执行 MUL [BX] 将计算 AX * (数据段中 BX 指向的地址处的值) 并将结果存储在 DX:AX 中。
  • 如果 destination 是一个立即数,则必须是一个无符号整数,并且大小必须与 AX 寄存器的大小匹配。MUL 指令将 AX 寄存器中的值与该立即数相乘,并将结果存储在 DX:AX 寄存器中。例如,执行 MUL 5 将计算 AX * 5 并将结果存储在 DX:AX 中。

需要注意的是,在执行 MUL 指令之前,如果 DX 寄存器中有值,则需要将其清零,以避免出现错误的结果。可以使用 XOR 指令将 DX 寄存器清零,例如 XOR DX, DX

另外,由于 MUL 指令是一种无符号整数乘法指令,因此不能用于执行有符号整数乘法运算,否则会产生错误的结果。

IMUL指令

IMUL是一种汇编指令,用于执行有符号整数乘法运算。它可以将两个操作数相乘,并将结果存储在一个目标操作数中。IMUL指令的语法格式如下:

IMUL destination, source

其中,destination表示目标操作数,可以是一个寄存器、内存地址或立即数;source表示源操作数,可以是一个寄存器、内存地址或立即数。具体来说:

  • 如果 destination 是一个寄存器,则 IMUL 指令将该寄存器中的值与 source 中的值相乘,并将结果存储在 destination 中。例如,执行 IMUL BX, AX 将计算 BX = BX * AX 并将结果存储在 BX 中。
  • 如果 destination 是一个内存地址,则需要使用方括号将其括起来。IMUL 指令将该内存地址中的值与 source 中的值相乘,并将结果存储在该内存地址中。例如,执行 IMUL [BX], 5 将计算 (数据段中 BX 指向的地址处的值) * 5 并将结果存储在该地址中。
  • 如果 destination 是一个立即数,则必须是一个有符号整数,并且大小必须与 source 的大小匹配。IMUL 指令将该立即数与 source 相乘,并将结果存储在 source 中。例如,执行 IMUL AX, -5 将计算 AX = AX * (-5) 并将结果存储在 AX 中。

同MUL指令一样,在执行 IMUL 指令之前,如果 DX 寄存器中有值,则需要使用同样的方法将其清零。

另外,由于 IMUL 指令是一种有符号整数乘法指令,因此可以用于执行有符号整数乘法运算。IMUL 指令会对结果进行符号扩展,以保留正确的符号位。例如,如果执行 IMUL AX, -2,则会将 AX 寄存器中的值乘以 -2,并将结果存储在 AX 中。如果 AX 中的值为 1000(二进制表示),则结果为 1111 1111 1111 0000(二进制表示)。

在执行 IMUL 指令时,还需要注意以下几点:

  1. 目标操作数和源操作数必须是同样大小的有符号整数。
  2. 如果源操作数是一个立即数,则必须是一个有符号整数,并且大小必须与目标操作数匹配。
  3. 如果操作数是一个内存地址,则需要使用方括号将其括起来。例如,IMUL [BX], 5表示将数据段中 BX 指向的地址处的值乘以5。
  4. 在执行IMUL指令之前,必须将高位清零,否则可能会导致错误的结果。可以使用XOR指令将DX寄存器清零:XOR DX, DX

DIV指令

DIV指令是x86汇编语言中的一种算术指令,用于执行无符号整数除法操作。根据被除数和除数的数据类型不同,DIV指令有三种格式:

  1. DIV r/m8指令:将一个16位或32位的无符号整数除以一个8位的无符号整数,并返回商和余数。其语法格式如下:
DIV r/m8

其中,r/m8可以是寄存器或内存地址,指定了除数。被除数需要存储在AX(16位)或DX:AX(32位)寄存器中。

例如,下面的代码演示了使用DIV r/m8指令将16位整数bx除以8位整数al,并将商存储在ax寄存器中,余数存储在dx寄存器中:

MOV AX, BX    ; 将BX复制到AX中
MOV DX, 0     ; 初值化DX为0
MOV AL, 10    ; 将10存储到AL中
DIV AL        ; 将AX除以AL,商存储在AX中,余数存储在DX中
  1. DIV r/m16指令:将一个32位的无符号整数除以一个16位的无符号整数,并返回商和余数。其语法格式如下:
DIV r/m16

其中,r/m16可以是寄存器或内存地址,指定了除数。被除数需要存储在DX:AX寄存器中。

例如,下面的代码演示了使用DIV r/m16指令将32位整数num除以16位整数divisor,并将商存储在ax寄存器中,余数存储在dx寄存器中:

MOV EAX, num      ; 将num复制到EAX中
MOV EDX, 0        ; 初值化EDX为0
MOV BX, divisor   ; 将divisor复制到BX中
DIV BX            ; 将EAX除以BX,商存储在AX中,余数存储在DX中
  1. DIV r/m32指令:将一个64位的无符号整数除以一个32位的无符号整数,并返回商和余数。其语法格式如下:
DIV r/m32

其中,r/m32可以是寄存器或内存地址,指定了除数。被除数需要存储在EDX:EAX寄存器中。

例如,下面的代码演示了使用DIV r/m32指令将64位整数num除以32位整数divisor,并将商存储在eax寄存器中,余数存储在edx寄存器中:

MOV EAX, DWORD PTR [num + 4]   ; 将num的高32位复制到EAX中
MOV EDX, DWORD PTR [num]       ; 将num的低32位复制到EDX中
MOV EBX, divisor               ; 将divisor复制到EBX中
DIV EBX                        ; 将EDX:EAX除以EBX,商存储在EAX中,余数存储在EDX中

需要注意的是,如果除数为0,则会产生“divide by zero”异常。因此,在使用DIV指令进行除法操作时,需要确保除数是非零的。

IDIV指令

与DIV指令操作和原理一致。

逻辑指令

AND指令

AND指令是x86架构中的一种汇编指令,用于执行按位与(bitwise and)操作。其语法格式为:

AND destination, source

其中,destination和source都可以是寄存器或内存地址。执行完毕后,将destination和source进行按位与(bitwise and)操作,并将结果存储到destination中。

下面是一些AND指令的示例:

  1. 按位与两个寄存器

    MOV AX, 0FF00h     ; 将0FF00h存储到AX寄存器中
    AND AX, 0F00h      ; 将AX寄存器中的值与0F00h按位与,并将结果存储回AX寄存器中
    

    这个示例将AX寄存器中的高字节清零,只保留了低字节中的高4位。

  2. 按位与一个寄存器和一个内存地址

    MOV EBX, [ESI]     ; 将ESI地址处存储的值读取到EBX寄存器中
    AND EBX, 0FFh      ; 将EBX寄存器中的值与0FFh按位与,并将结果存储回EBX寄存器中
    

    这个示例将EBX寄存器中的值的高字节清零,只保留了低字节中的8位。

  3. 按位与两个内存地址

    MOV EDI, OFFSET array1   ; 将array1的内存地址存储到EDI寄存器中
    MOV ESI, OFFSET array2   ; 将array2的内存地址存储到ESI寄存器中
    AND DWORD PTR [EDI], DWORD PTR [ESI]  ; 将array1和array2中相同偏移量处的值按位与,并将结果存储回array1中
    

    这个示例将array1数组中相同偏移量处的值与array2数组中相同偏移量处的值进行按位与操作,并将结果存储回array1数组中相同偏移量处的位置。

OR指令

OR指令是x86架构中的一种汇编指令,用于执行按位或(bitwise or)操作。其语法格式为:

OR destination, source

其中,destination和source都可以是寄存器或内存地址。执行完毕后,将destination和source进行按位或(bitwise or)操作,并将结果存储到destination中。

下面是一些OR指令的示例:

  1. 按位或两个寄存器

    MOV AX, 0F0Fh     ; 将0F0Fh存储到AX寄存器中
    OR AX, 00FFh      ; 将AX寄存器中的值与00FFh按位或,并将结果存储回AX寄存器中
    

    这个示例将AX寄存器中的低字节设置为0xFF,而不影响高字节。

  2. 按位或一个寄存器和一个内存地址

    MOV EBX, [ESI]     ; 将ESI地址处存储的值读取到EBX寄存器中
    OR EBX, 0FFh       ; 将EBX寄存器中的值与0FFh按位或,并将结果存储回EBX寄存器中
    

    这个示例将EBX寄存器中的低字节设置为0xFF,而不影响高字节。

  3. 按位或两个内存地址

    MOV EDI, OFFSET array1   ; 将array1的内存地址存储到EDI寄存器中
    MOV ESI, OFFSET array2   ; 将array2的内存地址存储到ESI寄存器中
    OR DWORD PTR [EDI], DWORD PTR [ESI]  ; 将array1和array2中相同偏移量处的值按位或,并将结果存储回array1中
    

    这个示例将array1数组中相同偏移量处的值与array2数组中相同偏移量处的值进行按位或操作,并将结果存储回array1数组中相同偏移量处的位置。

XOR 指令

XOR指令是一种逻辑运算指令,用于对两个操作数进行异或(XOR)运算,并将结果保存到目标操作数中。在大多数计算机体系结构中,XOR指令通常被表示为“XOR”或者“^”,例如在C语言中,XOR运算可以通过“^”符号实现。

XOR运算的规则如下:

  • 如果两个操作数相等,则运算结果为0。
  • 如果两个操作数不相等,则运算结果为1。

以下是几个示例:

  • 0 ^ 0 = 0
  • 0 ^ 1 = 1
  • 1 ^ 0 = 1
  • 1 ^ 1 = 0

在汇编语言中,XOR指令通常使用以下格式表示:

XOR destination, source

其中,destination表示目标操作数,source表示源操作数。XOR指令将destinationsource进行异或运算,并将结果保存到destination中。

例如,在x86汇编语言中,可以使用以下指令将寄存器AX和另一个寄存器BX进行异或运算,并将结果保存到AX中:

XOR AX, BX

在执行这条指令后,AX中的值将等于AX ^ BX

TEST指令

TEST指令是x86架构中的一种汇编指令,用于执行按位与(bitwise and)操作,但不将结果写回到任何寄存器或内存中。其语法格式为:

TEST destination, source

其中,destination和source都可以是寄存器或内存地址。执行完毕后,将destination和source进行按位与操作,并根据结果设置标志寄存器(FLAGS寄存器)的数值。

TEST指令并不会修改destination或source寄存器或内存地址中存储的值,而是通过按位与操作的结果来设置标志寄存器的数值,以便后续指令能够根据标志寄存器中的状态进行分支判断等操作。

下面是一些TEST指令的示例:

  1. 按位与两个寄存器并测试结果

    MOV AX, 0FF00h     ; 将0FF00h存储到AX寄存器中
    TEST AX, 0F0Fh     ; 将AX寄存器中的值与0F0Fh按位与,并根据结果设置标志寄存器的数值
    

    这个示例将AX寄存器中的高字节清零,只保留了低字节中的高4位,并测试了这四位是否为非零值。

  2. 按位与一个寄存器和一个内存地址并测试结果

    MOV EBX, [ESI]     ; 将ESI地址处存储的值读取到EBX寄存器中
    TEST EBX, 0FFh     ; 将EBX寄存器中的值与0FFh按位与,并根据结果设置标志寄存器的数值
    

    这个示例将EBX寄存器中的高字节清零,只保留了低字节中的8位,并测试了这8位是否为非零值。

  3. 按位与两个内存地址并测试结果

    MOV EDI, OFFSET array1   ; 将array1的内存地址存储到EDI寄存器中
    MOV ESI, OFFSET array2   ; 将array2的内存地址存储到ESI寄存器中
    TEST DWORD PTR [EDI], DWORD PTR [ESI]  ; 将array1和array2中相同偏移量处的值按位与,并根据结果设置标志寄存器的数值
    

    这个示例将array1数组中相同偏移量处的值与array2数组中相同偏移量处的值进行按位与操作,并测试操作结果是否为非零值。

NOT指令

NOT指令是x86架构中的一种汇编指令,用于执行按位取反(bitwise not)操作。其语法格式为:

NOT destination

其中,destination可以是寄存器或内存地址。执行完毕后,将destination进行按位取反(bitwise not)操作,并将结果存储回destination中。

下面是一些NOT指令的示例:

  1. 对一个寄存器进行按位取反

    MOV AX, 0FF00h     ; 将0FF00h存储到AX寄存器中
    NOT AX             ; 对AX寄存器中的值进行按位取反,并将结果存储回AX寄存器中
    

    这个示例将AX寄存器中的低字节设置为0x00,高字节设置为0x0F。

  2. 对一个内存地址进行按位取反

    MOV ESI, OFFSET array   ; 将array的内存地址存储到ESI寄存器中
    NOT DWORD PTR [ESI]     ; 对array数组中第一个元素的值进行按位取反,并将结果存储回该元素中
    

    这个示例将array数组中第一个元素的每一位进行取反操作。

  3. 对两个内存地址进行按位取反并测试结果

    MOV EDI, OFFSET array1   ; 将array1的内存地址存储到EDI寄存器中
    MOV ESI, OFFSET array2   ; 将array2的内存地址存储到ESI寄存器中
    NOT DWORD PTR [EDI]      ; 对array1数组中第一个元素的值进行按位取反,并将结果存储回该元素中
    TEST DWORD PTR [EDI], DWORD PTR [ESI]   ; 测试array1数组中第一个元素的值是否与array2数组中相同偏移量处的值按位与后等于0
    

    这个示例将array1数组中第一个元素的每一位进行取反操作,然后测试操作结果是否与array2数组中相同偏移量处的值按位与后等于0,即测试这两个数组在此位置上是否具有相反的位模式。

交换指令

xchg

xchg是一个汇编指令,用于交换操作数的值。它是"exchange"的缩写。xchg指令可以用于不同的用途,包括在并发编程中实现原子操作和同步。

在x86架构的汇编语言中,xchg指令的基本语法如下:

xchg destination, source

其中,destinationsource是操作数。xchg指令执行时,它会将destinationsource的值进行交换。

xchg指令可以应用于不同的操作数类型,如寄存器、内存地址或寄存器与内存地址之间的交换。

以下是一些示例:

  1. 交换两个寄存器的值:
xchg eax, ebx

这将交换寄存器eaxebx中的值。

  1. 交换寄存器和内存地址中的值:
xchg eax, [ebx]

这将交换寄存器eax中的值和存储在内存地址[ebx]中的值。

在并发编程中,xchg指令通常用于实现原子操作和同步。例如,可以使用xchg指令来实现无锁算法中的原子比较交换(compare-and-swap)操作,用于确保数据的原子性更新。xchg指令的原子性保证了操作的不可分割性,以避免竞态条件和数据不一致的问题。

需要注意的是,随着现代处理器的发展,更高级的原子操作指令(如lock cmpxchg)和专用的并发编程工具(如原子类型和锁)已经取代了直接使用xchg指令来实现并发控制。这些工具提供了更高效和更可靠的方式来实现并发操作和同步。

比较指令

CMP指令

CMP(比较)指令是x86汇编语言中的一个指令,用于比较两个操作数的大小。具体来说,CMP指令会将两个操作数相减,并根据减法结果设置标志寄存器中的标志位。这些标志位可以用于控制程序的执行流程。

CMP指令的语法格式如下:

CMP destination, source

其中,destination表示目标操作数,可以是寄存器或内存地址;source表示源操作数,可以是寄存器、内存地址或立即数。指令的作用是将destination减去source的值,并根据减法结果设置标志寄存器中的标志位。

CMP指令会设置以下标志位:

  • CF(进位标志位):如果减法结果产生了进位,则为1,否则为0。
  • ZF(零标志位):如果减法结果等于0,则为1,否则为0。
  • SF(符号标志位):如果减法结果为负,则为1,否则为0。
  • OF(溢出标志位):如果减法结果溢出,则为1,否则为0。

CMP指令常与条件转移指令(如JEJNE等)配合使用,用于根据标志位的值决定程序的执行流程。例如,可以使用CMP指令比较两个数的大小,并根据比较结果决定程序跳转到哪条指令执行。

跳转指令

条件跳转指令

条件跳转指令是x86汇编中的一类指令,用于根据标志寄存器(FLAGS寄存器)的数值进行分支判断,根据条件的成立与否来跳转到不同的代码块中执行。根据判断条件的不同,x86汇编提供了多种条件跳转指令。

常见的条件跳转指令及其含义如下:

  • JE(Jump if Equal):如果上一个比较操作的结果为相等,则跳转。
  • JNE(Jump if Not Equal):如果上一个比较操作的结果为不相等,则跳转。
  • JL(Jump if Less):如果上一个比较操作的结果为小于,则跳转。
  • JLE(Jump if Less or Equal):如果上一个比较操作的结果为小于或等于,则跳转。
  • JG(Jump if Greater):如果上一个比较操作的结果为大于,则跳转。
  • JGE(Jump if Greater or Equal):如果上一个比较操作的结果为大于或等于,则跳转。
  • JA(Jump if Above):如果上一个比较操作的结果为无符号数大于,则跳转。
  • JAE(Jump if Above or Equal):如果上一个比较操作的结果为无符号数大于或等于,则跳转。
  • JB(Jump if Below):如果上一个比较操作的结果为无符号数小于,则跳转。
  • JBE(Jump if Below or Equal):如果上一个比较操作的结果为无符号数小于或等于,则跳转。
  • JZ(Jump if Zero):如果上一个操作的结果为0,则跳转。
  • JNZ(Jump if Not Zero):如果上一个操作的结果不为0,则跳转。

这些条件跳转指令通常搭配其他指令使用,例如CMP(Compare)指令用于比较两个操作数,并根据比较结果设置标志寄存器的数值。然后条件跳转指令可以根据标志寄存器中的状态进行分支判断,决定是否跳转到指定的代码块中执行。

下面是一个简单的示例程序,演示了如何使用条件跳转指令:

MOV AX, 10    ; 将10存储到AX寄存器中
MOV BX, 20    ; 将20存储到BX寄存器中
CMP AX, BX    ; 比较AX和BX的值,设置标志寄存器的数值
JL less       ; 如果AX < BX,则跳转到less标签处
JMP done      ; 否则跳转到done标签处

less:         ; less标签处的指令
MOV CX, 30    ; 将30存储到CX寄存器中
JMP done      ; 跳转到done标签处

done:         ; done标签处的指令
...           ; 继续执行后续指令

在这个示例中,首先将10和20存储到AX和BX寄存器中,然后使用CMP指令比较它们的值,并设置标志寄存器的数值。接着使用JL指令进行分支判断,如果AX < BX,则跳转到less标签处执行MOV指令,否则直接跳转到done标签处。最后在done标签处继续执行后续的指令。

无条件跳转指令

JMP指令是x86汇编中的一种无条件跳转指令,用于直接跳转到程序中的另一个位置执行指令。其语法格式为:

JMP destination

其中,destination可以是任何有效的内存地址或标号(label)。执行完这条指令后,CPU会立即跳转到destination指向的内存地址处执行指令。

下面是一些JMP指令的示例:

  1. 跳转到一个标号处

    START:      ; 定义START标号处的指令
    ...
    JMP START   ; 跳转到START标号处继续执行后续指令
    ...
    

    在这个示例中,定义了一个名为START的标号,表示程序中的某个位置。然后使用JMP指令跳转到START标号处继续执行后续指令。

  2. 跳转到一个内存地址处

    MOV EAX, offset myCode   ; 将myCode的内存地址存储到EAX寄存器中
    JMP EAX                  ; 跳转到myCode所在的内存地址处执行指令
    

    在这个示例中,使用MOV指令将myCode的内存地址存储到EAX寄存器中,然后使用JMP指令直接跳转到myCode所在的内存地址处执行指令。

  3. 使用相对偏移量进行跳转

    MOV EBX, offset labelB  ; 将labelB的内存地址存储到EBX寄存器中
    MOV EAX, offset labelA  ; 将labelA的内存地址存储到EAX寄存器中
    SUB EBX, EAX             ; 计算labelB与labelA之间的相对偏移量
    JMP EBX                  ; 跳转到labelB处执行指令
    ...
    labelA:                  ; 标记labelA处的指令
    ...
    labelB:                  ; 标记labelB处的指令
    ...
    

    在这个示例中,首先使用MOV指令将labelA和labelB的内存地址存储到EAX和EBX寄存器中,然后使用SUB指令计算出labelB与labelA之间的相对偏移量,并将其存储回EBX寄存器中。最后使用JMP指令直接跳转到labelB处执行指令。注意,在这个示例中,需要定义labelA和labelB两个标号,以便计算相对偏移量。文章来源地址https://www.toymoban.com/news/detail-606637.html

到了这里,关于asm:常见指令大全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • arm 32 常见汇编指令解释

    push: 将一个或多个寄存器的值压入栈中,更新栈指针寄存器。语法示例:push {r1, r2, r3}。 add: 执行加法并将结果存储到目标操作数中。语法示例:add r1, r2, #5,将寄存器r2的值加上5,结果存储到寄存器r1中。 push.w: 将指定的寄存器的值压入栈中,并将栈指针向下调整4个字节。语

    2024年02月06日
    浏览(45)
  • 【ARM64 常见汇编指令学习 14 -- ARM 汇编 .balign,.balignw,.balign 伪指令学习】

    上篇文章:ARM64 常见汇编指令学习 13 – ARM 汇编 ORG 伪指令学习 下篇文章:ARM64 常见汇编指令学习 15 – ARM 标志位的学习 .balignl 是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是编译器来实现其功能的。. balignl 是 .balign 的变体。 .balignl 完整

    2024年02月14日
    浏览(46)
  • 【ARM64 常见汇编指令学习 12 -- ARM 汇编函数 的学习】

    上篇文章:ARM64 常见汇编指令学习 11 – ARM 汇编宏 .macro 的学习 下篇文章:ARM64 常见汇编指令学习 13 – ARM 汇编 ORG 伪指令学习 ARM汇编中的函数定义并不像高级语言那样有特定的语法,但通常可以通过 标签(label) 和 子程序调用指令 (如BL,BLX) 来实现类似于函数的功能。 例如

    2024年02月14日
    浏览(49)
  • 【ARM64 常见汇编指令学习 16 -- ARM64 SMC 指令】

    上篇文章:ARM64 常见汇编指令学习 15 – ARM64 标志位的学习 下篇文章:ARM64 常见汇编指令学习 17 – ARM64 BFI 指令 在ARMv8架构中,同步异常主要包括以下几种: Undefined Instruction :未定义指令异常,当处理器尝试执行一条未定义的指令时会触发。 Supervisor Call (SVC) :这是一种特殊

    2024年02月13日
    浏览(48)
  • 【ARM 常见汇编指令学习 2 -- 存储指令 STP 与 LDP】

    上篇文章:ARM 常见汇编指令学习 1 – 跳转指令 BL 与 BLR 区别 下篇文章:ARM 常见汇编指令学习 3 – ARM64 无符号位域提取指令 UBFX 在 ARMv8 架构中,STP指令用于将两个通用寄存器的值存储到内存中。STP指令的语法如下: 或 其中: Wt1 和 Wt2 表示两个要存储的32位通用寄存器, Xt

    2024年02月09日
    浏览(44)
  • ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

    下篇文章:ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 上篇文章:ARM64 常见汇编指令学习 10 – 无符号位域提取指令 BFXIL 在 ARM 汇编中,“ .macro ” 是用来定义一个宏的指令。宏可以看作是一个可以在汇编程序中重用的代码段。当调用宏时,汇编器会将宏的内容插入到调

    2024年02月14日
    浏览(46)
  • ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC

    上篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍 AArch64指令集中有两条关于缓存维护(cache maintenance)的指令,分别是IC和DC。 IC 是用于 指令缓存 操作; DC 是用于 数据缓存 操作。 IC 和DC指令都属于系统指令(system instruction), 系统指令 还包括 AT,BRB,CFP,CP

    2024年02月14日
    浏览(51)
  • 【ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令】

    上篇文章:ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或) 下篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍 LDR指令 与 LDR伪指令 两者虽然名字相同但是作用却不相同,区分两者的方法就是看第二个参数,如果有等号,就是LDR伪指令。 LDR 指令 上面语句的

    2024年02月14日
    浏览(69)
  • 【ARM 常见汇编指令学习 1 -- 跳转指令 BL 与 BLR 区别】

    下篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP ARM 中跳转指令主要分为无条件跳转和有条件跳转,有条件跳转是一种根据特定条件进行跳转的指令。它会根据条件码寄存器(Condition Code Register)中的状态,判断是否满足特定条件,然后根据条件的结果决定是否进行跳

    2024年02月07日
    浏览(39)
  • 【理解ARM架构】不同方式点灯 | ARM架构简介 | 常见汇编指令 | C与汇编

    🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言: 你只管努力,剩下的交给时间! 在学习C语言的时候,我们会写个 Hello World 程序来入门,当我们写ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。 查看原理图,确定控制LED的引脚: 如上图是

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包