微机指令(2)

指令系统

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