微机原理及接口技术期末复习资料重点归纳 联系客服

发布时间 : 星期六 文章微机原理及接口技术期末复习资料重点归纳更新完毕开始阅读38d695a29e314332396893f9

作数不能同时为存储单元),可以采用除立即数寻址外的各种寻址方式,但段寄存器和立即数不能作为交换指令的一个操作数。

3、堆栈操作指令(后进先出) (1)入栈指令:

PUSH OPRD

功能:SP-2→SP,将原操作数OPRD的16位数据压入堆栈; 指向的单元),不影响标志位。 (4)标志寄存器出栈指令:

POPF

功能:将堆栈顶部(SP指向单元)的一个字,传送到标志寄存器,堆栈SP+2→SP。 7、输入/输出数据传送指令: (1)输入指令:

步骤:SP-2→SP;操作数低8位送至SP所指向的堆栈单元;操作数高8位送至SP+1所指向的堆栈单元; 注意事项:OPRD可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有寻址方式),入栈操作对象必须是16位数。 (2)出栈指令:

POP OPRD

功能:从堆栈中弹出16位数据到目的操作数OPRD ,SP+2→SP;

步骤:SP所指向的堆栈单元的内容送至操作数低8位;SP+1所指向的堆栈单元的内容送至目的操作数高8位;SP+2→SP。

4、有效地址传送指令:

LEA REG,OPRD

功能:把操作数的有效地址传送到操作数REG寄存器(REG为16位通用寄存器);

LEA与MOV的区别是为:LEA传送原操作数的有效地址,MOV传送原操作数的内容。 5、换码指令:

XLAT

功能:完成一个字节的查表转换;

表的内容预先已经存在,表的首地址存放于BX寄存器,AL存放相对于表首地址的位移量,该指令执行后(BX+AL)单元的内容送至AL。 6、标志寄存器传送指令 (1)读取标致指令:

LAHF

功能:将标志寄存器中的低8位(包括SF、ZF、AF、PF、CF)传送至AH寄存器的指定位,空位没有定义。 (2)设置标志指令:

SAHF

功能:将寄存器AH的内容送至标志寄存器FR的低8位,根据AH的内容,影响标志位SF、ZF、AF、PF和CF,对OF、DF、IF无影响。 (3)标志寄存器入栈指令:

PUSHF

功能:堆栈指针SP-2→SP,将标志寄存器压入堆栈顶部(SP

IN 累加器,端口地址

功能:从一个端口读取一个字节或一个字,传送到AL或AX;

注意事项:端口地址可以直接给出或由DX寄存器间接给出;外部设备最多可有65536个I/O端口(0000~FFFFH),只有前256个端口可在指令中直接给出(00~FFH),若端口地址超过255时,则必须用DX保存端口地址。 (2)输出指令:

OUT 端口地址,累加器

功能:将AL中的一个字节或AX中的一个字输出到指定端口;

传送类指令不影响标志位;与I/O端口打交道的寄存器有累加器AX,寄存器DX,AX存放与外部设备交换的数据,DX存放端口地址。 算数运算类指令: 1、加法指令 (1)加法指令:

ADD OPRD1,OPRD2

功能:OPRD1←OPRD1+OPRD2,完成两个操作数相加,结果送至目的操作数OPRD1,原操作数不变;

指令的运行结果对标志位CF、OF、PF、SF和AF产生影响。 (2)带进位加法指令:

ADC OPRD1,OPRD2

功能:OPRD1←OPRD1+OPRD2+CF,ADC指令主要用于多字节运算中。 (3)增量指令:

INC OPRD

功能:操作数OPRD的内容加1,结果送回OPRD; 此指令主要用于在循环程序中修改地址指针和循环次数等,该指令执行的结果影响标志位AF、OF、PF、SF和ZF,不影响进位标志CF。 2、减法指令 (1)减法指令:

SUB OPRD1,OPRD2

功能:OPRD1←OPRD1-OPRD2,目的操作数减去原操作数,结果送到目的操作数,原操作数不变,本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。

(2)带借位的减法指令:

SBB OPRD1,OPRD2

功能:OPRD1←OPRD1-OPRD2-CF,目的操作数减去原操作数,同时还要减去借位(进位)标志CF的现行值,结果送到目的操作数,原操作数不变,本指令对标志位AF、②字扩展指令CWD:寄存器AX中的符号扩展到寄存器DX。若AX的最高有效位为0,则DX=0,否则DX=0FFFFH。 逻辑运算与移位指令: 1、逻辑运算指令 (1)逻辑“与”指令:

CF、OF、PF、SF和ZF都有影响。 (3)减量指令:

DEC OPRD

功能:操作数OPRD的内容减1,并把结果送回OPRD,执行结果不影响CF,但影响其它五个状态标志。 (4)取补指令:

NEG OPRD

功能:对操作数取补码,将结果送回操作数OPRD中,实际上是用0减去操作数,执行结果影响标志位AF、CF、OF、PF、SF和ZF,一般总是使标志位CF=1,除非在操作数为0时,才使CF=0。 (5)比较指令:

CMP OPRD1,OPRD2

功能:操作数OPRD1减去OPRD2,运算结果不送到OPRD1,不影响两个操作数,但影响状态标志。 3、乘法和除法指令

(1)无符号数乘法指令MUL和带符号数乘法指令IMUL:

MUL OPRD IMUL OPRD

功能:如果OPRD是字节操作数,则AL的内容与OPRD相乘的16位结果送到AX中;如果OPRD是字操作数,则AX的内容与OPRD相乘32位的结果送到DX和AX中,DX中是高16位,AX中是低16位。

注意事项:如果乘积结果的高半部分(字节相乘时为AH,字相乘时为DX)不等于零,则标志CF=1,OF=1;否则CF=0,OF=0,对其它标志(该指令无定义),所以,如果CF=0,OF=0,表示AH或DX中的结果数无效。

(2)无符号数除法指令DIV和带符号数除法指令IDIV:

DIV OPRD IDIV OPED

功能:如果OPRD是字节操作数,则AX的内容除以OPRD8位的商送到AL中,8位余数送到AH中;如果OPRD是字操作数,则DX中(高16位)和AX中(低16位)的内容除以OPRD,16位的商送到AX中,16位的余数送到DX中。

注意事项:除法指令对标志位的影响无定义;如果除数为0,或者8位数除时商超过8位,或者16位除时商超过16位,则认为是溢出,引起0号中断。 (3)符号扩展指令

①字节扩展指令CBW:寄存器AL中的符号扩展到寄存器AH。若AL的最高有效位为0,则AH=0,否则AH=0FFH;

AND OPRD1,OPRD2

功能:两个操作数进行按位的逻辑“与”运算,结果送到目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF;对自身的“与”操作作用是清标志位CF和OF,自身内容不变。

(2)逻辑“或”指令:

OR OPRD1,OPRD2

功能:两个操作数进行按位的逻辑“或”运算,结果送到目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF。 (3)逻辑“非”指令:

NOT OPRD

功能:把操作数OPRD按位取反,结果送回OPRD,对标志位没有影响。

(4)逻辑“异或”指令:

XOR OPRD1,OPRD2

功能:两个操作数进行按位的逻辑“异或”运算,结果送到目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF。

(5)逻辑测试指令:

TEST OPRD1,OPRD2

功能:两个操作数进行按位的逻辑“与”运算,结果不送到目的操作数OPRD1,仅仅影响标志位,通常用于检测某位是否为1,但又不改变原来值的场合。 2、移位指令

(1)算数/逻辑移位指令:

SAL OPRD,CNT ;算数左移 SHL OPRD,CNT ;逻辑左移 SAR OPRD,CNT ;算数右移 SHR OPRD,CNT ;逻辑右移

CNT为移位位数,可以是1或寄存器CL,当需要移多位时,移位位数需存放在CL寄存器中。

算数/逻辑左移

(2)循环移位指令:

ROL OPRD,CNT ;循环左移 ROR OPRD,CNT ;循环右移 RCL OPRD,CNT ;带进位循环左移 RCR OPRD,CNT ;带进位循环右移

CNT为移位位数,可以是1或寄存器CL,当需要移多位时,移位位数需存放在CL寄存器中。

控制转移类指令: 1、无条件转移指令:

JMP OPRD

2、调用和返回指令:

CALL DST ?? RET

3、条件转移指令: (1)标志位转移指令;

JC 进位位为1 JNC 进位位为0 JO 溢出 JNO 不溢出 JNP/JPO 奇偶位为0(奇) JP/JPE 奇偶位为1(偶) JNS 符号位为0(非负) JS 符号位为1(负) JE/JZ 结果为0 JNE/JNZ 结果不为0 (2)无符号数比较转移指令;

JA/JNBE 大于/不小于等于 JAE/JNB 大于等于/不小于 JB/JNAE 小于/不大于等于 JBE/JNA 小于等于/不大于 (3)有符号数比较转移指令; (4)测试转移指令;

注意事项:条件转移不影响标志位;条件转移指令的目的地址必须在线性的代码段(CS)内,并且以当前指针寄存

器IP内容为基准,其位移必须在-128~+127的范围内。 4、循环控制指令:

LOOP OPRD

功能:寄存器CX的值减1,如果结果不等于0,则循环置OPRD,否则顺序执行。

第四章

表达式:

1、算术运算符、逻辑运算符和关系运算符 (1)算术运算符

+、-、*、/、MOD、SHL、SHR; (2)逻辑运算符

AND、OR、NOT、XOR 按位运算; (3)关系运算符

EQ(等于)、NE(不等于)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)

关系运算结果总是一个数值,若关系式不成立,则结果为0,若关系成立,则结果为0FFFFH。

2、分析运算符 (1)SEG 变量或标号

计算段地址; (2)OFFSET 变量或标号

计算偏移地址; (3)TYPE 变量或标号

计算符号类型。 3、组合运算符(属性操作符) (1)定义符号名为新类型PTR <类型> PTR <符号名>

用于指定或零时改变变量或标号的类型; (2)指定新类型THIS THIS <类型>

为某个符号名建立新类型,如BYTE(字节)、WORD

(字)、DWORD(双字)。 伪指令:

1、数据定义(变量定义) [变量名] 助记符 <初值表>

功能:根据定义类型不同,为变量分配存储单元,并且把其后的初值表中的各项值存入连续的指定存储单元中,或者置分配单元而不存入确定的值。初值表中的各项可以是数值、字符串、标号名或变量名,表达式。

DB:定义字节,即初值表中的每个数据占1个字节单元; DW:定义字,即初值表中的每个数据占1个字单元(2个字节),且低字节存放在低地址单元,高字节存放在高

地址单元;

DD:定义双字,即初值表中每个数据占两个字单元(4个字节),且低字节存放在低地址单元,高字节存放在高地址单元;

DQ:定义4字长,即每个数据项占8个字节; DT:定义10个字节长。

当一个定义的存储区内的每个单元要防止同样的数据时, ?? RET

<过程名> ENDP

过程类型:段间为FAR,段内为NEAR。 汇编语言程序的基本框架:

STACK SEGMENT STACK ;定义堆栈段 …… 可用DUP重复操作符

COUNT DUP(?)

COUNT为重复次数,“()”中为要重复的数据,?表示空出一个单元,没有存放初值,DUP可以嵌套使用。 2、符号常量定义伪指令 (1)等价语句

<常量名> EQU <表达式>

功能:将表达式的值赋给符号常量,表达式可以是常数、数值表达式、字符串、存储器符号等; (2)等号语句

<符号常量名> = <表达式>

功能:将表达式的数值赋给符号常量,表达式为数值表达式。

注意:等价语句的符号常量名不能被重新赋值,等号语句可以重新赋值。

3、段定义伪指令SEGMENT和ENDS <段名> SEGMENT [定位类型][组合类型][类别] ??(段体)

<段名> ENDS

注意:开始的段名与结束的段名必须相同,段的长度不能超过64KB,SEGMENT后面的参数是可选的,但段名是不可默认的。

4、设定段寄存器伪指令ASSUME ASSUME 段寄存器:段名[,段寄存器:段名]

功能:告诉汇编程序在汇编时,段寄存器CS、DS、SS、ES应具有的符号段基址,但是段寄存器的实际值(CS除外)还要由传送指令在执行程序时赋值。 5、ORG伪指令 ORG <表达式>

功能:规定了在某一段内,程序或代码存放的起始偏移地址。

6、汇编结束伪指令END END [表达式]

功能:告诉汇编程序源文件结束,并给出执行程序的入口地址,表达式为程序的启动地址。 7、过程定义伪指令PROC和ENDP <过程名> PROC [过程类型]

STACK ENDS

DATA SEGMENT ;定义数据段 …… DATA ENDS

CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START MOV AX,DATA

MOV DS,AX ;数据段段地址送DS ……

MOV AH,4CH ;程序结束返回DOS INT 21H

CODE ENDS ;代码段结束 END START 系统功能调用: 1、调用方法: (1)准备入口参数;

(2)功能调用号送AH寄存器; (3)软中断指令INT 21H。 2、常用系统功能调用

(1)从键盘接收一个字符(01H功能)

MOV AH,1 INT 21H

功能:从键盘读一个字符,并将该字符回显在显示器上;入口参数:无;

出口参数:AL=读到字符的ASCII码;

如果读到的字符是Ctrl+c或Ctrl+Break则结束程序。 (2)从键盘接收一串字符(0AH号功能)

MOV DX,OFFSET BUF MOV AH,0AH INT 21H

入口参数:DS:DX=缓冲区首址,缓冲区的第一个字节放缓冲区最大容量数;

出口参数:接收到的字符串在缓冲区中第三个字节开始;注意:

① 缓冲区第二个字节存放实际读入的字符数; ② 字符串以回车结束;

③ 如果输入字符串超过了缓冲的区容量, 超出的部分丢