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

汇编语言基础

数据定义:

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 :无条件转移

top:
    


    jmp top   ;repeat the endless loop

LOOP :条件转移

2023-10-16-18.50.29.png

mov ax,0
mov  ecx,5
L1: inc  ax
loop L1

;循环体的第一条指令必须要给标号。循环体的最后一条指令要用loop,后面跟这个标号 
;循环结束时,AX=5 ECX=0

过程

2023-10-16-18.56.38.png

条件处理

AND 指令 与 OR 指令
AND / OR 目的操作数 源操作数

两个操作数可以是8、16 或 32位的,但它们的尺寸必须相同。
影响的标志位:总是清除 OFCF,根据结果修改 SFZFPF

AND 指令应用:

2023-10-16-19.04.58.png

OR 指令应用:

2023-10-16-19.05.02.png

NOT 指令

将操作数所有数据位取反,结果为反码。

mov al,11110000b
not al                     ; AL = 00001111b
条件跳转指令

2023-10-16-19.12.08.png
2023-10-16-19.11.48.png
2023-10-16-19.09.16.png
2023-10-16-19.09.53.png

整数算数指令

移位指令

2023-10-16-19.14.24.png

乘法和除法指令

2023-10-16-19.21.59.png
2023-10-16-19.22.17.png
2023-10-16-19.22.27.png
2023-10-16-19.22.55.png

字符串和数组

基址变址 (base-index) 操作数:将两个寄存器的值相加(称为基址寄存器、变址寄存器)来产生偏移地址。
保护模式程序中,可使用任意32位通用寄存器。

2023-10-16-19.29.02.png

2023-10-16-19.30.22.png
2023-10-16-19.31.05.png

使用I/O端口控制硬件

x86属于独立编址,要访问接口地址空间只能用 IN 指令OUT 指令。不管是8086还是32位、64位的CPU,接口地址都是16位的,端口地址范围为0~FFFFh。

2023-10-16-19.37.35.png

posted @ 2023-10-16 18:37  BeyondLimits  阅读(21)  评论(0编辑  收藏  举报