Orion's Studio.

微机指令(2)

2016/03/22

指令系统

CPU全部指令的集合

1
2
3
4
5
6
7
8
9
;符号指令
MOV AX,1234H
ADD AX,BX
SUB CX,DX

;机器指令
B8 34 12
03 C3
2B CA

MOV、ADD、SUB是传送、加法、减法指令的操作码助记符,逗号左侧是目标操作数,逗号右侧的是源操作数

寻址方式

寻找操作数的地址

立即寻址

操作数为立即数

1
2
3
4
5
6
7
MOV AL,01010101B
MOV BX,1234H
MOV CL,4
MOV DL,'A'
MOV BL,0A6H
MOV CX,3 * 5
MOV EAX,12345678H

寄存器寻址

1
2
3
4
5
MOV DS,AX
MOV CL,BL
INC SI
DEX DI
ADD EAX,EBX

存储器寻址

直接寻址

段寄存器名称:偏移地址表达式
1000H : 2345H 即 12345H (段基址乘16加上偏移地址)

1
2
MOV BX,DS:[1234H]
MOV AL,ES:[2CH]
1
2
MOV EAX,DS:BUF;BUF为变量名
;MOV EAX,BUF

寄存器间接寻址

1
2
3
4
MOV DS,段基址
MOV BX,BUF的偏移地址
MOV AL,[BX];BX间址取数

基址寻址

1
2
MOV BP,BUF单元的偏移地址
MOV DL,DS:[BP+10]

变址寻址

1
2
MOV AL,[2*EBX+100]
MOV AH,[SI+5]

基址加变址寻址

计算机组成

硬件

CPU

名称 位数
8008 4
8080 8
8086 16
80286 16
80386 32
80486 32
80586 64
运算器:
  • 寄存器(接收、累加、乘商)
  • 执行部件(加法器、输入输出门电路)
  • 控制电路
控制器:指令、时序、总线、中断
寄存器组:
  • 通用:累加AX、地址BX、计数CX、数据DX、堆栈指针SP、基址指针BP、目的DI、源SI
  • 指令指针IP、标志FLAGS
  • 段:代码CS、数据DS、附加ES、堆栈SS
存储管理:静态、可变、可重定位分区

总线

  • 地址总线:单向,用来寻址存储单元和I/O端口,宽度决定内存容量
  • 数据总线:双向
  • 控制总线:单向(大部分)

存储器

  • ROM只读存储器
  • RAM随机存储器,内存

I/O接口

软件

系统软件

  • 操作系统
  • 数据库管理软件
  • 计算机网络管理软件
  • 语言处理、服务型软件

应用软件

  • 编辑程序、宏汇编程序、链接程序(汇编)
  • 其他

实模式、保护模式

位数 数据总线 地址总线 寄存器
实模式 16 16 20
保护模式 32 32 32

段定义语句

1
2
3
段名	SEGMENT	定位参数	链接参数	'分类名'	段长度
段体
段名 ENDS

I/O功能调用

1
2
MOV	AH,功能号
INT 21H

循环程序找最大数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	.486	;方法选择伪指令,汇编80486实模式
DATA SEGMENT USE16 ;段长度64KB,偏移地址16位,用16位寻址
BUF DB 'QWERTYUIOP123'
COUNT EQU $-BUF ;统计串长度13
MAX DB 'MAX=',?,0DH,0AH,'$' ;回车,换行,字符串结束符
DATA ENDS

CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA ;段约定,CODE命名代码段,DATA命名数据段
BEG: MOV AX,DATA
MOV DS,AX ;寄存器寻址
MOV AL,0
LEA BX,BUF ;BX=串首址偏移量
MOV CX,COUNT ;立即寻址
LAST: CMP [BX],AL ;比较BX地址保存的ASCII码值-AL
JC NEXT ;当进/借位标C为1,也就是[BX]<AL时跳转
MOV AL,[BX] ;当[BX]>=AL时,AL=[BX]
NEXT: INC BX
LOOP LAST ;CX-=1,若CX不为0转移
MOV MAX+4,AL ;?=AL
MOV AH,9 ;功能号09H,显示字符串,BS:DX=字符串首地址
MOV DX,OFFSET MAX
INT 21H ;软中断调用DOS系统
MOV AH,4CH ;终止功能
INT 21H
CODE ENDS
END BEG ;END程序启动地址标号

计算三个数的累加和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
	.486
DATA SEGMENT USE16
NUM DW 1122H ;字
DW 3344H
DW 5566H
DATA ENDS

STACK_ SEGMENT STACK 'STACK' USE16 ;链接参数STACK,分类名'STACK'
DB 100 DUP(?) ;100字节的随机数
STACK_ ENDS

CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK_ ;STACK_命名堆栈段
BEG: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET NUM ;偏移6字节放入源寄存器
CALL COMPUTE ;调用子程序
XYZ: CALL DISP
EXIT: MOV AH,4CH
INT 21H
;------------------------------------
COMPUTE PROC ;子程序定界开始
MOV BX,0 ;初始化
ADD BX,[SI+0]
ADD BX,[SI+2]
ADD BX,[SI+4]
RET ;返回断点XYZ
COMPUTE ENDP ;子程序定界结束
;------------------------------------
DISP PROC
MOV CX,16 ;计数寄存器初始化为16
LAST: MOV DL,'0'
RCL BX,1 ;含进位的循环左移,把BX内容左移一位
JNC NEXT ;当进/借位标C为0时跳转,最后输出'0'
MOV DL,'1' ;最后输出'1'
NEXT: MOV AH,'2' ;DL=显示的一个字符,以ASCII码为格式
INT 21H
LOOP LAST ;CX-=1,若CX不为0转移,即循环16次
RET ;返回断点EXIT
DISP ENDP
;------------------------------------
CODE ENDS
END BEG
CATALOG
  1. 1. 指令系统
  2. 2. 寻址方式
    1. 2.1. 立即寻址
    2. 2.2. 寄存器寻址
    3. 2.3. 存储器寻址
      1. 2.3.1. 直接寻址
      2. 2.3.2. 寄存器间接寻址
      3. 2.3.3. 基址寻址
      4. 2.3.4. 变址寻址
      5. 2.3.5. 基址加变址寻址
  3. 3. 计算机组成
    1. 3.1. 硬件
      1. 3.1.1. CPU
        1. 3.1.1.1. 运算器:
        2. 3.1.1.2. 控制器:指令、时序、总线、中断
        3. 3.1.1.3. 寄存器组:
        4. 3.1.1.4. 存储管理:静态、可变、可重定位分区
      2. 3.1.2. 总线
      3. 3.1.3. 存储器
      4. 3.1.4. I/O接口
    2. 3.2. 软件
      1. 3.2.1. 系统软件
      2. 3.2.2. 应用软件
  4. 4. 实模式、保护模式
  5. 5. 段定义语句
  6. 6. I/O功能调用
  7. 7. 循环程序找最大数
  8. 8. 计算三个数的累加和