资源描述
微机原理与接口技术
第一章 概 述
二、计算机中码制(重点%)P5
1、对于符号数,机器数惯用表达办法有原码、反码和补码三种。
1、
注意:对正数,三种表达法均相似。它们差别在于对负数表达。
(1)原码
定义:
符号位:0表达正,1表达负;
数值位:真值绝对值。
注意:数0原码不唯一
(2)反码
定义:若X<0, 则 [X]反= 相应原码符号位不变,数值某些按位求反
(3)补码
定义:若X<0, 则[X]补= [X]反+1
2、8位二进制表达范畴:
原码:-127~+127
反码:-127~+127
补码:-128~+127
3、特殊数10000000
l该数在原码中定义为: -0
l在反码中定义为: -127
l在补码中定义为: -128
l对无符号数:(10000000)2 = 128
三、信息编码
1、 字符编码P8
计算机采用7位二进制代码对字符进行编码
(1)
数字0~9编码是0110000~0111001,它们高3位均是011,后4位正好与其对 应二进制代码(BCD码)相符。
(2)英文字母A~ZASCII码从1000001(41H)开始顺序递增,字母a~zASCII码从1100001(61H)开始顺序递增,这样排列对信息检索十分有利。
第二章 微机构成原理
第一节、微机构造
1、计算机典型构造——冯.诺依曼构造P11
(1)微机由CPU(运算器和控制器)、存储器和I/O接口构成
2、 系统总线分类
(1)数据总线(Data Bus),它决定了解决器字长。
(2)地址总线(Address Bus),它决定系统所能直接访问存储器空间容量。
(3)控制总线(Control Bus)
第二节、8086微解决器
1、8086,其内部数据总线宽度是16位,16位CPU。外部数据总线宽度也是16位
8086地址线位20根,有1MB(220)寻址空间。P27
2、8086CPU从功能上提成两某些:总线接口单元(BIU)、执行单元(EU)
BIU:负责8086CPU与存储器之间信息传送。EU:负责指令执行。P28
4、寄存器构造(重点%)
1)数据寄存器特有习惯用法P30
lAX:(Accumulator)累加器。多用于存储中间运算成果。所有I/O指令必要都通过AX与接口传送信息;
lBX:(Base)基址寄存器。在间接寻址中用于存储基地址;
lCX:(Counter)计数寄存器。用于在循环或串操作指令中存储循环次数或重复次数;
lDX:(Data)数据寄存器。在32位乘除法运算时,存储高16位数;在间接寻址I/O指令中存储I/O端口地址。
2)、指针和变址寄存器P31
lSP:(Stack Pointer)堆栈指针寄存器,其内容为栈顶偏移地址;
lBP:(Base Pointer)基址指针寄存器,惯用于在访问内存时存储内存单元偏移地址。
lSI:(Source Index)源变址寄存器 Index:指针
lDI:(Destination Index)目的变址寄存器
变址寄存器惯用于指令间接寻址或变址寻址。
3)、段寄存器P28
CS:(Code Segment)代码段寄存器,代码段用于存储指令代码
DS:(Data Segment)数据段寄存器
ES:(Extra Segment)附加段寄存器,数据段和附加段用来存储操作数
SS:(Stack Segment)堆栈段寄存器,堆栈段用于存储返回地址,保存寄存器内容,传递参数
4)、指令指针(IP)P29
16位指令指针寄存器,其内容为下一条要执行指令偏移地址。
5)、标志寄存器
(1)状态标志:P30
l进位标志位(CF):(Carry Flag)运算成果最高位有进位或有借位,则CF=1 。Carry:进位 Auxiliary :辅助
l辅助进位标志位(AF):(Auxiliary Carry Flag)运算成果低四位有进位或借位,则AF=1
l溢出标志位(OF):(Overflow Flag)运算成果有溢出,则OF=1
l零标志位(ZF):(Zero Flag)反映指令执行与否产生一种为零成果
l符号标志位(SF):(Sign Flag)指出该指令执行与否产生一种负成果
l奇偶标志位(PF):(Parity Flag)表达指令运算成果低8位“1”个数与否为偶数
(2)控制标志位
l中断容许标志位(IF):(Interrupt Flag)表达CPU与否可以响应外部可屏蔽中断祈求
l跟踪标志(TF):(Trap Flag)CPU单步执行
5、8086引脚及其功能(重点掌握如下引脚)P34
lAD15~AD0:双向三态地址总线,输入/输出信号
lINTR:(Interrupt Request)可屏蔽中断祈求输入信号,高电平有效。可通过设立IF值来控制。
lNMI:(Non_Maskable Interrupt)非屏蔽中断输入信号。不能用软件进行屏蔽。
lRESET:(Reset)复位输入信号,高电平有效。复位初始状态见P21
lMN/MX:(Minimum/Maximum)最小最大模式输入控制信号。
第三章 8086指令系统
第一节 8086寻址方式
一、数据寻址方式(重点%)
1、及时寻址P46
操作数(为一常数)直接由指令给出 (此操作数称为及时数)
及时寻址只能用于源操作数
指令操作例:MOV AX,3102H;
执行后,(AH) = 31H,(AL) = 02H
2、寄存器寻址P47
(1)操作数放在某个寄存器中
(2)源操作数与目操作数字长要相似
(3)寄存器寻址与段地址无关
3、直接寻址P48
(1)指令中直接给出操作数16位偏移地址
偏移地址也称为有效地址(EA,Effective Address)
(2)默认段寄存器为DS,但也可以显式地指定其她段寄存器——称为段超越前缀
(3)偏移地址也可用符号地址来表达,如ADDR、VAR
例:
MOV AX ,[2A00H] 用[]表达数字存储地址
MOV DX ,ES:[2A00H]
MOV SI,TABLE_PTR
4、间接寻址 P48
l 操作数偏移地址(有效地址EA)放在寄存器中
l 只有SI、DI、BX和BP可作间址寄存器
SI、DI、BX 默认段地址DS BP默认段地址SS
l 例: MOV AX,[BX]
MOV CL,CS:[DI]
错误例 :× MOV AX,[DX]
5、寄存器相对寻址 P49
lEA=间址寄存器内容加上一种8/16位位移量
l 例: MOV AX, [BX+8]
MOV CX, TABLE[SI]
MOV AX, [BP]; BX.SI.DI默认段寄存器DS,BP默认段寄存器为SS
l 指令操作例:MOV AX,DATA[BX]
若(DS)=6000H,(BX)=1000H,DATA=2A00H,
(63A00H)=66H, (63A01H)=55H
则物理地址 = 60000H + 1000H + 2A00H = 63A00H
指令执行后:(AX)=5566H
6、基址变址寻址 P51
l 若操作数偏移地址:
EA=基址寄存器(BX或BP)+变址寄存器(SI或DI)
同一组内寄存器不能同步浮现。
错误例:
× MOV AX, [BX] [BP]
7、相对基址变址寻址P51
EA=基址寄存器(BX或BP)+变址寄存器(SI或DI)+8位或16位位移量;
指令操作例:MOV AX,DATA[DI][BX]
若(DS)=8000H,(BX)=H,(DI)=1000H,DATA=200H
则指令执行后(AH)=[83021H], (AL)=[83020H]
寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式比较:
寻址方式 指令操作数形式
n 寄存器间接 只有一种寄存器(BX/BP/SI/DI之一)
n 寄存器相对 一种寄存器加上位移量
n 基址—变址 两个不同类别寄存器
n 相对基址-变址 两个不同类别寄存器加上位移量
第二节 8086指令系统
一、数据传送指令(重点%)
1、数据传送类指令 (特点:除SAHF POPF外均不影响FR) P54
1. 通用
MOV dst,src
堆栈:PUSH POP
互换:XCHG
查表:XLAT
2. 标志
LAHF SAHF PUSHF POPF
3. 地址: LEA LDS LES
4.输入 输出: IN OUT
(1) MOV dest,src; dest←src
传送是字节还是字取决于指令中涉及寄存器是8位还是16位。
详细来说可实现:
① MOV mem/reg1,mem/reg2
指令中两操作数中至少有一种为寄存器
MOV指令使用规则
①IP不能作目寄存器
②不容许mem←mem
③不容许segreg←segreg
④及时数不容许作为目操作数
⑤不容许segreg←及时数
⑥源操作数与目操作数类型要一致
⑦当源操作数为单字节及时数,而目操作数为间址、变址、基址+变址内存数时,必要用PTR阐明数据类型。如:MOV [BX],12H 是错误。
(2)、堆栈指令P54
堆栈以字为单位进行压入弹出操作。
规定由SS批示堆栈段段基址,堆栈指针SP始终指向堆栈顶部,SP初值规定了所用堆栈区大小。堆栈最高地址叫栈底。
① 压栈指令PUSH
PUSH src ;src为16位操作数
例:PUSH AX ;将AX内容压栈
执行操作:(SP)-1←高字节AH
(SP)-2←低字节AL
(SP)←(SP)- 2
注意进栈方向是高地址向低地址发展。`
② 弹出指令POP
POP dest
例:POP BX ;将栈顶内容弹至BX
执行操作:(BL)←(SP)
(BH)←(SP)+1
(SP)←(SP)+2
堆栈指令在使用时需注意几点:
① 堆栈操作总是按字进行
② 不能从栈顶弹出一种字给CS
③ 堆栈指针为SS:SP,SP永远指向栈顶
④SP自动进行增减量(-2,+2)
(3)、互换指令XCHG P54
格式:XCHG reg,mem/reg
功能:互换两操作数内容。
规定:两操作数中必要有一种在寄存器中;
操作数不能为段寄存器和及时数;
源和目地操作数类型要一致。
(4)查表指令XLAT P57
执行操作:AL←[(BX)+(AL)]
又叫查表转换指令,它可依照表项序号查出表中相应代码内容。执行时先将表首地址(偏移地址)送到BX中,表项序号存于AL中。
2、输入输出指令 P57
只限于用累加器AL或AX来传送信息。
功能:(累加器)←→I/O端口
(1) 输入指令IN
格式:
IN acc,PORT ;PORT端标语0~255H
IN acc,DX ;DX表达端口范畴达64K
例:IN AL,80H ;(AL)←(80H端口)
IN AL,DX ;(AL)←((DX))
(2) 输出指令OUT
格式:OUT port,acc
OUT DX,acc
例:OUT 68H,AX ;(69H,68H)←(AX)
OUT DX,AL ;((DX))←(AL)
在使用间接寻址IN/OUT指令时,要事先用传送指令把I/O端标语设立到DX寄存器
如:
MOV DX,220H
IN AL,DX;将220H端口内容读入AL
3、目的地址传送指令 P58
(1) LEA
传送偏移地址
格式:LEA reg,mem ;将指定内存单元偏移地址送到指定寄存器
规定:
1) 源操作数必要是一种存储器操作数;
2) 目操作数必要是一种16位通用寄存器。
例:LEA BX,[SI+10H]
设:(SI)=1000H
则执行该指令后,(BX)=1010H
l注意如下二条指令差别:
LEA BX,BUFFER
MOV BX,BUFFER
前者表达将符号地址为BUFFER存储单元偏移地址取到 BX中;后者表达将BUFFER存储单元中内容取到 BX中。
下面两条指令等效:
LEA BX,BUFFER
MOV BX,OFFSET BUFFER
其中OFFSET BUFFER表达存储器单元BUFFER偏移地址。
两者都可用于取存储器单元偏移地址,但LEA指令可以取动态地址,OFFSET只能取静态地址。
二、 算术运算类指令 (特点:除CBW CWD外均影响FR) P60
1. 加法: ADD ADC
2. 减法: SUB SBB CMP
3. 加1 减1:INC DEC
4. 求补: NEC
5. 乘法: MUL (无符号数) IMUL (带符号数)
6. 除法: DIV (无符号数) IDIV (带符号数)
7. 扩展: CBW (B→W) CWD (W→DW)
8. 十进制调节: 1)加法:DAA(组合) AAA(未组合)
2)减法:DAS (组合) AAS(未组合)
3)乘法:AAM(未组合)
4)除法:AAD
乘、除法指令注意事项:
1. 无符号与带符号数所用指令不同;
2. 八位乘法时,必有一种乘数在AL中,积在AX中;
十六位乘法时,必有一种乘数在AX中,积在DX(高16位)与AX(低16位)中;
3. 八位除法时,被除数在AX中(16位),商在AL,余数在AH;
十六位除法时,被除数在DX(高16位)与AX(低16位)中,商在AX,余数在DX;
4. 十进制调节时,乘、除法均只能使用未组合BCD码,并且除法是先调节后运算。
1、 加法指令 P61
(1) 不带进位加法指令ADD
格式: ADD acc,data
ADD mem/reg,data
ADD mem/reg1,mem/reg2
•ADD指令对6个状态标志均产生影响。
判断溢出与进位(重点%)
从硬件角度:默认参加运算操作数都是有符号数,当两数符号位相似,而和成果相异时有溢出,则OF=1,否则OF=0
(2) 带进位加法ADC (Add with Carry)P62
ADC指令在形式上和功能上与ADD类似,只是相加时还要涉及进位标志CF内容,例如:
ADC AL,68H ; AL←(AL)+68H+(CF)
ADC AX,CX ;AX←(AX)+(CX)+(CF)
ADC BX,[DI] ;BX←(BX)+[DI+1][DI]+(CF)
(3)加1指令INC (Increment)
格式:INC reg/mem
功能:类似于C语言中++操作:对指定操作数加1
注:本指令不影响CF标志。
2、 减法指令 P63
(1)不考虑借位减法指令SUB (Subtraction)
格式: SUB dest,src
注:1.源和目操作数不能同步为存储器操作数
2. 及时数不能作为目操作数
(2)考虑借位减法指令SBB (Subtraction with Carry)
SBB指令重要用于多字节减法。
格式: SBB dest,src
操作: dest←(dest)-(src)-(CF)
(3)减1指令DEC (Decrement)
格式:DEC opr
操作:opr←(opr)-1
(4)求补指令NEG (Negate)
格式: NEG opr
操作: opr← 0-(opr)
对一种操作数取补码相称于用0减去此操作数,故运用NEG指令可得到负数绝对值。
例:若(AL)=0FCH,则执行 NEG AL后,
(AL)=04H,CF=1
(5)比较指令CMP
格式: CMP dest,src
操作: (dest)-(src)
CMP也是执行两个操作数相减,但成果不送目的操作数,其成果只反映在标志位上。
(4)非压缩BCD码加法调节指令AAA P68
AAA指令操作:
如果AL低4位>9或AF=1,则:
① AL←(AL)+6,(AH)←(AH)+1,AF←1
② AL高4位清零
③ CF←AF
否则AL高4位清零
(5)压缩BCD码加法调节指令DAA P68
l两个压缩BCD码相加成果在AL中,通过DAA调节得到一种对的压缩BCD码.
l指令操作(调节办法):
若AL低4位>9或AF=1
则(AL)←(AL)+6,AF←1
若AL高4位>9或CF=1
则(AL)←(AL)+60H,CF←1
l除OF外,DAA指令影响所有其他标志。
lDAA指令应紧跟在ADD或ADC指令之后。
(6)非压缩BCD码减法调节指令AAS
对AL中由两个非压缩BCD码相减成果进行调节。调节操作为:
若AL低4位>9或AF=1,则:
① AL←(AL)-6,AH←(AH)-1,AF←1
② AL高4位清零
③ CF←AF
否则:AL高4位清零
(7)压缩BCD码减法调节指令DAS
对AL中由两个压缩BCD码相减成果进行调节。调节操作为:
若AL低4位>9或AF=1,则:
AL←(AL)-6,且AF←1
若AL高4位>9或CF=1,则:
AL←(AL)-60H,且CF←1
DAS对OF无定义,但影响别的标志位。
DAS指令规定跟在减法指令之后。
3、 乘法指令 P65
进行乘法时:8位*8位→16位乘积
16位*16位→32位乘积
(1) 无符号数乘法指令MUL(MEM/REG)
格式: MUL src
操作:字节操作数 (AX)←(AL) × (src)
字操作数 (DX,AX)←(AX) × (src)
指令例子:
MUL BL ;(AL)×(BL),乘积在AX中
MUL CX ;(AX)×(CX),乘积在DX,AX中
(2)有符号数乘法指令IMUL
格式与MUL指令类似,只是规定两操作数均为有符号数。
指令例子:
IMUL BL ;(AX)←(AL)×(BL)
IMUL WORD PTR[SI];
(DX,AX)←(AX)×([SI+1][SI])
注意:MUL/IMUL指令中
● AL(AX)为隐含乘数寄存器;
● AX(DX,AX)为隐含乘积寄存器;
● SRC不能为及时数;
● 除CF和OF外,对其他标志位无定义。
4、除法指令 P66
进行除法时:16位/8位→8位商
32位/16位→16位商
对被除数、商及余数存储有如下规定:
被除数 商 余数
字节除法 AX AL AH
字除法 DX:AX AX DX
(1)无符号数除法指令DIV (Division)
格式: DIV src
操作:字节操作 (AL)←(AX) / (SRC) 商
(AH)←(AX) / (SRC) 余数
字操作 (AX) ←(DX,AX) / (SRC) 商
(DX) ←(DX,AX) / (SRC) 余数
(2)有符号数除法指令IDIV (Integer division)
格式: IDIV src
操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相似。
注意:对于DIV/IDIV指令
AX(DX,AX)为隐含被除数寄存器。
AL(AX)为隐含商寄存器。
AH(DX)为隐含余数寄存器。
src不能为及时数。
对所有条件标志位均无定
关于除法操作中字长扩展问题
•除法运算规定被除数字长是除数字长两倍,若不满足则需对被除数进行扩展,否则产生错误。
•对于无符号数除法扩展,只需将AH或DX清零即可。
•对有符号数而言,则是符号位扩展。可使用前面简介过符号扩展指令CBW和CWD
三、 逻辑运算类指令 (特点:均影响FR) P70
1. 与: AND 2. 或: OR 3. 异或: XOR 4. 非: NOT
5. 测试: TEST
移位指令
1. 逻辑移位: 左移 SHL 右移 SHR
2. 算术移位: 左移 SAL 右移 SAR
3. 循环移位:
1). 不带CF: 左移 ROL 右移 ROR
2). 带CF: 左移 RCL 右移 RCR
1、逻辑运算指令
(1)逻辑与AND
对两个操作数进行按位逻辑“与”操作。
格式:AND dest,src
用途:保存操作数某几位,清零其她位。
(2)逻辑或OR
对两个操作数进行按位逻辑”或”操作。
格式:OR dest,src
用途:对操作数某几位置1;对两操作数进行组合。
例1:把AL中非压缩BCD码变成相应十进制数ASCII码。
OR AL,30H
(3)逻辑非NOT
对操作数进行按位逻辑”非”操作。
格式:NOT mem/reg
(4)逻辑异或XOR
对两个操作数按位进行”异或”操作。
格式:XOR dest,src
用途:对reg清零(自身异或)
把reg/mem某几位变反(与’1’异或)
例1:把AX寄存器清零。
①MOV AX,0 ②XOR AX,AX ③AND AX,0 ④SUB AX,AX
(5)测试指令TEST
操作与AND指令类似,但不将”与”成果送回,只影响标志位。
TEST指令惯用于位测试,与条件转移指令一起用。
例:测试AL内容与否为负数。
TEST AL,80H ;检查AL中D7=1?
JNZ MINUS ;是1(负数),转MINUS
… … ;否则为正数
2、移位指令
(1)非循环移位指令(重点%) P72
算术左移指令 SAL(Shift Arithmetic Left)
算术右移指令 SAR(Shift Arithmetic Right)
逻辑左移指令 SHL(Shift Left)
逻辑右移指令 SHR(Shift Right)
这4条指令格式相似,以SAL为例:
CL ;移位位数不不大于1时
SAL mem/reg
1 ;移位位数等于1时
Ø算术移位——把操作数看做有符号数;
逻辑移位——把操作数看做无符号数。
Ø移位位数放在CL寄存器中,如果只移1位,也
可以直接写在指令中。例如:
MOV CL,4
SHR AL,CL ;AL中内容右移4位
Ø影响C,P,S,Z,O标志。
Ø成果未溢出时:
左移1位≡操作数*2
右移1位≡操作数/2
例:把AL中数x乘10
由于10=8+2=23+21,因此可用移位实现乘10操作。程序如下:
MOV CL,3
SAL AL,1 ;2x
MOV AH,AL
SAL AL,1 ;4x
SAL AL,1 ;8x
ADD AL,AH ;8x+2x = 10x
四、 控制转移类指令: P80
一)、无条件转移 JMP
1. 近转移 (段内) (NEAR PTR)
1). 直接 (相对寻址):
短转移(SHORT) IP ← IP + disp (8位)
如:JMP n
长转移 IP ← IP + disp (16位)
如:JMP nn
2). 间接: IP ← reg (16位) IP ← mem (16位)
如:JMP [BX]
2. 远转移 (段间) (FAR PTR)
1). 直接: CS = 指令中给出段地址
IP = 指令中给出EA 如:JMP 段:偏
2). 间接: CS = mem+2 (16位)
IP = mem (16位) 如:JMP DWORD PTR [BX]
二)、条件转移 Jcc
1. 单测试条件指令
1
0
C
JC / JNAE / JB
JNC / JAE / JNB
Z
JZ / JE
JNZ / JNE
S
JS
JNS
P
JP / JPE
JNP / JPO
O
JO
JNO
2. 复合测试条件指令 即 A - B
无 符 号 数
带 符 号 数
=
JZ
JZ
≠
JNZ
JNZ
﹤
JC / JB / JNAE
JL / JNGE
﹥
JA / JNBE
JG / JNLE
≤
JBE / JNA
JLE / JNG
≥
JNC / JAE / JNB
JGE / JNL
三). 循环控制指令
1. 循环转移指令 LOOP (相称于: DEC CX
JNZ n )
2. 相等(为零)循环转移指令 LOOPE/LOOPZ
3. 不相等(不为零)循环转移指令 LOOPNE/LOOPNZ
四). 过程调用与返回指令
1. 调用指令 CALL (与JMP同样分:段内直接、段内间接、段间直接、段间间接调用四种,但需保护断点)
2. 返回指令 1). RET (依段内、段间不同分别恢复相应断点)
2). RET n (除象RET恢复断点外还应依照n值修设SP)
五). 中断指令
1. INT n (响应中断时,除象CALL保护断点外,还应保护FR)
2. INTO
IRET (返回时,除象RET恢复断点外,还应恢复F
(1)LOOP
格式:LOOP label
操作:(CX)-1→CX;
若(CX)≠0,则转至label处执行;
否则退出循环,执行LOOP背面指令。
LOOP指令与下面指令段等价:
DEC CX
JNZ label
3、过程调用指令
(1)调用指令CALL
普通格式:CALL sub ;sub为子程序入口
4、中断指令 P85
(1)INT n 执行类型n中断服务程序,N=0~255
五、 串操作指令
一). 串操作指令
1. 串传送 MOVS (字节串 MOVSB 字串MOVSW)
2. 串比较 CMPS (字节串 CMPSB 字串CMPSW)
3. 串搜索 SCAS (字节串 SCASB 字串SCASW)
4. 取串 LODS (字节串 LODSB 字串LODSW)
5. 存串 STOS (字节串 STOSB 字串STOSW)
二). 重复前缀指令
1. 无条件重复 REP
2. 相等 / 为零重复 REPE / REPZ
3. 不相等 / 不为零重复 REPNE / REPNZ
串操作指令特点:
1. 可用前缀使其重复操作;
2. 每操作一次自动修改SI和DI内容,当DF=0时为增量,DF=1为减量;
3. 所有源操作数地址放在SI中,在DS段,串长 ≤ 64K;
所有目的操作数地址放在DI中,在ES段,串长 ≤ 64K;
4. 用重复前缀时,如果条件满足且CX ≠ 0 时重复,每重复一次
CX ← CX–1,否则结束重复;
5. 重复操作时IP不变,中断返回后继续操作。
重复前缀重复与结束重复条件:
重 复 前 缀
重 复 条 件
结 束 条 件
REP
(无条件重复)
CX ≠ 0
CX = 0
REPE / REPZ
(相等/为零重复)
CX ≠ 0 且 ZF=1
CX = 0 或 ZF=0
REPNE / REPNZ
(不相等/不为零重复)
CX ≠ 0 且 ZF=0
CX = 0 或 ZF=1
使用串操作指令时注意:
1. SI ← 源串首(末)址
DI ← 目的串首(末)址;
2. CX ← 串长度;
3. 设DF 值;
4. 选重复前缀;
5. 使用条件重复前缀时,判断结束条件(即 是CX=0 还是ZF=0/1结束)
六、 解决器控制指令 P88
1. 标志位操作
1). 清CF CLC (CF=0)
2). 置CF STC (CF=1)
3). CF取反 CMC
4). 清DF CLD (DF=0)
5). 置DF STD (DF=1)
6). 清IF CLI (CF=0 关中断)
7). 置IF STI (CF=1 开中断)
2. 同步控制指令
1). ESC 2). WAIT 3). LOCK
3. 空操作指令 NOP
4. 暂停指令 HLT
1、标志位操作
(1)CF设立指令
CLC 0→CF
STC 1→CF
CMC CF变反
(2)DF设立指令
CLD 0→DF (串操作指针移动方向从低到高)
STD 1→DF (串操作指针移动方向从高到低)
(3)IF设立指令
CLI 0→IF (禁止INTR中断)
STI 1→IF (开放INTR中断)
1、 HLT(halt)
执行HLT指令后,CPU进入暂停状态。
第四章 8086汇编语言程序设计
第一节 伪指令(重点%)
分析运算符:SEG、OFFSET、TYPE、LENGTH、SIZE P97
CPU指令与伪指令之间区别:P98
(1)CPU指令是给CPU命令,在运营时由CPU执行,每条指令相应CPU一种特定操作。而伪指令是给汇编程序命令,在汇编过程中由汇编程序进行解决。
(2)汇编后来,每条CPU指令产生一一相应目的代码;而伪指令则不产生与之相应目的代码。
1、数据定义伪指令
(1)数据定义伪指令普通格式为:
l[变量名] 伪指令 操作数[,操作数…] P99
DB 用来定义字节(BYTE)
DW 用来定义字(WORD)
DD 用来定义双字(DWORD)
例:下面数据项设立了多少个字节?
(1) ASC_DATA DB ‘1234’ (2) HEX_DATA DB 1234H
答案:
(1) 设立了4个字节 (2) 设立了2个字节
(2)操作数类型可以是:
①常数或常数表达式
l例如: DATA_BYTE DB 10,5,10H
DATA_WORD DW 100H,100,-4
DATA_DW DD 2*30,0FFFBH
②可觉得字符串(定义字符串最佳使用DB)
l例如:char1 DB ‘AB’
③可觉得变量
④可觉得?号操作符
例如:X DB 5,?,6
?号只是为了给变量保存相应存储单元,而不赋予变量某个拟定初值。
⑤重复次数:N DUP(初值[,初值…]) P100
l例如:ZERO DB 2 DUP(3,5)
XYZ DB 2 DUP(0,2 DUP(1,3),5)
⑥在伪操作操作数字段中若使用$,则表达是地址计数器当前值。
2、补充内容: P98
(1)类型 PTR 地址表达式
例如:MOV BYTE PTR [BX],12H
INC BYTE PTR [BX]
注意:单操作数指令,当操作数为基址、变址、基+变时候必要定义
3、符号定义伪指令
(1)EQU P100
格式:名字 EQU 表达式
EQU伪指令将表达式值赋予一种名字,后来可用这个名字来代替上述表达式。
例:CONSTANT EQU 100
NEW_PORT EQU PORT_VAL+1
(2) =(等号)
与EQU类似,但容许重新定义
例:
┇
EMP=7 ;值为7
┇
EMP=EMP+1 ;值为8
(3)LABEL
LABEL伪指令用途是定义标号或变量类型
格式:名字 LABEL 类型
变量类型可以是BYTE,WORD,DWORD。标号类型可以是NEAR或FAR
4、段定义伪指令 P100
与段关于伪指令有:
SEGMENT、ENDS、ASSUME、ORG
(1)段定义伪指令格式如下:
段名 SEGMENT [定位类型] [组合类型] [’类别’]
┇
段名 ENDS
SEGMENT和ENDS
这两个伪指令总是成对浮现,两者前面段名一致。两者之间删节某些,对数据段、附加段及堆栈段,普通是符号、变量定义等伪指令。对于代码段则是指令及伪指令。此外,还必要明确段和段寄存器关系,这可由ASSUME语句来实现。
(2)ASSUME P101
格式:
ASSUME 段寄存器名:段名[,段寄存器名:段名[,…]]
ASSUME伪指令告
展开阅读全文