第3.3.5章 串操作类指令
中南大学《微型机原理与汇编语言》课程作业(在线作业)三及参考答案
(一) 单选题1.8086/8088的中断系统能够处理多少个不同的中断源()。
(A) 16 (B) 32 (C) 128 (D) 256参考答案:(D)2.执行指令JBOPR,能使程序发生转移的条件为()。
(A)(B)(C)(D)参考答案:(C)3.设,,则执行指令JMPWORD PTR后,寄存器IP中的内容为()。
(A) 0100H (B) 2000H (C) 0080H (D) 0012H参考答案:(C)4.8086/8088的每个中断向量占多少个字节()。
(A) 1 (B) 2 (C) 3 (D) 4参考答案:(D)5.串操作指令以下列哪个寄存器指向源操作数()。
(A) DI (B) SI (C) AX (D) BX参考答案:(B)6.DOS操作系统使用的中断类型号范围是()。
(A) 00H~1FH (B) 20H~3FH (C) 40H~5FH (D) 60H~7FH参考答案:(B)7.指令JNPOPR的转移条件是()。
(A) 状态标志位PF为1 (B) 状态标志位OF为1 (C) 状态标志位PF为0 (D) 状态标志位OF为0参考答案:(B)8.指令CLD的功能是()。
(A) 状态位DF清零(B) 状态位ZF清零(C) 状态位SF清零(D) 状态位CF清零参考答案:(A)9.指令JSOPR的转移条件是()。
(A) 状态标志位SF为1 (B) 状态标志位CF为1 (C) 状态标志位SF为0 (D) 状态标志位CF为0参考答案:(A)10.设,,,,,,则执行指令JMPDWORD PTR后,寄存器IP中的值为()。
(A) 5000H (B) 0080H (C) 3000H (D) 2012H参考答案:(B)(二) 多选题1.汇编语言程序设计中对段定义的伪指令中通常指明段的类型,除了DWORD、WORD和BYTE类型外,还有哪几种类型()。
(A) PUBLIC (B) PAGE (C) COMMON (D) PARA参考答案:(BD)2.常用的循环控制方法有()。
第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社
直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
汇编语言---字符串操作指令
汇编语言---字符串操作指令汇编语言---字符串操作指令字符串操作指令的实质是对一片连续的存储单元进行处理,这片连续的存储单元由隐含指针DS:SI或ES:DI来指定;字符串操作指令可对内存单元按照字节、字、双字进行处理,并能根据操作对象的字节数使变址寄存器SI/DI增加或减少1、2、4字节;规定如下:A.当DF=0时,变址寄存器SI/DI增加1、2、4字节;即:变址寄存器SI/DI递增的步长可以是1、2、4字节;B.当DF=1时,变址寄存器SI/DI减少1、2、4字节;即:变址寄存器SI/DI递减的步长可以是1、2、4字节;一、取字符串数据指令(Load String Instruction)从指针DI:SI所指定的内存单元开始,取一个字节/字/双字,然后存入到AL/AX/EAX中,并根据标志位DF的值对寄存器SI 做相应的增减;把存放字符串数据的连续存储区当做是数据源,使用寄存器SI;该指令的执行不会影响任何标志位;指令格式: LODS 地址表达式LODSB/LODSW 地址表达式LODS 地址表达式;80386+在指令LODS中,它会根据"地址表达式"的属性来决定读取一个字节、字或双字;即:当该地址表达式的属性为字节、字或双字时,将从指针DI:SI处读取一个字节到AL中,或读取一个字到AX中,或读取一个双字到EAX中,与此同时,SI还将分别增减1、2、4字节;取字符串数据指令的功能示意图如下图所示:二、置字符串数据指令(Store String Instruction)该指令把寄存器AL/AX/EAX中的值存入指针ES:DI所指向内存单元开始的一片存储单元中,并根据标志位DF的值对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地,使用寄存器DI;该指令的执行并不会影响任何标志位;指令格式: STOS 地址表达式STOSB/STOSW 地址表达式STOSD 地址表达式;80386+置字符串数据指令的功能示意图如下图所示:三、字符串传送指令(Move String Instruction)该指令把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向的内存单元,并根据标志位DF的值对寄存器DI 和SI分别作相应的增减;该指令的执行并不会影响任何标志位;指令格式: MOVS 地址表达式1,地址表达式2MOVSB/MOVSW 地址表达式1,地址表达式2MOVSD 地址表达式1,地址表达式2 ;80386+字符串传送指令的功能示意图如下图所示:四、输入字符串指令(Input String Instruction)该指令是从某一指定端口接受一个字符串,并存入到一片连续的存储单元中;输入端口由寄存器DX指定,存储单元的首地址由指针ES:DI 来确定,读入的数据个数由寄存器CX来确定;在指令的执行过程中,还要根据标志位DF的值来对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地;该指令不会影响任何标志位;与指令有关的操作数ES、DI、DX和CX等都是隐含操作数; 指令格式: INS 地址表达式INSB/INSW 地址表达式INSD 地址表达式;80386+五、字符串输出指令(Output String Instruction)该指令是把一个给定的字符串输出到一个指定的端口中;输出端口由通用寄存器DX指定,输出数据的首地址由指针DS:SI确定,输出数据的个数由计数寄存器CX来确定;在指令执行的过程中,还要根据方向标志DF的值来对变址寄存器SI 做相应的增减;该指令的执行并不会影响任何标志位;与指令有关的操作数DS、SI、DX和CX等都是隐含操作数; 指令格式: OUTS 地址表达式OUTSB/OUTSW 地址表达式OUTSD 地址表达式;80386+六、字符串比较指令(Compare String Instruction)该指令是把指针DS:SI所指向的字节、字、双字的值与指针ES:DI 所指向的字节、字、双字的值相减,并用所得到的差来设置相关标志位;与此同时,变址寄存器SI和DI也将根据方向标志位DF的值做相应的增减;指令格式: CMPS 地址表达式1,地址表达式2CMPSB/CMPSW 地址表达式1,地址表达式2CMPSD 地址表达式1,地址表达式2 ;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串比较指令的功能示意图如下图所示:七、字符串扫描指令(Scan String Instruction)该指令是用指针ES:DI所指向字节/字/双字的值与相应的AL/AX/EAX的值相减,并依据所得到的差值来设置相关标志位;与此同时,变址寄存器DI还将根据方向标志DF的值来做相应的增减;指令格式: SCAS 地址表达式SCASB/SCASW 地址表达式SCASD 地址表达式;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串扫描指令的功能示意图如下图所示:八、重复字符串操作指令(Repeat String Instruction)前面的字符串操作指令:取字符串数据、置字符串数据、字符串传送、输入字符串、输出字符串、字符串比较、字符串扫描,等指令,都是执行一次所具有的功能;但是,每个字符串通常都是由多个字符组成的,所以,需要重复执行这些字符串操作指令;为了满足这种需要,指令系统提供了一组重复前缀指令;虽然在这些字符串指令的前面都可以添加一个重复前缀指令,但是由于指令执行结果的差异,对某个具体的字符串指令又不用重复前缀指令而改用其它循环来实现重复的需要;重复字符串操作指令对标志位的影响是由被重复的字符串操作指令来决定;1.重复前缀指令REP(Repeat String Instruction) 重复前缀指令是重复其后指定的字符串操作指令,重复的次数由计数寄存器CX来决定;指令格式:REP LODS/LODSB/LODSW/LODSDREP STOS/STOSB/STOSW/STOSDREP MOVS/MOVSB/MOVSW/MOVSDREP INS/INSB/INSW/INSDREP OUTS/OUTSB/OUTSW/OUTSD重复前缀指令的执行步骤如下:STEP1:判断: CX=0STEP2:如果CX=0,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响相关标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;从上面的重复前缀指令格式来看,虽然我们可以使用重复前缀指令来重复取字符串数据指令(第一组指令),但是可能会因为指令的执行结果而在程序中几乎不会使用;例如:编写一段程序,计算字符串"12345abcdefg"中各个字符的ASCII之和;解:......MESS DB '12345abcdefg' ;在数据段进行变量说明......MOV AX,SEG MESSMOV DS,AXLEA SI,MESS ;用DS:SI来指向字符串的首地址;MOV CX,13D ;重复次数XOR BX,BX ;置求和的初值为0REP LODSB ;循环去处字符; ......从程序片段中看,虽然"REP LODSB"能从字符串中逐一取出每个字符,但这个操作是在同一条指令中完成的,程序的其它指令根本无法处理每次取出的字符数据,指令的执行结果是:AL中只保存了最后一次取出的字符'h'的ASCII码;所以,为了实现本例的要求,不能使用重复前缀指令,而要把指令"REP LODSB"改写成如下四条指令:XOR AH,AH ;为后面的累加做准备AGAIN:LODSBADD BX,AX ;AL是被取出的字符,AH已被清0LOOP AGAIN2.条件重复前缀指令(Repeat String Conditionally) 条件重复前缀指令与重复前缀指令的功能相似,所不同的是:条件重复前缀指令中的重复次数不仅由CX来决定,而且还会由标志位ZF的值来决定;根据ZF所起的作用又可分为两种:相等重复前缀指令和不等重复前缀指令;A.相等重复前缀指令:指令格式:REPE/REPZ SCAS/SCASB/SCASW/SCASDREPE/REPZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件: CX!=0 且ZF=1STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行后,再转到步骤STEP1;B.不等重复前缀指令:指令格式:REPNE/REPNZ SCAS/SCASB/SCASW/SCASDREPNE/REPNZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件:CX!=0 且ZF=0STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;。
微机原理指令表和解释
LODSB;(字节传送)AL DS:[SI] SI [SI+-1]
LODSW;(字传送)AL DS:[SI] SI [SI+-2]
存串指令
STOSB;(字节传送)ES:[DI] AL DI [DI+-1]
STOSW;(字传送)ES:[DI] AX DI [DI+-2]
串比较指令
CMPSB;(字节传送)DS:[SI]- ES:[DI] SI [SI+-1] DI [DI+-1]
空操作指令nop做空操作用于延时暂停指令hlt程序暂停执行等待指令waitcpu引脚为高电平时执行封锁指令lock总线封锁cpu独占总线指令交权指令esc
1.传送类指令
MOV DEST,SRC;DEST(除CS)SRC
2.交换指令
XCHG DEST,SRC;DEST(寄存器)SRC
3.堆栈操作指令
PUCH SRC;SP SP-2将16位源操作数压入堆栈
AAA;加法运算十进制调整
AAS;减法运算十进制调整
10.逻辑指令
AND DEST,SRC;DEST DEST&&SRC
OR DEST,SRC;DEST DEST||SRC
NOT DEST;NOT!NOT
XOR DEST,SRC;DESTDEST异或SRC
测试指令
TEST DEST,SRC;将DEST&&SRC结果不送回DEST
REPNZ;每执行依次串指令CX(CX)-1 CX=0或ZF=1重复执行结束
14.无条件转移类指令
JMP DEST;无条件转移到DEST所指定的地址
15.循环指令
LOOP DEST;CXCX)-1直至CX=0结束循环
单片机讲义第7讲
22
第3章 AT89C51 指令系统
表3-5 位操作指令
助记符 类型 操作码 功能 字节 机器周期
位传送
MOV C,bit MOV bit,C
A2 bit 92 bit
C←(bit) bit←C
2 2
1 2
位修正
CLR C CLR bit CPL C CPL bit SETB C SETB bit ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit JC rel JNC rel JB bit, rel JNB bit, rel JBC bit, rel
12
第3章 AT89C51 指令系统 表3-4 控制转移类指令
13
第3章 AT89C51 指令系统
14
第3章 AT89C51 指令系统
1.无条件转移指令 无条件转移指令是指当程序执行到这条指令时,程 序将无条件地转移到指令指向的地址单元取指运行。 (1) AJMP为短转移指令。 2k (2) LJMP为长转移指令。 64K (3) SJMP为相对转移指令。 (-128 ~ +127) (4) “JMP @A+DPTR”为间接转移指令,用它可实 现分支转移。 注意: 转移范围 64K
DEC A JZ LABEL2
17
第3章 AT89C51 指令系统
2) 比较转移指令 这组比较指令的功能是将目的操作数的内容和源操作数的内容进行比较。 若不相等,则程序转移到目标地址;否则,则顺序执行程序。 CJNE CJNE CJNE CJNE A, direct, rel A, #data, rel Rn, #data, rel @Ri, #data, rel; 比较转移指令
第3章 MCS-51指令系
单片机技术及应用
3.3.2 数据传送类指令 • 数据传送类指令一般的操作是把源操作数传送到
单片机技术及应用
3.2.5 变址寻址
• 这种寻址方式用于访问程序存储器中的数据表格, 它把基址寄存器(DPTR或PC)和变址寄存器A的内 容作为无符号数相加形成16位的地址,访问程序
存储器中的数据表格。操作时是以某个寄存器的
内容为基础,然后在这个基础上再加上地址偏移
量,形成真正的操作数地址。需要特别指出的是, 用来作为基础的寄存器可以是PC或是DPTR,地 址偏移量存储在累加器A中。例如:
要操作数,因此在使用操作数的过程中就存在一个寻找存储 单元的问题。 MCS-51指令系统的寻址方式有下列几种: • ① 直接寻址。 • ② 立即数寻址。 • ③ 寄存器寻址。 • ④ 寄存器间接寻址。 • ⑤ 变址寻址。 • ⑥ 位寻址。 • ⑦ 相对寻址。
单片机技术及应用
3.2.1 直接寻址 • 在指令中含有操作数的直接地址,该地址指出了参与操作
单片机技术及应用
单片机技术及应用
第3章 MCS-51指令系
单片机技术及应用
教学提示 • 本章重、难点在于理解单片机MCS-51指令系统
的寻址方式,以及数据传送类指令、算术运算类 指令、逻辑操作类指令、位操作指令和控制转移 类指令操作的含义和具体使用方法。 教学目标 • 掌握指令系统的寻址方式。 • 掌握汇编语言指令的格式。 • 掌握汇编语言指令的功能及应用。 • 掌握伪指令的格式及应用。
微机原理接口技术03_指令系统
3.2.1 数据的寻址方式
基址变址寻址同样适用于数组或表格处理,首地 址存放在基址寄存器中,变址寄存器访问数组中各元
素。因两个寄存器都可以修改,所以它比寄存器相对
寻址方式更灵活。需要注意的是,两个寄存器不能均 为基址寄存器,也不能均为变址寄存器。
3.2.1 数据的寻址方式
7.基址变址相对寻址 (Relative Based Indexed Addressing) 操作数的有效地址为指令中规定的1个基址寄存 器和1个变址寄存器的内容及指令中指定的位移量三 者之和。 位移量[基址寄存器][变址寄存器] 可以表示成多种形式组合。寻址寄存器要放在方括 号中。
3.2.1 数据的寻址方式
4.寄存器间接寻址(Register Indirect Addressing) 操作数的有效地址存放在基址寄存器或变址寄存 器中,而操作数则在存储器中。对16位数进行寄存器 间接寻址时可用的寄存器是基址寄存器BX、BP和变 址寄存器SI、DI。使用BP时默认的段寄存器为SS, 使用其他寄存器默认的段寄存器为DS。 操作数有效地址格式为:[间接寻址的寄存器]。 寻址寄存器放在方括号中。
CPU执行指令时,指令是按顺序存放在存储器 中的,而程序执行顺序是由CS和IP的内容来决定的。 当程序执行到某一转移或调用指令时,需脱离程序 的正常顺序执行,而把它转移到指定的指令地址, 程序转移及调用指令通过改变IP和CS内容,就可改 变程序执行顺序。
3.2.2 程序转移地址寻址方式
根据程序转移地址相对于当前程序地址的关 系,可分为段内、段外;又根据转移地址是否直 接出现在指令中,分为直接、间接,所以有四种 程序转移寻址方式:段内直接寻址、段内间接寻
第3章
指令系统
指令是计算机用以控制各个部件协调
第3章.指令系统控制程序转移类指令new下
;3字节指令
同样地,使用时,可以将rel理解成标号,即: CJNE A,#data, 标号 CJNE A,direct,标号 CJNE Rn,#data,标号 CJNE @Ri,#data,标号
⑵比较(不相等)转移指令
① CJNE A,#data,rel
;先(PC)+3→PC
若(A)>#data,则(PC)+rel→PC,且0→CY; 若(A)<#data,则(PC)+rel→PC,且1→CY; 若(A)=#data,则顺序执行,且0→CY。
② rel为负数时,范围为:-128~-1 (80H~FFH)。
③相对转移指令“SJMP rel”
★正向跳转时: rel=目的地址-源地址-2
=地址差-2。
例如:
0157H
0100H:SJMP rel
设转移的地址为0157H,则: rel=0157H-0100H-2=55H。故该指令可写成:
0100H:SJMP 55H 其机器码为: 80H 55H
⑵位置1指令
SETB C SETB bit
; 1→ CY。 1字节指令 ;1→bit 。 2字节指令
2. 位修正指令
⑶位取反指令
CPL C
;(C)→C, 1字节指令
CPL bit ;(bit) → bit。 2字节指令
3. 位逻辑运算指令 ⑴位逻辑“与”指令 ANL C, bit ;(C) ∧ (bit)→C。 2字节指令 ANL C, /bit ;(C) ∧ (bit) →C。 2字节指令
; 否则顺序执行。
JNZ rel ;(PC)+2→PC。若A≠0,则转移到(PC)=(PC)+rel ;
;否则顺序执行。
串操作类指令(ppt 41页)
可将CLD改为STD吗?如何改用STOSB? 可不用给DI赋值吗?
第2章
串读取LODS(load string)
把指定主存单元的数据传送给AL或AX
LODSB LODSW
演示 ;字节串读取:AL←DS:[SI] ;SI←SI±1
;字串读取:AX←DS:[SI] ;SI←SI±2
例2.54:串读取-1
REP 前 缀 可 以 理 解 为 : 当 数 据 串 没有结束(CX≠0),则继续传送
例2.52和例2.53中,程序段的最后 3条指令,可以分别替换为:
REP MOVSB 和 REP STOSW
第2章
REPZ重复前缀指令
REPZ
;每执行一次串指令,CX减1 ;并判断ZF是否为0, ;只要CX=0或ZF=0,重复执行结束
串操作指令的操作对象是以字 (W)为单位的字串,或是以字节 (B)为单位的字节串
第2章
串寻址方式
源操作数用寄存器SI寻址,默认在数据段 DS中,但允许段超越:DS:[SI]
目的操作数用寄存器DI寻址,默认在附加段 ES中,不允许段超越:ES:[DI]
每执行一次串操作指令,SI和DI将自动修改:
事实上,NOP和XCHG AX,AX的指令 代码一样,都是 90H
第2章
段超越前缀指令
在允许段超越的存储器操作数之 前,使用段超越前缀指令,将采 用指定的段寄存器寻址操作数
CS: ;使用代码段的数据
SS: ;使用堆栈段的数据
DS: ;使用数据段的数据
ES: ;使用附加段的数据
第2章
封锁前缀指令
±1(对于字节串)或±2(对于字串)
执行指令CLD指令后,DF = 0,地址指针 增1或2
串操作类指令
在SCAS指令前加有REPNE/REPNZ前缀,则表示:当串未结尾 (CX≠0)且串元素≠关键值(ZF=0)时继续搜索,直到CX=0或ZF= 1才执行下一条指令。 --可以用来在一个串中查出某一指定元素。
指令格式:SCAS OPRD SCASB ;搜索字节串 SCASW ;搜索字串 SCASD ;搜索双字串 SCASQ ;搜索4字串
功能:将累加器(AL或AX或EAX或RAX )中的内容与ES:DI(EDI 、 RDI )指定的目标串元素(字节或字或双字或4字)进行比较(减法操 作),用标志位反映比较的结果,而不改变累加器和目标串的内容,达 到字符串搜索的目的,同时自动修改指针DI。
若CMPS指令前加上前缀REPE/REPZ,则表示:当串未结尾(CX≠0) 且串相等(ZF=1)时继续比较;
如果CMPS用REPNE/REPNZ作前缀,则表示:当串未结尾 (CX≠0)且串不相等(ZF=0)时继续比较。
2009年6月2日星期二
7
例:比较两个字符串是否有相同的元素,它们的首地址和目标地址分别 为SRC和DST,字符串的长度为N个字节。
GO_ON:
MOVSD
DEC
CX
JNZ
GO_ON
若采用重复前缀,则上述程序简化为:
LEA SI,SOURCE
LEA DI,DEST
MOV ECX,50
;设置循环操作次数
CLD
;设置方向标志DF=0
REP MOVSD
2009年6月2日星期二
6
(2)串比较指令 CMPS/CMPSB/CMPSW/CMPSD/CMPSQ
【免费下载】单片机 第3章 李朝青
操作注释dataH→DPH dataL→DPL 将高8位立即数数dataL送入DPLDPH和DPL组成。
(DPH)=10H,(DPL)=00H所示:图3-8 外部数据存储器传送操作(30H)=02H,执行下面程序 MOV MOV MOV指令提供16位目标地址,将指令的第二、第三字节地址码分别装入PC的高8位和低8位中,程序无条件转向指定的目标地址去执行。
由于直接提供16位目标地址,所以程序可转向64K程序存储器地址空间的任何单元。
(3) 相对转移(短转移)指令SJMP rel ;先(PC)+2 →PC后(PC)+rel →PC指令的操作数是相对地址,rel是一个带符号的偏移字节数(2的补码),其范围为-128~+127(00H~7FH对应表示0~+127,80H~FFH对应表示-128~-1),负数表示反向转移,正数表示正向转移。
该指令为二字节,执行时先将PC内容加2,再加相对地址,就得到了转目标地址。
例如,在(PC)=0100H地址单元有条“SJMP rel”指令,若rel=55H(正数),则正向转移到0102H+0055H=0157H地址上;若rel=F6H(负数)则反向转移到0102H+FFF6H=00F8H地址上。
在用汇编语言程序是,rel可以是一个转移目的地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数2得到偏移字节数rel。
(4) 间接转移指令JMP @A+DPTR;(A)+(DPTR)PC该指令的转移地址由数据指针DPTR的16位数和累加器A的8位数作无符号数相加形成,并直接送入。
指令执行过程对DPTR、A和标志位均无影响。
这条指令可代替众多的判别跳转指令,具有散转功能。
例如:根据累加器A中命令键键值,设计命令键操作程序入口跳转表:CLR C ;清进位RLC A ;键值乘2MOV DPTR,#JPTAB;指向命令键跳转表首址JMP @A+DPTR ;散转入命令键入口JPTAB:AJMP CCS0 ;双字节指令AJMP CCS1AJMP CCS2从程序中看出,当(A)=00H时,散转到CCS0;当(A)=01H时,散转到CCS1;……。
第3章 80C51单片机的寻址方式和指令系统
(2)算术运算类指令(24条);
(3)逻辑运算及移位类指令(24条); (4)控制转移类指令(17条); (5)位操作类指令(17条)。
6
本节内容
3.1.1 汇编语言指令格式 3.1.2 机器码的三种格式 3.1.3 指令中常用符号说明
7
3.1.1 汇编语言指令格式
3.4.1 加法指令 3.4.2 减法指令 3.4.3 乘、除法指令
3.5 逻辑运算及移位类指令(24条)
3.5.1 逻辑与运算指令 3.5.2 逻辑或运算指令
3
第2章:80C51系列单片机基本结构及原理
3.5.3 逻辑异或运算指令 3.5.4 累加器清零、取反指令 3.5.5 循环移位指令
目录
3.6 控制转移类指令(17条)
解:指令执行过程如图3-3,结果:(A)= 60H 。 指令在ROM中的机器码为E8H,指令对应的机器码是:E8H=1110 1000B,二进 制的后三位000就是隐含的R0寄存器的编码,如果是R7其编码为111。 由于寄存器在CPU内部,所以采用寄存器寻址可以获得较高的运算速度。
31
32
能实现这种寻址方式的寄存器有: (1)工作寄存器 R0~R7 (4组工作寄存器均可) (2)累加器A (注:使用A为寄存器寻址,使用ACC为直接寻址) (3)寄存器B (注:以AB寄存器对的形式出现时为寄存器寻址,单独出现
一条完整的汇编语言指令通常由标号、操作码、操作数 (一般包括目的操作数和源操作数)及指令的注释构成。 指令格式: [标号:] <操作码> [操作数] [,操作数][;注释]
说明:
①在一条指令中,方括号中的内容可有可无,尖括号中的内容 必须有。
第三章MCS-51指令系统
3.1 概述
3.2
3.3
寻址方式
MCS-51的指令系统
3.4
伪指令
3.1
概述
指令:使计算机完成某种操作的命令。 指令系统 :计算机能够执行的全部操作所对应的指 令集合。 机器语言: 采用二进制编码表示指令,是计算机能够直 接识别和执行的语言。 汇编语言: 采用助记符 、符号、数字来表示指令的程序 语言,它与机器语言指令时一一对应的。
如果我们分别向DPH,DPL送数,则结果也一样。
如下面两条指令: 则就相当于执行了 MOV DPH,#35H MOV DPTR,#3512H。 MOV DPL,#12H。
(6) 累加器A与片外RAM之间的数据传递类指令(4条)
MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器。所 有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外 部RAM中的数据也必需通过A读入。 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接 进行数据的传递,而外部则不行。 比如,要将外部RAM中某一单元(设为0100H单元的数据)送 入另一个单元(设为0200H单元),也必须先将0100H单元中的内 容读入A,然后再送到0200H单元中去。
MOV B,R0
PUSH ACC
;R0→B,R0为寄存器寻 址,B为直接寻址。
;A的内容压入堆栈
3.2.4
寄存器间接寻址
例:MOV A, @R0
• 以寄存器中内容为地址,以该地址中内容为操作数的
寻址方式。间接寻址的存储器空间包括内部RAM和
外部RAM。 • 能用于寄存器间接寻址的寄存器有R0,R1,DPTR, SP。其中R0、R1必须是工作寄存器组中的寄存器。 SP仅用于堆栈操作。
大学_《微型计算机原理及应用》(吴宁著)课后习题答案下载
《微型计算机原理及应用》(吴宁著)课后习题答案下载《微型计算机原理及应用》(吴宁著)内容提要目录第1章计算机基础1.1 数据、信息、媒体和多媒体1.2 计算机中数值数据信息的表示1.2.1 机器数和真值1.2.2 数的表示方法——原码、反码和补码1.2.3 补码的运算1.2.4 定点数与浮点数1.2.5 BCD码及其十进制调整1.3 计算机中非数值数据的信息表示1.3.1 西文信息的表示1.3.2 中文信息的表示1.3.3 计算机中图、声、像信息的表示1.4 微型计算机基本工作原理1.4.1 微型计算机硬件系统组成1.4.2 微型计算机软件系统1.4.3 微型计算机中指令执行的基本过程 1.5 评估计算机性能的主要技术指标1.5.1 CPU字长1.5.2 内存储器与高速缓存1.5.3 CPU指令执行时间1.5.4 系统总线的传输速率1.5.5 iP指数1.5.6 优化的内部结构1.5.7 I/O设备配备情况1.5.8 软件配备情况习题1第2章 80x86/Pentium微处理器2.1 80x86/Pentium微处理器的内部结构 2.1.1 8086/8088微处理器的基本结构2.1.2 80386CPU内部结构2.1.3 80x87数学协处理器2.1.4 Pentium CPU内部结构2.2 微处理器的主要引脚及功能2.2.1 8086/8088 CPU引脚功能2.2.2 80386 CPU引脚功能2.2.3 Pentium CPU引脚功能2.3 系统总线与典型时序2.3.1 CPU系统总线及其操作2.3.2 基本总线操作时序2.3.3 特殊总线操作时序2.4 典型CPU应用系统2.4.1 8086/8088支持芯片2.4.2 8086/8088单CPU(最小模式)系统 2.4.3 8086/8088多CPU(最大模式)系统 2.5 CPU的工作模式2.5.1 实地址模式2.5.2 保护模式2.5.3 虚拟8086模式2.5.4 系统管理模式2.6 指令流水线与高速缓存2.6.1 指令流水线和动态分支预测2.6.2 片内高速缓存2.7 64位CPU与多核微处理器习题2第3章 80x86/Pentium指令系统3.1 80x86/Pentium指令格式3.2 80x86/Pentium寻址方式3.2.1 寻址方式与有效地址EA的概念 3.2.2 各种寻址方式3.2.3 存储器寻址时的段约定3.3 8086/8088 CPU指令系统3.3.1 数据传送类指令3.3.2 算术运算类指令3.3.3 逻辑运算与移位指令3.3.4 串操作指令3.3.5 控制转移类指令3.3.6 处理器控制类指令3.4 80x86/Pentium CPU指令系统3.4.1 80286 CPU的增强与增加指令 3.4.2 80386 CPU的增强与增加指令 3.4.3 80486 CPU增加的指令3.4.4 Pentium系列CPU增加的指令 3.5 80x87浮点运算指令3.5.1 80x87的数据类型与格式3.5.2 浮点寄存器3.5.3 80x87指令简介习题3第4章汇编语言程序设计4.1 程序设计语言概述4.2 汇编语言的程序结构与语句格式 4.2.1 汇编语言源程序的框架结构4.2.2 汇编语言的语句4.3 汇编语言的伪指令4.3.1 基本伪指令语句4.3.2 80x86/Pentium CPU扩展伪指令 4.4 汇编语言程序设计方法4.4.1 程序设计的基本过程4.4.2 顺序结构程序设计4.4.3 分支结构程序设计4.4.4 循环结构程序设计4.4.5 子程序设计与调用技术4.5 模块化程序设计技术4.5.1 模块化程序设计的特点与规范4.5.2 程序中模块间的关系4.5.3 模块化程序设计举例4.6 综合应用程序设计举例4.6.1 16位实模式程序设计4.6.2 基于32位指令的实模式程序设计 4.6.3 基于多媒体指令的实模式程序设计 4.6.4 保护模式程序设计4.6.5 浮点指令程序设计4.7 汇编语言与C/C 语言混合编程4.7.1 内嵌模块方法4.7.2 多模块混合编程习题4第5章半导体存储器5.1 概述5.1.1 半导体存储器的分类5.1.2 存储原理与地址译码5.1.3 主要性能指标5.2 随机存取存储器(RAM)5.2.1 静态RAM(SRAM)5.2.2 动态RAM(DRAM)5.2.3 随机存取存储器RAM的应用5.3 只读存储器(ROM)5.3.1 掩膜ROM和PROM5.3.2 EPROM(可擦除的PROM)5.4 存储器连接与扩充应用5.4.1 存储器芯片选择5.4.2 存储器容量扩充5.4.3 RAM存储模块5.5 CPU与存储器的典型连接5.5.1 8086/8088 CPU的'典型存储器连接5.5.2 80386/Pentium CPU的典型存储器连接 5.6 微机系统的内存结构5.6.1 分级存储结构5.6.2 高速缓存Cache5.6.3 虚拟存储器与段页结构习题5第6章输入/输出和中断6.1 输入/输出及接口6.1.1 I/O信息的组成6.1.2 I/O接口概述6.1.3 I/O端口的编址6.1.4 简单的I/O接口6.2 输入/输出的传送方式6.2.1 程序控制的输入/输出6.2.2 中断控制的输入/输出6.2.3 直接数据通道传送6.3 中断技术6.3.1 中断的基本概念6.3.2 中断优先权6.4 80x86/Pentium中断系统6.4.1 中断结构6.4.2 中断向量表6.4.2 中断响应过程6.4.3 80386/80486/Pentium CPU中断系统6.5 8259A可编程中断控制器6.5.1 8259A芯片的内部结构与引脚6.5.2 8259A芯片的工作过程及工作方式 6.5.3 8259A命令字6.5.4 8259A芯片应用举例6.6 82380可编程中断控制器6.6.1 控制器功能概述6.6.2 控制器主要接口信号6.7 中断程序设计6.7.1 设计方法6.7.2 中断程序设计举例习题6第7章微型机接口技术7.1 概述7.2 可编程定时/计数器7.2.1 概述7.2.2 可编程定时/计数器82537.2.3 可编程定时/计数器82547.3 可编程并行接口7.3.1 可编程并行接口芯片8255A7.3.2 并行打印机接口应用7.3.3 键盘和显示器接口7.4 串行接口与串行通信7.4.1 串行通信的基本概念7.4.3 可编程串行通信接口8251A7.4.3 可编程异步通信接口INS82507.4.4 通用串行总线USB7.4.5 I2C与SPI串行总线7.5 DMA控制器接口7.5.1 8237A芯片的基本功能和引脚特性 7.5.2 8237A芯片内部寄存器与编程7.5.3 8237A应用与编程7.6 模拟量输入/输出接口7.6.1 概述7.6.2 并行和串行D/A转换器7.6.3 并行和串行A/D转换器习题7第8章微型计算机系统的发展8.1.1 IBM PC/AT微机系统8.1.2 80386、80486微机系统8.1.3 Pentium及以上微机系统8.2 系统外部总线8.2.1 ISA总线8.2.2 PCI局部总线8.2.3 AGP总线8.2.4 PCI Express总线8.3 网络接口与网络协议8.3.1 网络基本知识8.3.2 计算机网络层次结构8.3.3 网络适配器8.3.4 802.3协议8.4 80x86的多任务保护8.4.1 保护机制与保护检查8.4.2 任务管理的概念8.4.3 控制转移8.4.4 虚拟8086模式与保护模式之间的切换 8.4.5 多任务切换程序设计举例习题8参考文献《微型计算机原理及应用》(吴宁著)目录本书是普通高等教育“十一五”国家级规划教材和国家精品课程建设成果,以教育部高等学校非计算机专业计算机基础课程“基本要求V4.0”精神为指导,力求做到“基础性、系统性、实用性和先进性”的统一。
51单片机 第三章指令系统
10
3.2.5 变址寻址方式
1.
变址寻址方式是以程序计数器PC或数据指针 DPTR作为基址寄存器,以累加器A作为变址寄 存器,它们两者内容之和为有效地址。 寻址范围:
程序存储器空间。
2.
3.
变址寻址方式的指令只有3条:
⑴ MOVC A, @A+DPTR ⑵ MOVC A, @A+PC ⑶ JMP @A+DPTR ; 查表指令 ; 查表指令 ; 散转指令
⑴ 低128个存储单元,8-bit二进制数表示地址。 ⑵ 特殊功能寄存器,用直接地址或称号表示。
2.
3.
例如,指令 MOV A, 30H
; A ← (30H)
8
3.2.3 寄存器间接寻址方式
1.
寄存器间接寻址时,指令中给出的寄存器为地 址指针。 寻址范围:
⑴ 片内和片外RAM 256单元,用R0或R1间接寻址。
34
4.
除法
整数部分
DIV AB
A
被除数
X B
除数
商
A
B
余数部分
除数为0,商的A和B内容不确定,且(OV)=1 。 标志Cy总是被清0。 例: 若(A)=FBH(251),(B)=12H (18),执行指令 DIV AB 之后,(A)=0DH, (B)=11H,(OV)=0,(Cy)=0。
35
3.3.3 逻辑运算及移位类指令
例: 若(A)=C3H,(R0)=AAH,执行指令 ANL A, R0 之后,(A)=82H。
37
逻辑或 源操作数与直接地址单元内容相或
ORL direct, A #data
源操作数与累加器A的内容相或
寄存器存储、存储器存储(主存),立即数
操作数存储位置只有三种:寄存器存储、存储器存储(主存),立即数指令按功能可分为6大类
一、数据传送指令
二、算术运算指令
三、逻辑指令
四、串操作类指令
串的寻址方式均使用以下方式:
源串操作数地址由DS:[SI]表示(DS可以有其他段寄存器替代)
目的串操作数地址由ES:[DI]表示(ES不可替代)
修改SI/DI的规则:
若标志寄存器中DF=0,那么SI/DI加2(字串)或加1(字节串),否则减2(字串)或减1(字节串)
五、控制转移类指令
(1)无条件转移指令JMP三种格式
(2)条件转移指令(参考P102表)
(3)循环指令
(4)子程序调用与返回指令
(5)中断及中断返回指令
六、处理机控制类指令。
《汇编语言》PPT课件
机
原
理 例3-3
ORG 1000H
及
DW
1234H
应 用 编
SJ_DATA: DW
56H,2000
经汇编后,从地址1000H处存贮器的内容为:
著
〔1000H〕= 12H
组
〔1001H〕= 34H
〔1002H〕= 00H
〔1003H〕= 56H
〔1004H〕= 07H
§3.1.2 汇编伪指令
湘 四、EQU 赋值伪指令 潭 字符名称 EQU 项〔数或汇编符号〕
;〔35H〕 A
MOV DPTR,#DPTRA ;0AA00H DPTR
§3.1.2 汇编伪指令
湘 七、BIT定义位地址符号伪指令 潭 字符名称 BIT 位地址
大 学
这里的"字符名称"与标号不同〔其后没有冒号〕,但
单 它是必须的,其功能是把BIT之后的"位地址"值赋给"字
片 机
符名称".
原 理
例3-6:
潭 大
[标号:] DB X1、 X2 … Xn
学
ORG 1000H
单
DB
片
SJ-DATA: DB
0AAH 25,25H
机
ZFC-DATA: DB
'MCS-51'
原
理 及 应 用 编 著
经汇编后,从地址1000H处存贮器的内容为: 〔1000H〕= AAH 〔1001H〕= 19H 〔1002H〕= 25H 〔1003H〕= 4DH
用
编 著 组
eg: MOV MOV MOV
P1,A 70H ,R2 0E0H,78H
; MOV 90H,A ; (A)
串操作类指令
mov di,offset string2
mov cx,count
cld
repz cmpsb ;重复比较两个字符
jnz unmat ;字符串不等,转移
mov al,0
;字符串相等,设置00h
jmp output ;转向output
unmat: mov al,0ffh ;设置ffh
output: mov result,al ;输出结果标记 解释
➢把字节或字操作数从主存的源地 址传送至目的地址
MOVSB MOVSW
演示
;字节串传送:ES:[DI]←DS:[SI] ;SI←SI±1,DI←DI±1
演示
;字串传送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2
offset是汇编操作符, 求出变量的偏移地址
例2.52:字节串传送
LOCK/HLT/ESC/WAIT 5. 习题4(p70) 2.15 2.16 2.26 ⑶ ⑹ ⑺
➢ 重复前缀分2类,3条指令:
配合不影响标志的MOVS、STOS(和 LODS)指令的REP前缀
配合影响标志的CMPS和SCAS指令的 REPZ和REPNZ前缀
第2章
REP重复前缀指令
REP
;每执行一次串指令,CX减1
;直到CX=0,重复执行结束
➢REP前缀可以理解为:当数据串 没有结束(CX≠0),则继续传送
LODSB LODSW
演示 ;字节串读取:AL←DS:[SI] ;SI←SI±1
;字串读取:AX←DS:[SI] ;SI←SI±2
例2.54:串读取-1
mov si,offset block mov di,offset dplus mov bx,offset dminus mov ax,ds mov es,ax ;数据都在一个段中,所以设置es=ds mov cx,count ;cx←字节数 cld
控制指令
大于/不小于也不等于 转移 大于 不小于也不等于 大于或等于/不小于 大于或等于 不小于 转移 小于/不大于也不等于 小于 不大于也不等于 转移 小于或等于/不大于 小于或等于 不大于 转移
X>Y X≥Y X<Y X≤Y
指令格式
JC
标号
转移条件
转移说明 进位位为1 进位位为 进位位为0 进位位为 等于/结果为 结果为0 等于 结果为 不等于/结果不为 结果不为0 不等于 结果不为 转移 转移 转移 转移
其他说明
CF=1 JNC 标号 CF=0 JE/JZ 标号 ZF=1 JNZ/JNE 标号 ZF=0 JO 标号 JNO 标号 JNP/JPO 标号 JP/JPE 标号 JNS 标号 JS 标号 OF=1 OF=0 PF=0 PF=1 SF=0 SF=1
单个标 志
溢出 转移 不溢出 转移 奇偶位为0/奇偶位为奇 奇偶位为奇转移 奇偶位为 奇偶位为奇转移 奇偶位为1/奇偶位为偶 奇偶位为偶转移 奇偶位为 奇偶位为偶转移 符号标志位为0 符号标志位为 转移 符号标志位为1 符号标志位为 转移
重复(循环) 重复(循环)控制指令举例
检查当前数据段所在的64K内存单元能否正确的读写。 检查当前数据段所在的64K内存单元能否正确的读写。 64K内存单元能否正确的读写 XOR CX,CX XOR BX,BX MOV AL,55H MOV [BX],AL INC BX CMP [BX-1],AL LOOPZ CHECK JCXZ RIGHT …
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
2.串比较指令CMPS 2.串比较指令CMPS 串比较指令 语句格式: 语句格式: ① CMPS SRC, SRC,DST CMPSB——字节串比较 ② CMPSB 字节串比较 CMPSW——字串比较 ③ CMPSW 字串比较
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
当相等/为 时重复串操作 (2) REPE/REPZ 当相等 为0时重复串操作 )
格式: 格式:REPE/REPZ string primitive (用来检查两字符串中是否 其中string primitive可为 可为CMPS或SCAS指令 有不同的元素 ) 其中 可为 或 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0或ZF=0(即某次比较的结果两个操 ) 或 ( 作数不等)时退出REP,否则(即某次比较的结果两个操作数相等) 作数不等)时退出 ,否则(即某次比较的结果两个操作数相等) 往下执行。 往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。 总结:重复串操作条件: 总结:重复串操作条件: (COUNT REG)≠0且ZF=1; (即某次 ) 且 ; 比较的结果两个操作数相等) 比较的结果两个操作数相等) 退出串操作条件: 退出串操作条件: (COUNT REG)=0或ZF=0; 串操作条件 ) 或 ;
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
关于重复前缀的设置: 关于重复前缀的设置: (1)REP重复串操作直到计数寄存器(Count Reg)的内容为 重复串操作直到计数寄存器( 的内容为0 重复串操作直到计数寄存器 的内容为 为止。 为止。 格式: string primitive 格式:REP 其中string primitive为MOVS,LODS,STOS,INS和OUTS指令 其中 为 , , , 和 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0,则退出 ) ,则退出REP,否则往下执行。 ,否则往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。
串传送指令MOVS 1. 串传送指令MOVS 语句格式: 语句格式: ① MOVS DST, DST,SRC MOVSB——字节串传送 ② MOVSB 字节串传送 MOVSW——字串传送 ③ MOVSW 字串传送 MOVSD——双字串传送 4 MOVSD 双字串传送 功能:将以SI SI( ESI)为指针的源串中的一个字节(或字、 功能:将以SI(或ESI)为指针的源串中的一个字节(或字、双 存储单元中的数据传送至以DI DI( EDI) 字)存储单元中的数据传送至以DI(或EDI)为指针的目的地址 中去,并自动修改指针,使之指向下一个字节(或字、双字) 中去 , 并自动修改指针 , 使之指向下一个字节 ( 或字 、 双字 ) 存储单元。 存储单元。 即:① ES:[DI] ←(DS:[SI]) ES: DS:[SI]) DF=0 SI) DI)增量。 ② 当DF=0时,(SI)和(DI)增量。(+1或+2或+4) 或 或 ) 当DF=1时,(SI)和(DI)减量。 DF=1 SI) DI)减量。 (-1或-2或-4) 或 或 )
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
表 3-11 字符串操作指令和重复前缀
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
(清华)图3.2 串操作流程图 清华)
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
个数据, 例:有100个数据,从地址为 个数据 从地址为adr1单元区传送到 单元区传送到 地址为adr2单元区,编出程序段: 单元区, 地址为 单元区 编出程序段: MOV SI, OFFSET adr1 MOV DI, OFFSET adr2 MOV CX, 64H CLD AGAIN: MOVS adr2, adr1 DEC CX JNZ AGAIN HLT
REPNE/REPNZ 不相等 不为零则重复 不相等/不为零则重复 串处理指令处理存放在存储器里的数据串, 串处理指令处理存放在存储器里的数据串,所有 串指令都可以处理字节或字, 返回本节首页 串指令都可以处理字节或字,386及其后继机型 及其后继机型 还可处理双字。 还可处理双字。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
NEXT:
CLD NEXT: MOVSB
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
例(p55) 个数据, 例:有100个数据,从地址为 个数据 从地址为adr1单元区传送到地址为 单元区传送到地址为 adr2单元区,编出程序段: 单元区, 单元区 编出程序段: MOV SI, OFFSET adr1 MOV DI, OFFSET adr2 MOV CX, 64H CLD AGAIN: MOVS adr2, adr1 DEC CX JNZ AGAIN HLT
所有这类字符串的操作指令: 所有这类字符串的操作指令 都用寄存器SI寻址源操作数 段址在数据段DS中 寻址源操作数, 都用寄存器 寻址源操作数,段址在数据段 中; 寄存器DI寻址目的操作数 并且段地址在附加段ES 寻址目的操作数, 寄存器 寻址目的操作数,并且段地址在附加段 中, 两个地址指针在每一次操作以后要自动修改, 两个地址指针在每一次操作以后要自动修改,是按增 量修改还是按减量修改,这取决于标志寄存器中DF位 量修改还是按减量修改,这取决于标志寄存器中 位。 寄存器每处理一个字节( 若DF为0时,SI和DI寄存器每处理一个字节(或字) 为 时 和 寄存器每处理一个字节 或字) 就增加(字节操作时加1,字操作时加2),反之, ),反之 就增加(字节操作时加 ,字操作时加 ),反之,当 DF为1时就减小。 为 时就减小。 时就减小 DF标志位可用 标志位可用STD和CLD指令直接设置和复位。 指令直接设置和复位。 标志位可用 和 指令直接设置和复位 如果源字符串和目的字符串在同一个段中操作, 如果源字符串和目的字符串在同一个段中操作,则把 DS和ES设置成相同数值,即把 段更改为附加段。 设置成相同数值, 段更改为附加段。 和 设置成相同数值 即把DS段更改为附加段 8086指令系统提供了五个串操作指令和一种重复前缀, 指令系统提供了五个串操作指令和一种重复前缀, 指令系统提供了五个串操作指令和一种重复前缀 如表3.11所示。 所示。 如表 所示
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
第三章 80x86的指令系统和寻址方式 五) 的指令系统和寻址方式(五
串操作指令 五 串操作指令
p53
返回目录
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
五 串处理指令 数据传送、运算类指令每次只能处理一个数据, 数据传送、运算类指令每次只能处理一个数据,若要处理大批 数据就需要重复编程,这样就浪费了大量的时间和空间。 数据就需要重复编程,这样就浪费了大量的时间和空间。 为此8086/8088提供了一组处理主存中连续存放数据串的指令, 提供了一组处理主存中连续存放数据串的指令, 为此 提供了一组处理主存中连续存放数据串的指令 这就是串处理(串操作)指令。 这就是串处理(串操作)指令。
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
当不相等/不为 不为0时重复串操作 (3) REPNE/REPNZ 当不相等 不为 时重复串操作 )
格式: 格式:REPNE / REPNZ string primitive (用来检查两字符串中 其中string primitive可为 可为CMPS或SCAS指令 是否有相同的元素 ) 其中 可为 或 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0或ZF=1(即某次比较的结果两个操 ) 或 ( 作数相等)时退出REP,否则(即某次比较的结果两个操作数不等) 作数相等)时退出 ,否则(即某次比较的结果两个操作数不等) 往下执行。 往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。 总结:重复串操作条件: 总结:重复串操作条件: (COUNT REG)≠0且ZF=0; (即 ) 且 ; 某次 比较的结果两个操作数不等) 比较的结果两个操作数不等) 退出串操作条件: 退出串操作条件: (COUNT REG)=0或ZF=1; 串操作条件 ) 或 ;
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
[例] 将数据段 例 将数据段BUF1起始的 起始的100字节的数据移动到 起始的 字节的数据移动到 BUF2起始的存储区中.(用串指令) 起始的存储区中.(用串指令) 起始的存储区中.(用串指令
MOV CX,100 LEA SI,BUF1 LEA DI,BUF2 MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ NEXT