例9-1 段内直接短转移
微机原理习题课_1
提示:一个正数与负数相加,结果肯定不溢出
10
三、汇编指令 •汇编语言有三种基本语句:指令语句、伪指令语句、宏指令语句。 •指令语句=操作指令+操作数(可隐含) 汇编器如何找到操作数——寻址方式: (1)在数据存储器中,指令中如何提供操作数或操作数地址的方式。 (2)在程序存储器中,程序转移时需提供转移地址,这也称为寻址。
短标号,即位移量在-128~127的范围内。
注意:在编制大的循环程序时要注意跳转范围的限制问题,否则会出现以下的编译问题。
因此要求在编制程序时要做到短小精悍,简洁易读 提示:条件转移指令往往与逻辑指令,移位指令,CMP等指令相配合。
28
习题3.2
若WORD1及WORD2均为字变量,ADDITION为标号,请说明下列指令的错误之处:
12
例题 要点:理解各段与寄存器的概念,正确使用寻址方式。
例: (1)直接、间接、立即三种寻址方式的执行速度由快至慢依次为:
(2)下列指令中立操即作、数直在接代、码间段接中的是
A.MOV AL,25H
B.ADD AL,BH
C.CMP AX,[BP]
D.INC DS:[BP]
A
13
要点1:寄存器不能随便使用
若已知下一条指令到所跳转地址的相对位移量–128~+127,则可用标号SHORT
➢可以不定义SHORT NEXT:
… JMP NEXT
➢必须定义SHORT JMP SHORT NEXT …
NEXT: …
24
③段内间接转移:16位相对位移量 JMP reg或JMP mem MOV BX, 1000H JMP BX JMP WORD PTR [BX+20H] ④段间直接转移:32位相对位移量(CS:IP) JMP FAR PTR label, ⑤段间间接转移:32位相对位移量(CS:IP), JMP mem MOV SI, 0100H JMP DWORD PTR [SI]
中南大学《微型机原理与汇编语言》课程作业(在线作业)三及参考答案
(一) 单选题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.常用的循环控制方法有()。
微机原理 逻辑运算与位移类指令
和PF,对AF未定义。NOT指令不影响状态标志位。
[例] MOV AL,75H AND AL,32H OR AL,71H XOR AL,0F1H NOT AL
;AL75H ;AL30H,CF=OF=0、SF=0、ZF=0、PF=1 ;AL71H,CF=OF=0、SF=0、ZF=0、PF=1 ;AL80H,CF=OF=0、SF=1、ZF=0、PF=0 ;AL7FH,不改变状态标志位
Jcc LABEL
;条件满足,发生转移:
;IPIP+8位的位移量;
;否则,顺序执行。
注意:
① 条件转移指令Jcc只支持段内短转移的寻址方式,只能实 现段内-128~127个单元范围的跳转,其间共有多少条指令是不 确定的。
② 条件转移指令不影响标志,但利用状态标志作为控制转 移的条件。Jcc中的cc表示利用标志判断的条件。同一条指令可 能有多个助记符形式,这只是为了利于记忆,方便使用。
➢逻辑运算与移位类指令
当需要对字节或字数据中的各个二进制位进行操作时,可
以考虑采用逻辑运算与移位类指令。
ADD、ADC、SUB、SBB、CMP和AND、OR、XOR、TEST具有相同
的指令格式:
运算指令助记符
reg,imm/reg/mem
运算指令助记符
mem,imm/reg
以上格式表明了操作数的寻址方式。也可统一表示为:
……
JMP指令
JMP执行后 IP =
代码段
Disp=08H
EBH 0100H 08H 0101H
0102H
...... Disp=08H
MOV指令
B0H 010AH(HELLO) 新的IP
03H 010BH
2)段内直接近转移
4.5 程序控制类指令
•根据两个无符号数比较结果转移
•JBE(JNA): ZF∨CF=1 则转移 •JNBE(JA): (ZF =0)∧(CF=0 )则转移
•比较两个带符号数,并根据比较结果转移
•JL(JNGE): SF OF=1 且ZF=0则转移
•JNL(JGE): SF OF=0或ZF=1则转移 •JLE(JNG): SF OF=1或ZF=1则转移 •JNLE(JG): SF OF=0 且ZF=0则转移
I P LOP2的段内偏移地址
CS LOP2的段地址
段间间接转移
JMP DWORD PTR [BX] I P [BX] CS [BX+2]
条件转移指令
形式: JX 短目标地址 X :1~3个英文字母,表示条件。 跳转范围: -128~+127字节(只有短转移,是相 对转移 ) 功能: 当指令中给出的条件满足时转移,可分 为依据单个标志位的条件转移指令和依据若干 个标志位组合的条件转移指令。
(1)、 CALL( Call a procedure)调用
段内直接调用
CALL addr(16位);一般用标号表示如:
CALL subp1; subp1为具有near属性的标号
段间直接调用 CALL addr(32位);一般用标号表示,如:
CALL subp; subp为具有far属性的标号
间接调用:
•测试CX的值为零转移 :JCXZ
例1
、比较1000H、1001单元的两个数,将大数
存2000H单元中。
MOV BX,1000H ;第一数送AL MOV AL, [BX] INC BX ;指向第二数 CMP AL,[BX] ;两数比较 JA LOP1 ;大于转 MOV AL,[BX] ;大数AL送 LOP1:MOV [2000H],AL HLT
钱晓捷新版汇编语言程序设计习题答案(1-4)
钱晓捷新版汇编语⾔程序设计习题答案(1-4)钱晓捷新版汇编语⾔程序设计习题答案第⼀章汇编语⾔基础知识1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志进位标志表⽰⽆符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表⽰有符号数运算结果是否超出范围,运算结果已经不正确?例1:3AH + 7CH=B6H⽆符号数运算:58+124=182,范围内,⽆进位有符号数运算: 58+124=182 ,范围外,有溢出?例2:AAH + 7CH=(1)26H⽆符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,⽆溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么⽤途?(解答)代码段(Code Segment)⽤来存放程序的指令序列。
处理器利⽤CS : IP取得下⼀条要执⾏的指令堆栈段(Stack Segment)确定堆栈所在的主存区域。
处理器利⽤SS : SP操作堆栈中的数据数据段(Data Segment)存放当前运⾏程序所⽤的数据。
处理器利⽤DS : EA存取数据段中的数据附加段(Extra Segment)是附加的数据段,也⽤于数据的保存。
处理器利⽤ES : EA存取数据段中的数据第⼆章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执⾏完后AX寄存器的内容。
(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁⽌⽤户访问(3) mov es,1234h ⽴即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax ⽬的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah ⽴即数不能作⽬的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为⾸地址(设为200H)的连续区域中。
微机原理8086指令系统表
Opr不能同为Mem
Opr不能为CS(或IP)
PUSH
PUSH Src
(SP)← (SP)-2
((SP) +1,(SP)) ← (Src)
Opr只能16位
Opr不能为Imm、CS
PUSH CS合法
一般配对使用
POP
POP Dest
(Dest)←((SP) +1,(SP))
(SP) ← (SP) +2
Cnt是移位数
Cnt>1,其值要先送到CL
ODITSZAPC= x---xxuxx
SAR
SAR Dest,Cnt
SHL
SHL Dest,Cnt
SHR
SHR Dest,Cnt
ROL
ROL Dest,Cnt
将Dest从一端移出的位返回到另一端形成循环
Dest不能为Imm
Cnt是移位数
Cnt>1,其值要先送到CL
LES
LES DES,Src
(Dest) ←EA (Src)
(ES) ← EA(Src+2)
标
志
传
送
LAHF
LAHF
(AH) ←(FLAGSL)
相反操作
一般配对使用
SAHF标志位=-----rrrrr
SAHF
SAHF
(FLAGSL)← (AH)
PUSHF
PUSHF
(SP)← (SP)-2
((SP) +1,(SP)) ← (PSW)
INC
INC Dest
(Dest) ← (Dest) +1
ODITSZAPC= x---xxxx-
减
法
SUB
控制转移类指令.ppt
(IP)←标号的偏移地址 (CS)←标号的段地址 如果标号为本代码段内定义的标号,则该指令同JMP NEAR PTR lable。 说明: ① 也可直接使用数值表达式来给出目标地址,这时可省略FAR属性说明。 JMP 2000H:0100H ② 机器指令代码直接提供了转向地址的段地址和偏移地址,属于直接转 移方式。 ③ 使用绝对地址来表示转移目标地址,因此属于绝对转移。
(2)条件转移指令分为以下四类。
① 单标志位测试转移指令 通过测试单个标志位的状态来决定是否转移的指令。 例:
ADD AX,BX JC LAB1 ;如果 CF = 1,转至 LAB1
CMP CX,DX JE LAB2 ;如果 ZF = 1,转至 LAB2
② 无符号数比较转移指令
该类指令将参与比较的两个数据看作是无符号数,并根据比较运算后 标志位CF和ZF的状态来判断它们之间的大小关系,从而决定是否转移。 例:
说明:
① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。
② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
例1:
0000H EB 04 0002H B0 01 0004H B3 02 0006H B1 03
┇
例2:
0000H B0 01 0002H B3 02 0004H B1 03 0006H EB F8 0008H B2 04
JBE/JNA 标 CF=1或ZF=1 号
JG/JNLE 标 SF⊕OF=0且
号
ZF=0
带符号数 比较转移
JGE/JNL 号
控制转移指令
;行号偏移量机器码程序
1 0000 CODE SEGMENT
2 ASSUME CS:CODE
3 0000 0405 PROG_S:ADD AL, 05H
4 0002 90 NOP
5 0003 EBFB JMP SHORT PROG_S
段内间接转移指令
这类指令转向的16位有效地址存放在一个16位寄存器或字存储单元中
用寄存器间接寻址的段内转移指令,要转向的有效地址存放在寄存器中,执行的操作是寄存器的内容送到IP中
例
JMP BX
若该指令执行前BX=4500H,则指令执行时,将当前IP修改成4500H,程序转到段内偏移地址为4500H处执行
返回地址的IP入栈
由于存放CALL指令的内存首地址为CS:IP=2000:1050H,该指令占3个字节,所以返回地址为2000:1053H,即IP=1053H.于是1053H被推入堆栈
根据当前IP值和位移量DISP计算出新的IP值,作为子程序的入口地址,即:
IP=IP+DISP=1053H+1234H=2287H
中断:INT—中断、INTO—溢出中断、IRET—中断返回
1、无条件转移和过程调用指令
1)JMP无条件转移指令
指令格式:JMP目的
指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:
第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
JMP DWORD PTR[SI+0125H]
设指令执行前,CS=1200H,IP=05H,DS=2500H,SI=1300H,内存单元(26425H)=4500H,(26427H)=32F0H.而指令中的位移量DISP=0125H,其中高位部分为DISP_H=01H,低位部分DISP_L=25H
跳转指令表
1.无条件转移指令JMP SHORT OPR ---- 段内直接短转移JMP NEAR PTR OPR ---- 段内直接近转移JMP WORD PTR OPR ---- 段内间接转移JMP FAR PTR OPR ---- 段间直接(远)转移JMP DWORD PTR OPR ---- 段间间接转移2.条件转移指令(A)=(B)JZ 、 JE : 标志 Z=1 ----- 结果为零则转移、相等则转移(A)≠(B)JNZ 、JNE : 标志 Z=0 ----- 结果不为零则转移、不相等则转移(A)<(B)无符号数JC 、JB 、JNAE : 标志 C=1 ----- 进位位为1则转移、低于则转移、不高于和不等于则转移(A)≧(B)无符号数JNC 、JNB 、JAE : 标志 C=0 ----- 进位位为0则转移、不低于则转移、高于和等于则转移(A)≦(B)无符号数JBE 、JNA : 标志 C V Z = 1 ---- 低于和等于则转移、不高于则转移;V-- 或操作(A)>(B)无符号数JNBE、JA : 标志 C V Z = 0 ---- 不低于和不等于则转移、高于则转移;V-- 或操作(A)<(B)带符号数JL、LNGE: 标志 S V O = 1 ---- 小于则转移、不大于和不等于则转移;V-- 或操作(A)≧(B)带符号数JNL、JGE: 标志 S V O = 0 ---- 不小于则转移、大于和等于则转移;V-- 或操作(A)≦(B)带符号数JLE、JNG: 标志 ( S ⊕O ) V Z = 1 ---- 小于和等于则转移、不大于则转移 ;⊕--异或(A)>(B)带符号数JNLE、JG : 标志 ( S ⊕O ) V Z = 0 ---- 不小于和不等于则转移、大于则转移 ;⊕--异或JS : 标志 S=1 ----- 结果为负则转移JNS : 标志 S=0 ----- 结果为正则转移JO: 标志O=1 ---- 溢出则转移JNO : 标志O=0 ---- 不溢出则转移JP 、JPE : 标志 P=1 ---- 奇偶性为偶和有奇偶性则转移JNP 、JPO : 标志 P=0 ---- 奇偶性为奇和无奇偶性则转移JCXZ---- CX寄存器的内容为零则转移。
第9章 转移指令的原理
段内间接转移
• 格式:
–jmp 16位寄存器 –jmp word ptr 内存单元地址
• 功能:用16位寄存器或者16位 的内存单元内容修改IP的值 • 例如:
–mov ax,0123H –mov ds:[0],ax –jmp word ptr ds:[0]
段间间接转移
• 格式:jmp dword ptr 内存单元地址 • 功能:从内存单元地址处开始存放两个 字,高地址处的字是转移的目的段地址, 低地址处是转移的目的偏移地址
–(CS)=(内存单元地址+2) –(IP)=(内存单元地址)
• 例如:
– mov – mov – mov – jmp ax,0123H ds:[0],ax word ptr ds:[2],0 dword ptr ds:[0]
条件转移指令——jcxz指令
• 格式:jcxz 标号 • 功能:若(cx)=0,转到标号处执行, 否则执行下一条指令 • 操作:当(cx)=0,(IP)=(IP)+8位 位移
loop指令
• 也是一种条件转移指令,所有的 循环指令都是短转移 • 格式:loop 标号 • 操作:(cx)=(cx)-1 • 若(cx) ≠0,(IP)=(IP)+8位位移
–8位位移=“标号”处地址-loop指令 后的第一个字节的地址 –8位位移的范围是-128~127,补码表 示 –8位位移由编译程序在编译时算出
–assume cs:codesg –codesg segment – start:mov ax,offset start – s:mov ax,offset s –codesg ends –end start
mov ax,3
问题9.1
填写指令,使该程序在运行中将s处的一条指 令复制到s0处 assume cs:codesg codesg segment s: mov ax,bx mov si,offset s mov di,offset s0 _______________ _______________ s0:nop nop codesg ends end start
奥鹏北语14秋《微型计算机原理及其接口技术》作业1满分答案
14秋《微型计算机原理及其接口技术》作业1
一,多选题
1. CPU与存储芯片的连线方式将影响。
A. 存取速度
B. 地址分配
C. 功耗
D. 地址重叠度
?
正确答案:BD
2. 执行时可能改变IP值的指令有。
A. 调用及返回指令
B. 中断及返回指令
C. 转移指令
D. 串操作指令
?
正确答案:ABC
3. 8086/8088CPU响应硬中断NMI和INTR时,相同的条件是。
A. 允许中断
B. 当前指令执行结束
C. CPU工作在最大组态下
D. 不处于DMA操作期间
?
正确答案:BD
4. 若需将数据段中的源串传送到附加段的目的串,可用的指令有。
A. MOV
B. MOVS
C. SCAS
D. LODS和STOS
?
正确答案:ABD
5. 常用的输入设备有。
A. 键盘
B. 鼠标
C. 触摸屏
D. 显示器
?
正确答案:ABC。
寻址方式与指令系统部分内容总结
指令书写格式 MOVSB/MOVSW CMPSB/CMPSW SCASB/SCASW LODSB/LODSW STOSB/STOSW REP/REPE/REPNZ/PEPNE
指令书写格式 INC d ADD d, s ADC d, s DAA (紧跟在加法指令后面) AAA (紧跟在加法指令后面) DEC d SUB d, s SBB d, s DAS (紧跟在减法指令后面) AAS (紧跟在减法指令后面) CMP d, s MUL d, s IMUL d, s
除运算 其它操作
1200[BX][SI]
[BX+1200][SI]
[BX+ SI +1200] * 方括号内包含 BP,则隐含使用 SS 提供基地址;其余隐含情况均使用 DS 提供基地址。 2、其它寻址方式 1)隐含寻址:指令中不指明操作数 2)I/O 端口寻址:8086 有直接端口寻址和间接端口寻址两种方式,端口寻址范围分别为 0-0FFH 和 0-FFFFH。 3)转移类指令寻址 4)一条指令有几种寻址方式 例:MOV AX, [SI]
相对寄存器寻址
基址变址寻址
相对基址变址寻址
3、三种寻方式总览
操作数载体 寻址方式名称
典型指令示例
说明
指令内 立即数寻址
MOV AX,100H
源数据 100H 为立即寻址
寄存器 寄存器直接寻址 MOV AX,100H 存储器直接寻址 MOV AX,[100H]
目的寄存器 AX 为寄存器直接寻址 源数据地址[100H]为存储器直接寻址
AL,AH或 AX,DX AL
AL或 AX AL,AH或 AX,DX
AH ES DS CL CX,SI,DI AL,BX
(3) 存储器操作数 • 存储器操作数可能存放在一个、二个、或四个存储器单元中。 • 操作数类型分别为:字节、字、双字。 • 存储器操作数可以作为源操作数,也可以作为目标操作数。但不允许源操作数、目标操作数 同时为存储器操作数。 • 5 种存储器选址方式主要区别是构成有效地址 EA 的方式不同。存储器操作数寻址方式: 直接寻址 寄存器间接寻址
汇编指令符号大全
80X86 汇编指令符号大全+、-、*、/∶算术运算符。
&∶宏处理操作符。
宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。
每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。
?∶操作数。
在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。
=∶等号伪指令——符号定义。
对符号进行定义和赋值,功能与EQU相似,但允许(重复)再定义。
:∶修改属性运算符(操作符)——段操作符。
用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。
注意,段寄存器CS和ES 不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
( )∶1.运算符——用来改变运算符的优先级别。
2.教材符号,表示括号内存储单元(或寄存器)的内容。
< >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[ ]∶1.运算符。
方括号括起来的数是数组变量的下标或地址表达式。
带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP 可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。
控制转移类指令
控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变说明✧只有中断返回指令(IRET)改变控制标志位✧许多转移指令受状态标志位的影响1.无条件转移指令(JMP 操作数;程序转向label标号指定的地址)◆寻址方式:直接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式◆目标地址范围✓段内(注意转移范围是+ -,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负)✡段内转移——近转移(near)⏹转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围)⏹不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。
✡段内转移——短转移(short)⏹转移范围用一个字节表达,在当前代码段256B范围内转移(-128~+127范围),只改变IP的值,由8位带符号数给出。
✓段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。
段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。
注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr或far ptr强制.✌思考:如果转移超过16BIT,怎么办?答:变成段间转移。
JMP 1234H 这个指令对否?JMP 12345678H呢?2、条件转移指令(Jcclable;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行)注意:1.Jcc本身不是一条指令,它是条件转移指令的统称。
第3节6 程序控制指令
有一个首地址为ARRAY的M个元素的字数组 试编写一个程 个元素的字数组,试编写一个程 例 3.80 有一个首地址为 的 个元素的字数组 求出该数组的内容之和(不考虑溢出 并把结果存入TOTAL中. 序:求出该数组的内容之和 不考虑溢出 并把结果存入 求出该数组的内容之和 不考虑溢出),并把结果存入 中 MOV CX , M MOV AX , 0 MOV SI , AX START_LOOP: ADD AX , ARRAY[ SI ] ADD SI , 2 LOOP START_LOOP MOV TOTAL , AX
③段间直接调用 格式: 格式:CALL FAR PTR OPR 例如: 例如 CALL FAR PTR PROCA 执行的操作: 执行的操作:PUSH (CS), PUSH (IP) ) ) (IP) DST指定的偏移地址 (CS) ) 指定的偏移地址 ) ④段间间接调用 格式: 格式:CALL DWORD PTR OPR 例如: 例如 CALL DWORD PTR [BX+15] 执行的操作: 执行的操作:PUSH (CS), PUSH (IP) ) ) (IP) (EA) (CS) ) ) ) (EA+2) ) DST 指定的段地址
OPR 的段内偏移地址 OPR 所在段的段地址 LOOP (1000H:2000H) : )
格式: 格式:JMP DWORD PTR OPR 执行的操作: 执行的操作: (IP) (EA) ) ) (CS) (EA+2) ) ) 例:JMP DWORD PTR [BX][SI]
(2)条件转移指令 (2)条件转移指令
3.3.7 处理器控制指令
1.标志位处理指令 标志位处理指令
2.其他器处理控制指令 其他器处理控制指令
汇编(十五)控制转移类指令一
汇编(十五)——控制转移类指令一Intel 8086中,程序的执行序列是由代码段寄存器CS 和指令指针IP确定的。
CS包含当前指令所在代码段的段地址,IP则是要执行的下一条指令的偏移地址。
程序的执行一般是依指令序列顺序执行,但有时候需要改变程序的流程,实现分支程序。
控制转移类指令通过修改CS和IP的值改变程序的执行顺序,实现分支。
分支程序有时根据某个条件转移执行,有时无条件条转到某条指令执行,转移指令的目标地址是代码段中某个指令的位移量,这个位移量是用标号来指出的。
一、标号标号(过程名亦视为标号)用来说明可执行指令在汇编语言程序中的位置(从这个角度来说,变量应用于说明伪指令的位置)。
标号可以作为转移指令(或调用指令CALL)的操作数。
和变量类似,标号有三种属性:段(SEGMENT)、位移量(OFFSET)和距离(DISTANCE)。
段和位移量属性就是在哪个段、什么位置上定义的标号。
标号只要有了定义,这两个属性就自然的产生。
如果标号只能在本段中(即标号所定义的段中)用JMP或条件转移指令(或CALL)进行访问,那么必须将这个标号的距离属性定义为NEAR;如果标号能为其他段中的JNMP(或CALL)指令访问,则需将标号的距离属性定义为FAR。
标号的距离属性需要再定义标号时指出。
1、标号的定义(1)定义距离属性为NEAR的标号1)距离属性为NEAR的标号可以用隐含的说明,即在标号名后面加上冒号,放在指令前面。
如:L1: MOV AX,BX@: ADD AX,1002)距离属性为NEAR的标号也可以用现实说明,即用LABEL 位指令明显说明,或在EQU位指令中用THIS操作符明显的指出。
如:L2 LABEL NEARMOV CX,5L3 EQU THIS NEARAND AX,0FFH(2)定义距离属性为FAR的标号距离属性为FAR的标号只能显示说明L4 LABEL FARMOV AX,DXL5 EQU THIS FAROR AL,30H(3)同一条指令处可以定义两个距离属性不同的标号,以提高访问标号的灵活性。
程序控制类指令
程序控制类指令
1 段内直接短转移
格式:JMP SHORT OPR 功能:SHORT表明程序转移的目标地 址与JMP指令在同一个代码段内,操作数 可以是目标地址的标号或指定一个8位的 偏移量,转 移 范 围 为 - 128 ~ 127 字 节。 SHORT可省略。
指令执行后,CS的内容不变,IP的值 (即JMP指令的下一条指令)与8位偏移量 之和被赋予当前的IP。
2 段内直接近转移
程序控制类指令
格式:JMP NEAR PTR OPR 功能:NEAR PTR表明程序转移的目标地址与JMP指令在同一个代码段内,操作数可以是目标地址的 标号或指定一个16位的偏移量,转移范围为-32768~32767字节。NEAR PTR可省略。
指令执行后,CS的内容不变,IP的值(即JMP指令的下一条指令)与16位偏移量之和被赋予当前的IP。
在执行子程序调用指令时
首先要将CALL指令的下一条指令 的地址压入堆栈保护起来,作为子
3 段内间接转移
格式:JMP WORD PTR OPR 功能:程序转移的目标地址与JMP指令在同一个代码段内,指令中的操作数是16位寄存器或存储器单 元,段内转移的偏移地址存放在16位寄存器或存储器中连续两个字节的存储单元中。使用寄存器作为操作 数时,WORD PTR省略,如JMP BX。
指令执行后,CS的内容不变,寄存器中的内容或存储器中指定地址开始的连续两个字节单元的内容被 赋予当前的IP。
条件转移指令
单个标志位的状态作 为转移条件的转移指
令
两个无符号数的比较 结果作为转移条件的
转移指令
两个带符号数的比较 结果作为转移条件的
转移指令
程序控制类指令
条件转移指令
程序控制类指令
第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令
DI,200H CX,128 AX,AX STOSW
当然也可以用字节填充 可以使用重复前缀。 当寄存器AL、AX中的数不变 BBB: CLD LEA DI,0500H 时,使用重复前缀,则是对 某一RAM区域进行填充。 MOV CX,256 例如上电复位后,对某一块内 XOR AL,AL 存区域全部填充0 REP STOSB
GLUT_C 2013-08 25
④ 段间直接转移
格式: JMP FAR PTR dst 功能:用dst给出的段内偏移量代替IP,用dst的段地址代替 CS的内容,转移到新的CS: 偏移地址去执行下一条指令。 注意:在汇编语言程序设计中,dst通常使用符号地址。
例如:
MOV JMP AX, [SI] FAR PTR ABCD
GLUT_C
2013-08
8
例:比较1000:0e00H与1000:0400H连续8字节是否相等,只要有 一个不相同的字节,则设置AL=0A5H表示两个字符串不想等,否 则赋值AL=00H。
CMP_S: MOV MOV MOV MOV MOV CLD MOV REPZ JNZ MOV JMP DONE: MOV CMP_END: RET
8086指令系统(续)
GLUT_C
2013-08
1
2.3.5
串操作指令
串操作指令在教材P.128 字符串传送指令 字符串比较指令 字符串检索指令 取字符串指令 存字符串指令
GLUT_C
2013-08
2
1.字符串传送指令 字符串传送指令MOVSB/MOVSW 格式: MOVSB ;用于字节传送 MOVSW ;用于字传送。 特点: ( 1 ) MOVSB 、 MOVSW 指令,源数据串的默认段 基址 DS ,有效地址为 SI ,目的串段基址 ES ,有效 地址DI。 (2)指令前面常加重复前缀REP,重复执行n次。 (3)重复执行次数 由CX指定 (4)每次传送,DI,SI自动修改(字节传送±1,字 传送±2),加减由方向控制为DF确定。