微机原理笔记 - chap3 - Intel处理器指令系统及汇编语言

发布时间 2023-10-16 18:41:22作者: BeyondLimits

汇编语言基础

数据定义:

pPvKyzF.png

数据传送、算术运算、跳转指令

MOV 指令

“先目的操作数,再源操作数。”

MOV 指令需要遵循的规则:

  1. 两个操作数的尺寸必须一致。

  2. 两个操作数不能同时为内存操作数

    mov reg, reg
    mov mem, reg
    mov reg, mem
    mov mem, imm
    mov reg, imm
    
    mov var2, var1  ;不合法,需要用寄存器来实现
    
  3. 目的操作数不能是 CSEIPIP

  4. 立即数不能直接送至段寄存器。

XCHG 指令

用来交换两个操作数的内容。

xchg reg, reg
xchg reg, mem
xchg mem, reg

若要交换两个内存操作数,还是需要利用寄存器,即 MOVXCHG 结合使用。

INC 和 DEC 指令

分别实现加 1 与减 1 操作。

inc reg/mem
dec reg/mem
ADD 和 SUB 指令

ADD同尺寸的源操作数和目的操作数相加,结果在目的操作数中(不改变源操作数)。

SUB 将源操作数从目的操作数中减掉,结果在目的操作数中(不改变源操作数)

两者都同 MOV 指令一样,先目的操作数,再源操作数。

.data
var1 DWORD 20000h
var2 DWORD 10000h
.code
mov eax, var1
add eax, var2     ;30000h
sub eax, var2     ;20000h
NEG 指令

认为操作数是有符号数,形式是补码。该指令将操作数按位取反、末位加 1

算术运算影响的标志
  1. 零标志位 ZF

    mov cx, 1
    sub cx, 1        ; ZF = 1
    mov ax, 0FFFFh   ; 全1理解成补码,真值就是-1
    inc ax          ; ZF = 1
    inc ax          ; ZF = 0
    
  2. 符号标志位 SF

    mov cx,0
    sub cx,1       ; SF = 1
    add cx,2       ; SF = 0
    
  3. 进位标志位 CF

    mov al,0FFh
    add al,1    ; CF = 1
    
    mov ax,00FFh
    add ax,1    ; CF = 0
    
    mov ax,0FFFFh
    add ax,1    ; CF = 1
    
    mov al,1
    sub al,2    ; CF = 1。最高位向更高位有进位或借位时置1
    
  4. 溢出标识位 OF

    \(OF = C_n \oplus C_{n - 1}.\)

    其中 \(C_n\) 是符号位产生的进位,即标志位 CF\(C_{n-1}\) 是最高有效位向符号位产生的进位。

    mov al,+127
    add al,1    ; OF = 1
    
    mov al,-128
    sub al,1    ; OF = 1
    
    mov al,-128     ; AL = 10000000b
    neg al          ; AL = 10000000b, OF = 1
    
    mov al,+127     ; AL = 01111111b
    neg al          ; AL = 10000001b, OF = 1
    
JMP 和 LOOP 指令

JMP :无条件转移
LOOP :条件转移