概述
使用教材为
《微型计算机原理与接口技术》(慕课版)
孙丽娟、李爱群、陈燕俐、周宁宁、邓玉龙编著
默认存储器单元的地址编排顺序从上往下,地址从低向高编排
微机原理复习笔记一
微机原理复习笔记三
微机原理复习笔记四
微机复习笔记二
- 1. 常用伪指令
- 数据字义伪指令
- 符号定义伪指令
- 2. 常用运算符
- SEG运算符
- OFFSET运算符
- $运算符
- PTR运算符
- 3. 常用基本指令
- MOV 目标操作数,源操作数
- LEA 目标操作数,源操作数
- PUSH 源操作数
- POP 目标操作数
- ADD 目标操作数,源操作数
- SUB 目标操作数,源操作数
- INC 目标操作数
- DEC 目标操作数
- CMP 目标操作数,源操作数
- JMP
- 条件转移指令
- NOT 目标操作数
- AND 目标操作数,源操作数
- OR 目标操作数,源操作数
- XOR 目标操作数,源操作数
- 移位指令
- 4. 子程序与宏指令
- CALL
- RET
- 子程序定义格式
- 宏指令定义
- 两者异同点
- 5. DOS功能调用
- 01H
- 02H
- 09H
- 6. 目标程序生成步骤
1. 常用伪指令
数据字义伪指令
DB:字节型,8位
变量名 DB 一个或多个用“,”间隔的单字节数
按照定义顺序依次存放在对应的存储器单元中
eg:
BUF0 DB 12H
BUF1 DB 34H,'A'
BUF2 DB ?,?,?
BUF3 DB 3 DUP(?)//等同于3个?
- ?表示随机数
- DUP:重复操作符,左边是重复次数,右边括号内为重复的内容
DW:字型,16位
变量名 DB 一个或多个用“,”间隔的双字节数
双字节数的低位字节存放在低地址单元,高位字节存放在高地址单元
eg:
N1 DW 'DA',46H,'D'//字符D占两个存储单元
MOV AX,N1+1//执行指令后(AX=4644H)
- DW后的字符串常数只能是单引号括起的一个或两个字符
- 第二条MOV指令,用N1+1可以访问N1变量的内容为44H和46H两个存储单元
DD:双字型
变量名 DB 一个或多个用“,”间隔的四字节数
eg:
N2 DD 12345678H
- 每次存取均为4个连续的字节单位
符号定义伪指令
等值伪指令 EQU
符号名 EQU 表达式
eg:
COUNT EQU 54H
等号伪指令=
符号名 = 表达式
eg:
COUNT = 56H
- = 与EQU功能相同
- 区别:EQU定义的常量在后继指令中值不能更改,若要改,则需改原定义语句; = 定义的常量在后继指令中值可以更改
COUNT = 40H//COUNT的值为40H
COUNT = 53H//COUNT的值改为53H
2. 常用运算符
SEG运算符
返回对于逻辑段的段基址
SEG 逻辑段名称或符号或变量
eg:
MOV AX,SEG BUF
//若变量BUF对应的段基址为2000H,则(AX=2000H)
OFFSET运算符
返回相对于首段的偏移地址
OFFSET 标号或变量
eg:
MOV BX,OFFEST BUF
//取出BUF变量的偏移地址到BX
$运算符
返回当前汇编地址计数器的值,通常用来计算变量在逻辑段中占用的字节总数
eg:
BUF DB 'ABCDE'
L1 EUQ $-BUF
S DB 'DFGHJ'
L2 EUQ &-BUF//则L1=5,L2=10
PTR运算符
临时修改变量属性,使源、目两个操作数类型属性一致,也可用于修改标号的类型属性
类型说明符 PTR 标量或变量的地址表达式
eg:
SUB BYTE PTR [BX],10
MOV BL,BYTE PTR [BX+SI]
- 双操作数指令中(如MOV、ADD)
源操作数 | 目标操作数 | 使用条件 |
---|---|---|
立即数 | 直接寻址的存储器操作数 | 两者不一致 |
立即数 | 除直接寻址以外的所有存储器操作数 | 无论相同与否,后者都必须用PTR说明属性 |
直接寻址的存储器操作数 | 直接寻址的存储器操作数 | 有一方存在,但两者属性不一致 |
- 单操作数指令中(如INC、DEC)
a.操作数为除直接寻址以外的所有存储器操作数
b.操作数为直接寻址的存储器操作数,具体情况而定
3. 常用基本指令
MOV 目标操作数,源操作数
功能:把源操作数传送到目标操作数中,源操作数不变
不影响6个状态标志位
目标操作数 | 源操作数 |
---|---|
寄存器操作数、内存操作数 | 立即数 |
寄存器操作数、内存操作数、段寄存器 | 寄存器操作数 |
寄存器操作数、内存操作数 | 段寄存器 |
寄存器操作数、段寄存器 | 内存操作数 |
- CS 不能做目标寄存器
- 不能向段寄存器写入立即数
- IP 不能作为传送目标也不能作为源操作数
- 源、目操作数要等长,即类型属性要一致
- 源操作数为立即数时,若目标单元的字长大于立即数的字长,则立即数将按照目标单元的字长转换为等长,再传送
eg:
MOV AX,0FEH//(AX=00FEH)
MOV AX,-2//(AX=FFFEH)
LEA 目标操作数,源操作数
功能:将源操作数的偏移地址传送给目标操作数
不影响6个状态标志
目标操作数 | 源操作数 |
---|---|
寄存器操作数 | 内存操作数 |
eg:
LEA BX,BUF
//等价于 MOV X,OFFSET BUF
PUSH 源操作数
功能:将源操作数压入堆栈
不影响6个状态标志
源操作数:立即数、寄存器操作数、内存操作数,若为内存操作数时,需考虑使用PTR运算符
操作过程:
a.堆栈指针向低地址方向调整(SP-2/ESP-4)
b.将操作数送入堆栈指针所指向的栈顶单元
PUSHA:把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈
eg:
PUSH AX
POP 目标操作数
功能:从堆栈中弹出一个字或双字,将其送入目标操作数中
不影响6个状态标志
目标操作数:寄存器操作数(除CS外)、内存操作数,若为内存操作数时,需考虑使用PTR运算符
操作过程:
a.将堆栈中取出字或双字送入目标操作数中
b.堆栈指针向高地址方向调整(SP+2/ESP+4)
POPA:把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈
eg:
POP AX
- PUSH、POP 指令的操作数不能为8位
ADD 目标操作数,源操作数
功能:将源操作数和目标操作数相加,结果送入目标操作数
影响6个状态标志
SUB 目标操作数,源操作数
功能:目标操作数减去源操作数,结果送入目标操作数
影响6个状态标志
目标操作数 | 源操作数 |
---|---|
寄存器操作数、内存操作数 | 立即数、寄存器操作数 |
寄存器操作数 | 内存操作数 |
- 源、目标操作数不能同时为段寄存器
- 源、目操作数要等长,即类型属性要一致
- 源操作数为立即数时,若目标单元的字长大于立即数的字长,则立即数将按照目标单元的字长转换为等长,再进行计算
eg:
ADD BYTE PTR [BX],0FAH//高位为字母时,前加0
SUB AX,0F23FH
INC 目标操作数
功能:将目标操作数加1后的结果送入目标操作数
影响A、O、P、S、Z 5个状态标志,不影响C标志
目标操作数:寄存器操作数、内存操作数,若为内存操作数,需考虑使用PTR运算符
DEC 目标操作数
功能:将目标操作数减1后的结果送入目标操作数
影响6个状态标志,若
- 操作数非零数,C标志置1
- 操作数为零,C标志置0
- 目标操作数是80H(-128)、8000H(-32768)以及80000000H(-2147483648)时,求补运算后操作数不变,O标志置1
目标操作数:寄存器操作数、内存操作数,若为内存操作数,需考虑使用PTR运算符
CMP 目标操作数,源操作数
功能:目标操作数减去源操作数,目标操作数不变,依据减法运算的情况设定A、C、O、P、S、Z 6个状态标志
影响6个状态标志
目标操作数 | 源操作数 |
---|---|
寄存器操作数、内存操作数 | 立即数、寄存器操作数 |
寄存器操作数 | 内存操作数 |
- 源、目标操作数不能同时为段寄存器
- 源、目操作数要等长,即类型属性要一致
- 源操作数为立即数时,若目标单元的字长大于立即数的字长,则立即数将按照目标单元的字长转换为等长,再进行计算
常搭配条件转移指令使用
eg:
CMP BYTE PTR [BX],45H
JC NEXT
//若[BX]间址的内存单元中的数小于45H,则程序转移到标号NEXT处
JMP
功能:无条件转移到目标指令处
\ | 直接 | 间接 |
---|---|---|
段内 | JMP 标号 JMP SHORT 标号 | JMP 寄存器操作数 JMP 内存操作数 |
段间 | JMP 标号 | JMP 内存操作数 |
eg:
JMP NEXT//无条件转移到到标号NEXT处
条件转移指令
统一格式:条件转移指令标志符 目标地址标号
功能:如果前提条件满足,则控制转移到目标指令处
- 根据状态标志位C、Z、S、P、O的当前状态
操作码助记符 | 转移的条件 | 中文描述 |
---|---|---|
JC | (C)=1 | 低于转移 |
JNC | (C)=0 | 不低于转移 |
JZ | (Z)=1 | 等于转移 |
JNZ | (Z)=0 | 不低于转移 |
- 根据无符号数的大小
根据比较指令“CMP X,Y”的结果
操作数助记符 | 转移条件 | 中文描述 |
---|---|---|
JA | X > Y | 不低于或不等于转移 |
JNA | X ≤ Y | 低于或等于转移 |
JC | X < Y | 低于转移 |
JNC | X ≥ Y | 不低于转移 |
- 根据有符号数的大小
根据比较指令“CMP X,Y”的结果
操作数助记符 | 转移条件 | 中文描述 |
---|---|---|
JG | X > Y | 不小于或不等于转移 |
JNG | X ≥ Y | 不小于转移 |
JL | X < Y | 不大于或不等于转移 |
JNL | X ≤ Y | 不大于转移 |
eg:
CMP AH,0
JZ NEXT//当(AH)=0时,转移
CMP CH,CL
JA NEXT//无符号数
CMP CH,CL
JG NEXT//有符号数
操作数助记符 | 转移条件 | 中文描述 |
---|---|---|
LOOP | (CX)-1→(CX),若(CX)≠ 0 或(ECX)-1→(ECX),若若(ECX)≠ 0 | 循环转移 |
eg:
MOV CX,5
AGAIN:
LOOP AGAIN//设定循环次数为5
NOT 目标操作数
功能:将目标操作数按位取反
操作数:通用寄存器操作数、内存操作数,若为内存操作数,需考虑使用PTR运算符
不影响6个状态标志位
eg:
NOT AX//(AX)=0FF00H,指令执行后(AX)=00FFH
AND 目标操作数,源操作数
功能:将源、目两个操作数进行按位与运算,结果送入目标操作数中
指令执行后,将C标志和O标志置0,按结果设置P、S、Z标志
eg:
AND AH,0F0H//(AX)=89H,指令执行后(AX)=80H
OR 目标操作数,源操作数
功能:将源、目两个操作数进行按位或运算,结果送入目标操作数中
指令执行后,将C标志和O标志置0,按结果设置P、S、Z标志
eg:
OR AH,07H//(AX)=30H,指令执行后(AX)=37H
XOR 目标操作数,源操作数
功能:将源、目两个操作数进行按位异或运算,结果送入目标操作数中
指令执行后,将C标志和O标志置0,按结果设置P、S、Z标志
eg:
XOR AH,0F0H//(AX)=55H,指令执行后(AX)=A5H
移位指令
统一格式:助记符 操作数,移位次数
开环移位指令:SHL,SAL,SHR,SAR
闭环移位指令:RCL,RCR,ROL,ROR
图片来自中国慕课
操作数 | 移位次数 |
---|---|
寄存器操作数 | 立即数或CL寄存器中的数值 |
移位指令执行后
- C位为最后移入的位值
- 移位次数为1时,移位后最高位的位值发生变化,O标置1
- 开环移位指令,P、S、Z根据移位结果进行设定
- 闭环移位指令,P、S、Z不受影响
eg:
SHR AH,1//(AH)=80H,指令执行后(AH)=40H
ROL AH,8//(AH)=55H,指令执行后(AH)=55H
4. 子程序与宏指令
CALL
功能:由主程序转到子程序
\ | 直接 | 间接 |
---|---|---|
段内 | CALL 过程名 | CALL 寄存器操作数 CALL 内存操作数 |
段间 | CALL 过程名 | CALL 内存操作数 |
- 断点:CALL指令的下一条指令
控制过程:
- 段内:(SP)-2→(SP),将断点的偏移地址压入堆栈,再将子程序入口的偏移地址→(IP)
- 段间:(SP)-4→(SP),将断点的段基址和偏移地址依次压入堆栈,再将子程序入口的段基址→(CS),偏移地址→(IP)
RET
格式:
RET
RET N
功能:程序控制返回到主程序断点所在的指令继续执行
- 指令操作数为保存在堆栈顶的数据,若为段内,2字节数据,即要确保为断点偏移地址,若为段间,4字节数据,即要确保为断点的段基址和偏移地址
- RET N指令,首先完成RET功能,然后将堆栈指针下调N个字节
子程序定义格式
过程名 PROC 属性
子程序实体
RET
过程名 ENDP
- 过程名:子程序名,以字母开头,长度≤31,经汇编后,过程名就是子程序第一条指令的地址
- PROC/ENDP是子程序的定界语句
- 属性,有两种描述
NEAR(或缺省)代表该子程序和调用CALL指令在同一代码段
FAR代表该子程序和调用CALL指令不在同一代码段
eg:
XXXY PROC
PUSH BX
POP AX
RET
XXXY ENDP
宏指令定义
定义调用:
宏名 MACRO <形参表>
宏体
ENDM
- MACRO/ENDM是宏体的定界语句
- 宏名是符合语法的标识符
- 每个形参之间用“,”隔开
调用格式:
宏名 <实参表>
eg:
ABS MACRO VAR
//求VAR的绝对值
ENDM
//主程序内
ABS BX//求BX的绝对值
两者异同点
同:简化程序设计
异:
- 宏指令调用在汇编过程由汇编程序完成,在汇编时将宏体代替宏名,有多少次宏调用,就有多少次宏体的插入,并不能简化程序目标,不能节省目标程序所占内存空间;子程序由CPU完成,主程序多次调用同一个子程序,目标程序的代码段中,子程序的代码仍是一个,可节省内存空间
- 子程序在执行时,每一次调用都要保护断点、保护现场,返回时,要恢复现场、恢复断点,增加程序时间;宏指令不需要,程序执行速度快
- 宏指令通过形参和实参结合实现参数传递;子程序不是
5. DOS功能调用
格式:
MOV AH,功能号
设置入口参数
INT 21H
分析出口参数
- DOS调用的功能号都存放在AH寄存器中
01H
等待从键盘键入一个字符,有回显,响应Ctrl+C
入口参数:无
出口参数:AL= 按键的ASCII码,若AL= 0,表明按键是功能键、光标键,需再次调用本功能,才能返回按键的扩展码
eg:
MOV AH,1
INT 21H
02H
显示一个字符,响应Ctrl+C
入口参数:DL=待显字符的ASCII码
出口参数:无
- 该功能破坏AL寄存器的内容
eg:
MOV DL,'A'
MOV AH,2
INT 21H//屏幕上显示一个字符A
09H
显示字符串,响应Ctrl+C
入口参数:DS:DX=字符串首地址,字符串必须以‘$’(ASCII码为24H)为结束标志
出口参数:无
- 该功能破坏AL寄存器的内容
eg:
//在屏幕上显示HELLO
DATA SEGMENT USE16
MESG DB 'HELLO','$'
DATA ENDS//定义数据段
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA//定义代码段
BEG: MOV AX,DATA
MOV DS,AX
LAST:MOV AH,9
MOV DX,OFFSET MESG
INT 21H//09HDOS调用
MOV AH,4CH
INT 21H//返回DOS
CODE ENDS
END BEG
6. 目标程序生成步骤
汇编语言源程序可以没有数据段和堆栈段,但是一定要有代码段
堆栈段可以有程序员赋值也可以由操作系统赋值
通知汇编程序,源程序到此结束的是END语句
- 编辑
调用编辑程序生成汇编源文件
汇编源文件扩展名为asm - 汇编
将汇编源程序汇编成由机器指令组成的目标文件
目标文件扩展名为obj - 链接
将一个或多个目标文件和库文件合成一个可执行文件
可执行文件扩展名为exe
最后
以上就是能干摩托为你收集整理的《微型计算机原理与接口技术》复习笔记(二)的全部内容,希望文章能够帮你解决《微型计算机原理与接口技术》复习笔记(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复