第3章3-指令系统

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

杭州电子科技大学
微 机 原 理 及 应 用
1. 判断单个标志位状态
⑴ JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等) ⑵ JS和JNS 利用符号标志SF,判断结果是正是负 ⑶ JO和JNO 利用溢出标志OF,判断结果是否产生溢出 ⑷ JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中“1”的个数是偶是奇 ⑸ JC/JB/JNAE和JNC/JNB/JAE 利用进位标志CF,判断结果是否进位或借位
;段间转移,间接寻址 演示 ;IP←[mem],CS←[mem+2]
杭州电子科技大学
微 机 原 理 及 应 用
3.4.3 条件转移指令 • 条件转移指令Jcc根据指定的条件确定程序 是否发生转移。其通用格式为:
Jcc label
;条件满足,发生转移 ;IP←IP+8位位移量; ;否则,顺序执行
• label是一个标号、一个8位位移量,表示Jcc指令 后的那条指令的偏移地址,到目标指令的偏移地 址的地址位移 • label只支持短转移的相对寻址方式
– 用源串减去目的串,根据操作结果影响标志, 结果不回送 – 源串由SI指出,目的串由DI指出 – 源操作数写在左边,目标操作数写在右边,与 其他指令不同 – CPMS的替代符—CMPSB、CMPSW,使用方 法与MOVSB/MOVSW相同
杭州电子科技大学
微 机 原 理 及 应 用
• SCAS 目的串(SCASB/SCASW)
杭州电子科技大学
微 机 原 理 及 应 用
3.3.2 字符串的存与取 • LODS 源串(LODSB/LODSW)
– 指令是把由SI寻址的源串元素装入到寄存器 AL/AX中,并修改SI,指向下一元素 – 通常不加前缀 – 地址增减取决于方向标志DF,DF=0增量修改, DF=1减量修改 – 替代符—LODSB/LODSW – 举例:编制一程序段,要求将0700H单元开始 的5个字节的内容逐一装入累加器中进行处理, 处理完后,再送入0700H为首地址的内存区中
用右移一位的方法实现除以2。 本例中用RCR指令比SHR指令更好。
杭州电子科技大学
微 机 原 理 及 应 用
例题解答2 用JNC指令实现
还可用SAR、ROR和RCR指令
mov bx,ax shr bx,1 ;将AX的最低位D0移进CF jnc even ;标志CF=0,即D0=0:AX内是偶数,程序转移 add ax,1 ;标志CF=1,即D0=1:AX内的奇数,加1 even: shr ax,1 ;AX←AX÷2
杭州电子科技大学
微 机 原 理 及 应 用
例 偶校验
;对DL寄存器中8位数据进行偶校验 ;校验位存入CF标志 test dl,0ffh ;使CF=0,同时设置PF标志 jpe done ;DL中“1”的个数为偶数 ;正好CF=0,转向done stc ;DL中“1”的个数为奇数,设置CF=1 done: …… ;完成
杭州电子科技大学
微 机 原 理 及 应 用
3.4.1 程序转移的地址 • 相对寻址方式
用标号表达
– 指令代码中提供目的地址相对于当前IP的位移量, 转移到的目的地址(转移后的IP值)就是当前IP 值加上位移量
• 直接寻址方式
用标号表达
– 指令代码中提供目的逻辑地址,转移后的CS和 IP值直接来自指令操作码后的目的地址操作数
杭州电子科技大学
微 机 原 理 及 应 用
3.3.4 重复前缀指令 • 重复前缀指令
– REP与MOVS、STOS指令联合使用时,他的 意义是“字符串未处理完时重复” – REPE(相等时重复)和REPZ(等于0时重复) 实际上是相同的。将他们与CMPS、SCAS指 令联合使用,可对本条指令操作所设置的ZF进 行测试,ZF=1且CX不等于0,重复,否则退出 – REPNE(不等于时重复)和REPNZ(不等于0 时重复)意义相同。与CMPS、SCAS联合使 用,ZF=0且CX不等于0,则重复,否则退出
– 指令所完成的操作和LODS指令相反。他将累 加器AL/AX中的内容存入附加段中由DI寻址的 存储单元中,并自动修改地址指针 – 与REP结合,可使一串内存单元填满相同的数 – 替代符—STOSB/STOSW – 举例:若对某一数据缓冲区清零,并设(ES) =3000H,数据缓冲区首地址DI=0200H,缓冲 区长度为100个字节,则可用以下的程序段:
杭州电子科技大学
微 机 原 理 及 应 用
– 字符串指令中的操作数只用于指出指令的操作 类型。目的操作数与源操作数的逻辑地址由ES: DI和DS:SI指出 – 用CX存放要处理的字符串的元素个数。在执行 带重复前缀的字符串指令时,每执行一次字符 串操作指令,CX的内容自动减1 – 用DF标志置来规定字符串处理方向。DF=0, 由低向高,DF=1,相反 – 每处理完一个元素,自动修改SI和DI的内容 – 字符串处理过程可被中断
杭州电子科技大学
微 机 原 理 及 应 用
CLD MOV MOV MOV MOV MOV REP
AX,3000H ES,AX DI,0200H CX,100 AL,00 STOSB
杭州电子科技大学
微 机 原 理 及 应 用
3.3.3 字符串的比较与扫描 • CMPS 源串,目的串(CMPSB/CMPSW)
杭州电子科技大学
微 机 原 理 及 应 用
3.3.1 字符串的传送 • MOVS 目的串,源串(MOVSB/MOVSW)
– 把一个字节或一个字从源串传送到目的串,并 自动修改SI和DI,指向下一个元素 – 通常加REP,完成块的传送 – MOVSB和MOVSW是MOVS的替代符
等价语句: MOVS PAP1,PAP2 MOVSW 传送字符串程序片断: MOV SI,2000H MOV DI,4000H MOV CX,200H CLD REP MOVSB
• 只要执行无条件转移指令JMP,就使程序转到指 定的目标地址,从目标地址处开始执行指令 • 操作数label是要转移到的目标地址(目的地址、 转移地址) • JMP指令分成4种类型:
⑴ ⑵ ⑶ ⑷ 段内转移、相对(直接)寻址,JMP disp8/disp16 段内转移、间接寻址,JMP MEM/REG 段间转移、直接寻址,JMP ADDR 段间转移、间接寻址,JMP MEM
杭州电子科技大学
微 机 原 理 及 应 用
例题解答3 用JNS指令实现
mov bx,ax 错误!循环指令不影响SF等标 ror bx,1 志 ;将AX的最低位D0移进最高位(符号位SF) jns even ;标志SF=0,即D0=0:AX内是偶数,程序转移 add ax,1 ;标志SF=1,即D0=1:AX内的奇数,加1 even: shr ax,1 ;AX←AX÷2
杭州电子科技大学
微 机 原 理 及 应 用
CLD MOV SI,0700H MOV CX,5 LOOP1:LODSB PUSH CX : POP CX DEC CX MOV [DI],AL JNZ LOOP1
杭州电子科技大学
微 机 原 理 及 应 用
• STOS 目的串(STOSB/STOSW)
杭州电子科技大学
微 机 原 理 及 应 用
2. 比较无符号数高低
• 无符号数的大小用高(Above)、低(Below)表 示,需要利用CF确定高低、利用ZF标志确定相等 (Equal) • 两数的高低分成4种关系,对应4条指令
杭州电子科技大学
微 机 原 理 及 应 用
JMP label
;段内转移、相对寻址
演示
;IP←IP+位移量
JMP r16/m16
;IP←r16/m16
;段内转移、间接寻址
演示 演示
JMP far ptr label JMP far ptr mem
;段间转移、直接寻址
演示
;IP←偏移地址,CS←段地址
• 间接寻址方式
用寄存器或存储器操作数表达
– 指令代码中指示寄存器或存储单元,目的地址从 寄存器或存储单元中间接获得
杭州电子科技大学
微 机 原 理 及 应 用
目标地址的寻址范围:段内寻址
• 段内转移——近转移(near)
– 在当前代码段64KB范围内转移 ( ±32KB范围) – 不需要更改CS段地址,只要改变IP偏 移地址
杭州电子科技大学
微 机 原 理 及 应 用
Jcc指令的分类
• Jcc指令不影响标志,但要利用标志(表3-4) • 根据利用的标志位不同,分成三种情况:
⑴ 判断单个标志位状态 ⑵ 比较无符号数高低 ⑶ 比较有符号数大小 Jcc指令实际虽然只有16条,但却有30个助记符 采用多个助记符,目的是为了方便记忆和使用
– 功能是在字符串中查找一个与已知数值相同或 不同的元素。它以AL或AX的内容与附加段ES 中用DI寻址的目的串元素进行比较,利用结果 影响标志位,来反映扫描结果 – 执行结果不改变源串、目的串的数据 – 与REPNE或REPNZ配合使用,CX不等于0且 ZF=0,查找相同元素;CX不等于0且ZF=1, 查找不同元素 – SCAS替代符—SCASB/SCASW
杭州电子科技大学
微 机 原 理 及 应 用
例题
• 题目:将AX中存放的无符号数除以2,如果是奇 数则加1后除以2 • 问题:如何判断AX中的数据是奇数还是偶数? • 解答:判断AX最低位是“0”(偶数),还是“1” (奇数)。可以用位操作类指令
1:用逻辑与指令将除最低位外的其他位变成0,保留最低位 不变。判断这个数据是0,AX就是偶数;否则,为奇数 2:将最低位用移位指令移至进位标志,判断进位标志是0, AX就是偶数;否则,为奇数 3:将最低位用移位指令移至最高位(符号位),判断符号 标志是0,AX就是偶数;否则,为奇数
实际编程时,汇编程序会根据目标地址的 属性,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制成为需要的转移类型
代 码 段
代 码 段
杭州电子科技大学
微 机 原 理 及 应 用
3.4.2 无条件转移指令
JMP label ;程序转向label标号指定的地址
微 机 原 理 及 应 用
第3章 • 常见串操作
3.3 串操作指令
– 计算字符串的长度、查找某个特定字符、改换 字符、判断字符串是否一致等
• 串操作类指令
– MOVS、CMPS、SCAS、LODS、STOS
• 注意事项
– 操作数的源串在当前数据段DS中,若不在,可 使用段前缀指令;目的串必须在附加段ES中, 且不能使用段前缀指令
杭州电子பைடு நூலகம்技大学
微 机 原 理 及 应 用
例题解答1 用JZ指令实现
test ax,01h ;测试AX的最低位D0(不用AND指令,以免改变AX) jz even ;标志ZF=1,即D0=0:AX内是偶数,程序转移 add ax,1 ;标志ZF=0,即D0=1:AX内的奇数,加1 even: shr ax,1 ;AX←AX÷2
代 码 段
• 段内转移——短转移(short)
– 转移范围可以用一个字节表达,在段 内-128~+127范围的转移
代 码 段
杭州电子科技大学
微 机 原 理 及 • 应 用
目标地址的寻址范围:段间寻址
段间转移——远转移(far) – 从当前代码段跳转到另一个代码段, 可以在1MB范围 – 需要更改CS段地址和IP偏移地址 – 目标地址必须用一个32位数表达,叫 做32位远指针,它就是逻辑地址
杭州电子科技大学
微 机 原 理 及 应 用
3.4 控制转移类指令 • 控制转移类指令用于实现分支、循环、 过程等程序结构,是仅次于传送指令 的常用指令 • 重点掌握:
– JMP/Jcc/LOOP/JCXZ CALL/RET – INT n/IRET 常用系统功能调用
控制转移类指令通过改变IP(和CS)值, 实现程序执行顺序的改变
ADD BX,0 ;增加一条指令
杭州电子科技大学
微 机 原 理 及 应 用
例 判断是否为字母Y
;寄存器AL中是字母Y(含大小写),则令AH=0, 否则令AH=-1 cmp al,’y’ ;比较AL与小写字母y je next ;相等,转移 cmp al,’Y’ ;不相等, ;继续比较AL与大写字母Y je next ;相等,转移 mov ah,-1 ;不相等,令AH=-1 jmp done ;无条件转移指令 next: mov ah,0 ;相等的处理:令AH=0 done: ……
相关文档
最新文档