第2章 80X86汇编语言与汇编程序(3)—算术逻辑运算指令..

合集下载

80X86汇编语言指令集

80X86汇编语言指令集

80X86汇编语⾔指令集8086/8088汇编语⾔指令集数据传送指令集MOV功能: 把源操作数送给⽬的操作数语法: MOV ⽬的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压⼊或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址⾄寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加⼀或减⼀语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取⼆进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: ⾮压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执⾏BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定⽅向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: ⽐较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执⾏语法: JMP 地址JXX功能: 当特定条件成⽴则跳往指定地址执⾏语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成⽴B: BELOW,当C=1时成⽴C: CARRY,当弁时成⽴ CXZ: CX寄存器的值为0(ZERO)时成⽴E: EQUAL,当Z=1时成⽴G: GREATER(⼤于),当Z=0且S=0时成⽴L: LESS(⼩于),当S不为零时成⽴N: NOT(相反条件),需和其它符号配合使⽤O: OVERFLOW,O=1时成⽴P: PARITY,P=1时成⽴PE: PARITY EVEN,P=1时成⽴PO: PARITY ODD,P=0时成⽴S: SIGN,S=1时成⽴Z: ZERO,Z=1时成⽴LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址 LOOPNE(Z) 地址标志位: ⽆CALL,RET功能: ⼦程序调⽤,返回指令语法: CALL 地址 RET RET n标志位: ⽆INT,IRET功能: 中断调⽤及返回指令语法: INT n IRET标志位: 在执⾏INT时,CPU会⾃动将标志寄存器的值⼊栈,在执⾏IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: ⽆CMPSB,CMPSW,CMPSD功能: 字符串⽐较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载⼊或存贮指令语法: LODSB LODSW STOSB STOSW标志位: ⽆REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S⽽定EMC 汇编语⾔指令集符号解说:1.符号‘R’:代表⼀般⽤途寄存器中的其中⼀个。

汇编语言与接口技术习题答案

汇编语言与接口技术习题答案

第 3 章80X86 的指令系统和寻址方式本章主要讲授:80X86 的数据类型、寻址方式、指令格式、指令系统(数据传送指令、算术运算指令、逻辑运算指令、串操作数指令、控制转移指令、处理机指令和高级语言指令)和80486 指令等。

通过本章的学习,注意下面几方面的内容:一、掌握80X86 的数据类型;二、掌握80X86 的寻址方式;三、掌握80X86 的指令系统及它们的一些使用实例。

四、了解保护属性检查指令、高级语言指令以及Cache 管理指令等。

习题精解1 已知DS= 2000H, BX= 0100H, SI = 0002H,存储单元[20100H]〜[20103H]依次存放12 3456 78H , [21200H]〜[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行后AX寄存器的内容。

(1)MOV AX,1200H(2)MOV AX,BX(3)MOV AX,[1200H](4)MOV AX,[BX](5)MOV AX,[BX+1100H](6)MOV AX,[BX + SI](7)MOV AX,[BX][SI+1100H]参考答案:根据物理地址形成公式:物理地址=段基址x 16 +有效地址,得:1)1200H2)0100H3)4C2AH4)3412H5)4C2AH6)7856H(7) 65B7H分析:本题主要考查点是数据寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法,或者是寻找操作数有效地址的方法。

包括数据寻址和转移地址寻址两大类。

80X86的数据寻址方式总结如下:(1)立即寻址方式操作数作为指令的一部分而直接写在指令中, 这种操作数称为立即数, 这种寻址方式就 称为立即数寻址方式。

注: 1、使用立即寻址的指令主要用来给寄存器赋初值,并且只能用于源操作数字段 2 、不能直接给段寄存器和标志寄存器赋予立即数。

例: MOV AL,5MOV AX,1234H MOV EAX,12345678H(2) 寄存器寻址方式操作数存放在指令规定的某个寄存器(如:对于 16 位操作数,寄存器可以是 AX ,BX , CX DX SI ,DL ,SP 或BP;而对8位操作数,寄存器可以是AH AL ,BH, BL , CH CL , DH或DL )中。

汇编语言:x86汇编指令大全及其注意事项

汇编语言:x86汇编指令大全及其注意事项

汇编语⾔:x86汇编指令⼤全及其注意事项⽬录Part 1:instructionPart 22.1 (逻辑)运算、移位等常⽤指令2.1 (逻辑)运算、移位等常⽤指令2.2 循环移位指令2.3 数据串操作指令2.4 逻辑运算指令2.5 基于⼤⼩关系的跳转指令2.6 基于单标志位的转移指令Part 1:instruction积少成多,持续更新。

(这将会是⼀个极其漫长的过程)表格中各条指令的顺序根据笔者所认为的重要或常⽤程度进⾏排序,仅供参考。

Part 2本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以此类推。

2.1 (逻辑)运算、移位等常⽤指令这⼀部分记录汇编语⾔程序设计当中使⽤频率最⾼的⼀部分指令。

2.1 (逻辑)运算、移位等常⽤指令这⼀部分记录汇编语⾔程序设计当中使⽤频率最⾼的⼀部分指令。

指令作⽤注意事项⽰例mov dest,src传送指令1.dest和src不能同时为存储器操作数2.CS不能作为dest3.段寄存器之间不能互相传送4.⽴即数不能送⼊段寄存器mov ax,wordptr[bx+si+2]adddest,src加法指令dest,src不能同时为存储器操作数或段寄存器add ax,cx adcdest,src带进位加法指令dest=dest+src+CF,常⽤于多字节加法inc dest加⼀指令 1.此操作不影响CF的状态inc byte ptr[si]subdest,src减法指令1.dest,src的要求与add相同2.触发OF:异号相减且结果的符号为与被减数不同sub ax,cxsbbdest,src带进位减法常⽤于多字节减法dec dest减⼀指令不影响CF的状态,但其他⼏个标志位都会受到影响dec axmul dest⽆符号乘法指1.dest为字节数据,则与AL相乘,结果放⼊AX2.dest为字数据,与AX相乘结果低16位放⼊AX,⾼16位放⼊DX3.dest不能是⽴即数mul aximul dest有符号乘法细节与mul完全相同,对最⾼位的解释不同imul axdiv dest⽆符号除法1.dest为字节数据,⽤AX除以dest,商放在AL,余数放在AH2.dest为字数据,⽤低16位为AX,⾼16位为DX的双字数据除以dest,商放在AX,余数放在DXidiv dest带符号除法与⽆符号完全相同。

汇编_第2章 80X86计算机组织

汇编_第2章 80X86计算机组织

例1:(DS) = 2100H, (BX) = 0500H
物理地址 = 21000H + 0500H = 21500H
例2:(CS) = 3000H, (IP) = 1000H
物理地址 = 30000H + 1000H = 31000H
例3:(SS) = 1000H, (SP) = 0010H 物理地址 = 10000H + 0010H = 10010H 例4:(DS) = 3100H, (SI) = 1000H 物理地址 = 31000H + 1000H = 32000H
优点: 允许程序在存储器内重定位;
允许实模式程序在保护模式下运行;
有利于程序和数据的分离。
物理地址的形成
物理地址:每一个存储单元有一个唯一的20位地址 表示范围:00000H~FFFFFH 。 物理地址形成:段地址左移4位再加上偏移地址值
15 0 16位段地址 15 + 19 0 0 16位偏移地址 0000
≈ 1234H
4号字节单元存放的信息为 34H,表示:(0004)=34H
1EH 2FH
4号字单元的内容为1234H,表 示为:(0004)=1234H
1235H 1236H 1237H
字单元由两个字节单元组成,其地址采用它的低地 址来表示;且低位字节存入低地址单元,高位字节存入 高地址单元。
例:存储单元的地址 已知: (0004H)= 5678H
编译后的目标文 件达到3.59KB
}
用汇编语言实现同样的功能
data segment a db ? b db ? c db ? string db 'c=$' 汇编后的目 data ends 标文件只有 code segment 208字节 main proc far assume cs:code, ds:data, es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax main mov es,ax code mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh int 21h ret endp ends end start

第2章 80X86汇编语言与汇编程序(3)—算术逻辑运算指令

第2章 80X86汇编语言与汇编程序(3)—算术逻辑运算指令
(dst) (dst)+1 例如: INC CX ; (CX) (CX)+1
说明:INC指令影响标志位,但不影响标志CF。
15 Glut _C 2013-08
4.
压缩BCD码加法调整指令
(1)格式: DAA (2)功能:对压缩的两位十进制加法结果进行调整。 计算机内部的所有运算,都是按照二进制运算规则进行的。 对于两位BCD数据相加,例如
对于任意字长的数的加法,都可以这样进行。
12 Glut _C 2013-08
这里我们没有判断溢出标志位OF,第一字节有进位 或溢出,表明超过16位的表示范围,将进位信号加到 高16位上,如果高16位出现溢出,需要看我们结果字 长了:
如果保留3个字长,则将进位再加到更高位上
否则判断产生溢出错误。 ADD ,ADC指令影响标志位: CF, OF, ZF, SF, AF, PF
2.3.2.1
加法运算指令
1. 不带进位加法指令
(1) 格式: ADD dst, src (2) 功能: 两个数相加,结果送 dst (dst) = (dst) + (scr) (3) 说明: 操作数可以是字节型,也可以是16位、32位。 源操作数可以使用立即数、寄存器操作数,或存储器操作数 目的操作数可以使用寄存器操作数或存储器操作数,不能是立 即数。 例如: ADD ADD
26 Glut _C 2013-08
如果一个正数调用NEG指令,实际上求出的是它 的机器负数。 例如 (AL)=14H, 执行
NEG AL
指令执行后 (AL) = 0 ECH -14H
如果一个负数,如果不先保存符号位,使用NEG指令 后,实际上变成了他的绝对值。 例如: MOV AL, 0ECH

80X86汇编语言程序设计 第二章⑦.8086 8088指令系统(四)逻辑运算和移位指令

80X86汇编语言程序设计 第二章⑦.8086 8088指令系统(四)逻辑运算和移位指令

80X86汇编语言程序设计第二章 8086/8088寻址方式和指令系统(四)逻辑运算和移位指令1.逻辑运算指令(1)否操作指令NOT格式:NOT OPRD这条指令把操作数OPRD取反,然后送回OPRD。

操作数OPRD可以是通用寄存器,也可以是存储器操作数,不能是立即数。

此指令对标志位没有影响。

例如:MOV AL,03HNOT AL指令执行后:(AL)=0FCH(2)与操作指令AND格式:AND OPRD1,OPRD2这条指令对两个操作数进行按位的逻辑“与”运算,结果送到目的操作数OPRD1。

该指令执行以后,标志CF=0,标志OF=0,标志PF、ZF、SF反映运算结果,标志AF未定义。

某个操作数自己与自己相“与”,则值不变,但可使进位标志CF清0。

与操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清为0的场合。

把要维持不变的这些位于“1”相“与”,而把要清为0的这些位于“0”相“与”就能达到这样的目的相“与”:两个操作数都是1的,结果为1,其他情况全是0。

例如:MOV AL,23HMOV BL,02HAND AL,BL指令执行后:(AL)=02H(AL)=23H,将AL寄存器的第一位和第三位清零,其余位不变,则BL是什么时,与AL 执行AND指令可完成?(BL)=F5HMOV AL,23HMOV BL,F5HAND AL,BL(3)或操作指令OR格式:OR OPRD1,OPRD2这条指令执行以后,标志CF=0,标志OF=0.,标志PF、ZF、SF反映运算结果,标志AF未定义。

某个操作数自己与自己相“或”,则值不变,但可使进位标志CF清0。

相“或”:两个操作数中有一个是1的,结果为1,其他情况全是0。

或操作指令主要用于在使一个操作数中的若干位维持不变,而另外若干位置为1的场合。

把要维持不变的这些位于“0”相“或”,而把要置为1的这些位与“1”相“或”就能达到这样的目的。

例如:MOV BL,12HOR BL,BL(BL)=12H CF=0(4)异或操作指令XOR格式:XOR OPRD1,OPRD2相“异或”:两个操作数,一个是0,一个是1,则为1;两个都为1,则为0;两个都为0,则为0。

80X86的指令系统和寻址方式

80X86的指令系统和寻址方式
- 字节串:一串连续的字节。
- 字串:一串连续的字。
- 双字串:一串连续的双字。
3.2 80X86的寻址方式
• 数据寻址方式:是指获取指令所需的操 作数或操作数地址的方式
• 程序寻址方式:是指程序中出现转移和 调用时的程序定位方式
3.2.1 80X86的数据寻址方式 (共十种)
1、立即寻址方式
操作数作为指令的一部分,在直接指令中给出。
3.2.3操作数宽度和寻址宽度的确定
• 操作数宽度也称为“操作尺寸” • 寻址宽度也称为“寻址尺寸” • 实际上指的是操作数二进位数和可寻址的二进位数。 • 8086和80286的操作数宽度和寻址宽度都是16位的。 • 而32位处理器的操作数宽度和寻址宽度可以是16位的,
也可以是32位的,涉及到W域、缺省段属性及指令前缀 等概念。
按指令码中规定的寻址方式给出。此时,寻址所得到的不 是操作数,而是转移地址,用来更新IP内容。
JMP BX
..
2000:0FFFH
操作码
.. ..
2000:4000H
操作码
CS + BX(新 IP)
2000 4000
24000
..
(3)段间直接寻址 在段间直接寻址方式中,指 令码中将直接给出16位的段 地址和16位的段内偏移地址, 用来更新CS和IP内容。
汇编语言指令要解决的两个问题: 要指出进行什么操作——操作符; 要指出操作数和操作结果放在何处——寻址方式。
指令的基本构成:
目的

说明要执行的 操作对象,可以 是什么操作 有0个、1个或2个
指令举例: MOV AX , BX
操作码 操作数 ADD AX,[SI+6] INC BX NOP

IBM—PC(80x86)汇编语言与接口技术-第2章 80x86计算机组织

IBM—PC(80x86)汇编语言与接口技术-第2章 80x86计算机组织

• 80386是1985年研制出的一个32位微处理器, 内部及外部数据总线均为32位,地址线也为32 位,因此它可处理4G(232)字节的物理存储 空间。
• 1989年Intel公司又研制出新一代的微处理器 80486,80486芯片内除了有一个与80386相同 结构的主处理器外,还集成了一个浮点处理部 件FPU以及一个8K字节的高速缓冲存储器 (cache),使80486的计算速度和总体性能比 80386有了明显的提高。
• Intel公司在1982年推出了80286微处理器,它仍 然是16位结构。80286的内部及外部数据总线都 是16位的,但它的地址线是24位的,可寻址16M 字节的存储空间。
80286有两种工作方式,即实模式和保护模式: 实模式与8086工作方式相同,但速度比8086快。
保护模式除了仍具有16M字节的存储器物理地址空 间外,她还能为每个任务提供1G字节的虚拟存储 器地址空间。保护方式把操作系统及各任务所分配 到的地址空间隔离开,避免程序之间的相互干扰, 保证系统在多任务环境下正常工作。
• 8086是1978年Intel公司推出的16位微处理器。
(1)8086有16位数据总线,处理器与外部传送数据 时,一次可传送16位二进制数。
(2)8086有20位地址总线,寻址空间提高到1M字节。
(3)8086采用了流水线技术,可以实现处理器的内 部操作与存储器或I/O接口之间的数据传送操作重叠 进行,从而提高了处理器的性能。
2.2 基于微处理器的 计算机系统的构成
硬件:
中央处理机 CPU
总线控制 逻辑 系 统 总 线
存储器
接口
...
接口
大容量 存储器
...
I/O设备
I/O子系统

(完整版)(整理)《80x86汇编语言程序设计》教案及答案.

(完整版)(整理)《80x86汇编语言程序设计》教案及答案.

(完整版)(整理)《80x86汇编语言程序设计》教案及答案.《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。

它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。

附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66) 第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

第二章 80x86汇编语言程序设计

第二章 80x86汇编语言程序设计

0、8、16位 0、8、16、32位
存储器物理地址生成中的相关约定:
a.访存操作选择默认段寄存器规则—
取指操作和相对IP寻址的访存操作—代码段CS,
堆栈操作和用ESP/EBP为基址的访存操作—堆栈段SS, 串处理指令的目的串的访存操作—附加数据段ES, 除堆栈和串处理的除目的串外的访存操作—数据段DS。
10
示例1:MOV AL, [BX] ;PA=(DS)*10H+(BX) MOV AX,CS:[SI];PA=(CS)*10H+(SI) MOV ECX, [EDX];PA=(EDS)*10H+(EDX) MOV AH, [BP] ;PA=(SS)*10H+(BP) 示例2:MOV AH, [BP] MOV BX, [SI] 设(SS)=100H,(DS)=200H,(BP)=0B0H,(SI)=2AH
14
8、比例变址寻址
操作数的有效地址为相对于指令所指定的变址REG内 容和比例因子相乘的地址的偏移地址, 即:EA=(变址REG)*比例因子+位移量。 寄存器的使用限制—
与基址变址寻址方式中变址REG限制相同。
示例:MOV AX, 200H[ESI*8] 若(DS)=2000H,(ESI)=4 则PA=(DS)*10H+(ESI)*4+200H=20220H 应用:适合于对结构数组等复杂结构元素的访问。
AH, BL DS, AX SI, AX ECX, EDX
;(BL)→AH ;(AX)→DS ;(AX)→SI ;(EDX)→ECX
错误示例: MOV CS, AX ;CS不能为MOV目的寄存器 MOV IP, BX ;IP不能做MOV目的寄存器 MOV AX, CL ;目的与源REG类型(位数)不同 MOV BH, DX ;目的与源REG类型(位数)不同 应用:适合于对频繁使用的数据的操作。

80x86汇编指令详解

80x86汇编指令详解

80x86汇编指令详解(上)2008年01月15日星期二 15:0580x86指令系统,指令按功能可分为以下七个部分。

(1) 数据传送指令。

(2) 算术运算指令。

(3) 逻辑运算指令。

(4) 串操作指令。

(5) 控制转移指令。

(6) 处理器控制指令。

(7) 保护方式指令。

3.3.1数据传送指令数据传送指令包括:通用数据传送指令、地址传送指令、标志寄存器传送指令、符号扩展指令、扩展传送指令等。

一、通用数据传送指令1 传送指令传送指令是使用最频繁的指令,格式:MOV DEST,SRC功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。

传送指令允许的数据流方向见图3 11。

图 3.11 传送指令数据流由上图可知,数据允许流动方向为:通用寄存器之间、通用寄存器和存储器之间、通用寄存器和段寄存器之间、段寄存器和存储器之间,另外还允许立即数传送至通用寄存器或存储器。

但在上述传送过程中,段寄存器CS的值不能用传送指令改变。

例 3.12CPU内部寄存器之间的数据传送。

MOV AL,DH ;AL←DH(8位)MOV DS,AX ;DS←AX(16位)MOV EAX,ESI ;EAX←ESI(32位)例 3.13CPU内部寄存器和存储器之间的数据传送。

MOV [BX],AX ;间接寻址(16位)MOV EAX,[EBX+ESI] ;基址变址寻址(32位)MOV AL,BLOCK ;BLOCK为变量名,直接寻址(8位)例 3.14立即数送通用寄存器、存储器。

MOV EAX,12345678H ;EAX←12345678H(32位)MOV [BX],12H ;间接寻址(8位)MOV AX,1234H;AX←1234H(16位)使用该指令应注意以下问题:·源和目的操作数不允许同时为存储器操作数;·源和目的操作数数据类型必须一致;·源和目的操作数不允许同时为段寄存器;·目的操作数不允许为CS和立即数;·当源操作数为立即数时,目的操作数不允许为段寄存器;·传送操作不影响标志位。

80X86汇编语言程序设计教程+课后习题答案(清华大学版)

80X86汇编语言程序设计教程+课后习题答案(清华大学版)

80X86汇编语言程序设计教程+课后习题答案(清华大学版)第二章答案tarzan版题2.18086/8088通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门用途?哪些寄存器可以做为存储器串行方式的指针寄存器?请问:8086/8088通用寄存器的通用性整体表现在:这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;8个通用寄存器的专门用途如下:ax字乘法,字除法,字i/obx存储器指针cx串成操作方式或循环掌控中的计数器dx字乘法,字乘法,间接i/osi存储器指针(串成操作方式中的源指针)di存储器指针(串成操作方式中的目的指针)bp存储器指针(读取堆栈的指针)sp堆栈指针其中bx,si,di,bp可作为存储器寻址方式的指针寄存器题2.2从程序员的角度,8086/8088存有多少个可以出访的16十一位寄存器?存有多少个可以出访的8十一位寄存器?请问:从程序员的角度,8086/8088存有14个可以出访的16十一位寄存器;存有8个可以出访的8十一位寄存器;题2.3寄存器ax与寄存器ah和al的关系如何?请写出如下程序片段中每条指令执行后寄存器ax的内容:movax,1234hmoval,98hmovah,76haddal,81hsubal,35haddal,ahadcah,aladdax,0d2hsubax,0ffh请问:movax,1234hax=1234hmoval,98hax=1298hmovah,76hax=7698haddal,81hax=7619hsubal,35 hax=76e4haddal,ahax=765ahadcah,alax=d15ahaddax,0d2hax=d22chsubax,0ffhax=d12dh题2.48086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态?答:8086/8088标志寄存器中定义了9个标志,如下:cf:carryflagzf:zeroflagsf:signflagof:overflowflagpf:parityflagaf:auxiliarycarryflagdf:directionflagif:interrupt-enableflagtf:trapflag这些标志可分为两类,分别为:1、运算结果标志;2、状态控制标志;使用指令sahf可以把ah中的选定位送至标志寄存器高8十一位sf、zf、af、pf、cf;使用clc可以去除cf,复置cf至0使用stc弯叶cf至1使用cld弯叶df至0使用std弯叶df至1使用cli弯叶if至0采用sti可置if到1另外,在某些指令继续执行过程中可以发生改变部分标志的状态;题2.5恳请说道说道标志cf和标志of的差异。

第3章 80X86的指令系统和寻址方式

第3章 80X86的指令系统和寻址方式

指令功能:JMP指令无条件地转移到指令所指定的目标地址, dest标号提供转移目的地址,或者由寄存器、存储器提供转 移目的地址。
根据目标地址相对于转移指令的位置,转移可分为短转移、段 内转移和段间转移。

短(SHORT)转移属于相对转移,指在段内短距离(−128~
127)转移。

段内(NEAR)转移指CS值不变,只给出地址偏移值的转移; 这种转移的目标地址与转移指令都在同一段内。

注意:LOOPE/LOOPZ与LOOPNE/LOOPNZ指令对标志位没有影响
6.串操作指令与重复前缀

源操作数用寄存器SI寻址,默认在数据段DS中,DS:[SI] 目的操作数用寄存器DI寻址,默认在附加段ES中,ES:[DI]


每执行一次串操作指令,SI和DI将自动修改:

±1(对于字节串)或±2(对于字串)
OR AX,00F0H XOR AX,AX
;AX和00F0H相或,结果在AX ;AX内容本身进行异或,结 果是AX清零
TEST和AND执行同样操作,但TEST指令不送回操作结 果,而仅仅影响标志位。 如: TEST AX,8000H ;如AX的最高位为1,则ZF =0,否则ZF=1
例 3.55
NOT BX
3) 串扫描指令 SCASB/SCASW
JNO label JNS label JO labe JS label
;无溢出,条件满足则转移到label指定的地址。 ;正数或0,条件满足则转移到label指定的地址。 ;溢出,条件满足则转移到label指定的地址。 ;负数,条件满足则转移到label指定的地址。
3)据CX中的值来决定转移的指令
kkk:
MOVSB/MOVSW指令注意点: ① 源地址用DS:SI指出 目的地址用ES:DI指出 ② CX中为字节数或字数。 ③ 若 DF 为 0 ,则用 MOVSB 时,每传送一次, SI 和 DI 自动增1;用MOVSW时,每传送一次,SI和DI自动 增2。

汇编语言程序设计第2章 80 x86计算机组织结构.ppt

汇编语言程序设计第2章 80 x86计算机组织结构.ppt
传送地址,内存中的每个字节都对应着一个唯一 的地址,I/O设备也是如此。 地址总线的位数与寻址空间有着直接的关系。 例如:8086/8088地址总线20根,则可访问的地址 为:
220 =1,048,576 = 1M
则8086/8088最大可用的存储空间为1M字节。
South china normal university
• 存储器由若干存储单元构成,存储单元的最小 单位是字节。
• 将所有的存储单元按顺序编号,即每一个字 节有一个唯一的编号,这些编号称为存储单 元的地址(也称为物理地址)。
South china normal university
• 若CPU要存取某个存储单元的内 容,则首先提供该存储单元的 地址,然后按地址选中对应的 存储单元,就可以对单元内容 进行存取操作。
外部设备
在微机系统中最常用的外部设备有: • 键盘 • 显示器 • 打印机 • 外部存储器等
CPU与外部设备交换信息是通过I/O接口电 路来完成的。
South china normal university
2.2 80X86CPU的寄存器 通用寄存器 控制寄存器 段寄存器
South china normal university
South china normal university
• IBM PC机及其 兼容机的存储 器系统主要分 为3个主要部 分:程序暂驻 区 (TPA) 、 系 统内存区和扩 展 存 储 区 (XMS)
South china normal university 图2-2 IBM PC机及其兼容机的存储器映像
South china normal university
1. 数据寄存器 (AX、BX、CX、DX)

第3章80X86指令系统(2)PPT课件

第3章80X86指令系统(2)PPT课件

src: 立即数,寄存器,存储器。
dest:寄存器,存储器。
例: CMP AL,0AH
;寄存器与立即数比较
CMP CX, DI
;寄存器与寄存器比较
CMP AX, AREA1
;寄存器与存储器比较
CMP [BX+5], SI
;存储器与寄存器比较
CMP WORD PTR ALPHA,100H;存储器与立即数比较
ZF=0, AX = BX ,两者不相等
(2) 根据CF标志, 判断两个无符号数的大小
例: 比较AX,BX寄存器, 将大数 AX

CMP AX,BX
JNC NEXT
; CF=0跳转至NEXT
XCHG AX,BX
NEXT:……
结论:CF=0 , AX > BX ; CF=1, AX < BX
22
(3) 用SF、OF标志,判断两个带符号数的大小 设:被比较二个带符号数分别为 : A、B 若SF OF=0, 则A>B 若SF OF=1, 则 A<B
为寄存器;单操作数指令不能为立即数。
2
(一)加法指令(Arithmetic)
8086/8088有5种加法操作指令:
1、 ADD(Addition)加法指令 2、 ADC(Add with carry)带进位加法指令 3、 INC(Increment by 1)加 1指令 4、 AAA(ASCII adjust for addition)加法ASCII调整指令 5、 DAA(Decimal adjust for addition)加法十进制调整指令
20D59E36C1H=?
开始
两个多字节数存放在:
DATA1,DDAATAT1 A2的F8H开始单元。

80X86汇编语言电子教案(3-2-全部)

80X86汇编语言电子教案(3-2-全部)

POP BX 执行后 (BX) = 2107H
POP BX 执行过程堆栈图示
—白燕—
例:假设一个指令序列: PUSH X ; X 必须是字变量 PUSH ES POP Y ; Y 必须是字变量 执行前:(X)=1234H, (SS)=0FFA0H,
ES)=2367H, (SP)=0100H,
试画出堆栈的变化情况
—白燕—
答案: 地

初始堆栈:
由 (SP)=100H



栈底


PUSH X
(SP)=00FEH 34H
12H
100H

(X)=1234H
栈底

PUSH ES
(SP)=00FCH 67H
23H
(SP)= 00FEH 34H
ES=(2367H)
12H

栈底

POP Y
Y 67H
23H
—白燕—
5 PUSHA/PUSHAD

MOV BX, OFFSET BLOCK
LEA BX, BLOCK
操作数 长度
16 16 32 32
地址 长度 16 32 16 32
执行的操作
计算所得的16位有效地址存入16位目的寄存器32 位有效地址 截取低16位存入16位目的寄存器 16位有效地址 零扩展后存入32位目的寄存器 计算所得的32位有效地址存入32位目的寄存器
必须注意
存入寄存器的值是由SRC计算出的有效地址 值 而不是该地址所在的存储单元的内容
—白燕—
下面举例说明LEA BX, BLOCK 与MOV BX, BLOCK的区别
例 假设BLOCK的偏移量是0100H BLOCK =3412H
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

26 Glut _C 2013-08
如果一个正数调用NEG指令,实际上求出的是它 的机器负数。 例如 (AL)=14H, 执行
NEG AL
指令执行后 (AL) = 0 ECH -14H
如果一个负数,如果不先保存符号位,使用NEG指令 后,实际上变成了他的绝对值。 例如: MOV AL, 0ECH
80X86指令系统(续)
1 Glut _C 2013-08
算术运算指令包括加、减、乘、除基本运算指令,十进制运 算的调整指令。 可以进行带符号数的运算,也可以进行无符号数的运算。
2 Glut _C 2013-08
2.3.2 加减法运算 加减法运算结果可以存放在通用寄存器中,也可以存放在存 储器中。
Ο —按结果设置标志,Δ —不影响该标志位
Glut _C 2013-08 4
减法运算指令有
5 Glut _C 2013-08
乘法运算指令有
指令格式
操作功能 (AX) ←(src) × (AL) (DX:AX) ←(src) × (AX) (AX) ←(src) × (AL) (DX:AX) ←(src) × (AX)
NEG AL
Glut _C 2013-08
;(al)= -14h
;(al)= 14h
27
例:内存数据段存放了200个带符号数(字节),首 地址为TAB1,要求将各数取绝对值后存入以TAB2为 首址的内存区。 由于200个带符号数中可能既有正数,又有负数, 因此先要判断正负。如为正数,可以原封不动地传送 到另一内存区;如为负数,则需先求补即可得到负数 的绝对值,然后再传送。程序流程框图如下:
立即数IMM 通用寄存器 REG + 或 通用寄存器REG

结果保存在通用寄存器中
存储器MEM
立即数IMM 存储器MEM + 或 通用寄存器REG
结果保存在存储器中
Glut _C 2013-08
3
加法运算指令有
指令格式 操作功能 标志位影响 O S Z A P C
○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ △ × × × ○ × 1 × ○ ○ ○ ○ ○
Glut _C
AX, 3A5FH

8
AX, [BX+1000H];
ADD 2013-08
[BX+DI], AX;
2. 带进位加法指令
(1)格式: ADDC dst, src
(2)功能:除了两个操作数相加外,再加上进位信
号(将进位位加到最低位)。
(dst) = (dst)+(src)+CF 例如: ADDC ADC AX,BX ; (AX)←(AX)+(BX)+CF AL, BL ;(AL)←(AL)+(BL)+CF ;CF是进位标志。
28 Glut _C 2013-08
开始 取地址 SITAB1 DI TAB2 循环次数 CX200 CHECK AL [SI] (AL)<0 Y NEG AL
23 Glut _C 2013-08
2. 带进位位的减法指令
(1)格式: SBB dst, src (2)功能:(dst)(dst)-(src)-CF 它与减法指令SUB的区别在于还减去借位信号CF。它与带进位位的加法 指令一样,用于做多字(字节)的减法。 例如 SBB SUB AX, 2100H AL, BL
对于任意字长的数的加法,都可以这样进行。
12 Glut _C 2013-08
这里我们没有判断溢出标志位OF,第一字节有进位 或溢出,表明超过16位的表示范围,将进位信号加到 高16位上,如果高16位出现溢出,需要看我们结果字 长了:
如果保留3个字长,则将进位再加到更高位上
否则判断产生溢出错误。 ADD ,ADC指令影响标志位: CF, OF, ZF, SF, AF, PF
ADD dst, src (dst) ←(dst) +(src) ADC dst, src (dst) ←(dst)+(src)+(CF) INC dst (dst) ←(dst) + 1 AAA ASCII 码调整指令 非压缩 BCD码调整 DAA BCD调整指令
在微处理器中,没有专用的BCD码运算指令, 使用二进制运算指令进行BCD码数的运算,然后用 BCD码运算调整指令进行调整,重新得到BCD码的 结果。
的,因此,是否在加法指令后使用DAA或AAA指令,
是由我们设计程序时确定的——数据是BCD格式,一
定需要调整,是压缩的BCD码,则用DAA调整,是非
压缩的BCD码,则使用AAA调整。 加法指令,使用8位的加法运算,以AL作为目的 操作数。
21 Glut _C 2013-08
6. 交换及相加指令
(1) 格式 XADD dest, reg (2)功能: 将目的操作数和源操作数的数据进行交换,然后把源 操作数中的数据和目的操作数中的数据相加后送入目的操作 数。 dest→reg dest+reg→dest 相当于两条指令 XCHG dest, reg ADD dest, reg
× × × × × ×
DIV src
IDIV src AAD CBW CWD
Glut _C 2013-08
× × × × × × × ○ ○ △ ○ ×
BCD调整指令
若(AL)<80H,则(AH) ←00H, △ △ △ △ △ △ 否则(AH) ←FFH 若(AX)<8000H,则(DX) ←0000H, △ △ △ △ △ △ 否则(DX) ←FFFFH 7
等。对标志位的影响同SUB指令。
24 Glut _C 2013-08
3. 减一指令
(1)格式: DEC dst (2)功能: (dst) (dst)-1 例如: 如果(AX)=1234H,执行 DEC AX 后,(AX)=1233H DEC WORD PTR [BP] 对于堆栈区间BP指向的一个字内容-1。 WORD PTR 告诉编译程序,是字操作数。
我们设计程序时,如果参与运算的数据是压缩的 BCD码数据,则在做完加法运算后,需要使用一条 DAA指令进行调整。 注意这时的加法运算,应该使用8位的加法运算
ADD AL, src
目的操作数是AL。
ADD AX, src 对高8位无法进行调整。
DAA 指令影响标志位,但对OF没有定义。
对CF的影响——高4位大于9,或原来加法运 算CF=1,则CF=1,作为向高位的进位信号。
D31 D16 D15 D0 dst scr dst <-- 和
高16位使用带进位加法指令,低16 位的进位信号一起加进来
10 Glut _C 2013-08
+
开始 置 地 址
低 十 六 位 加 法 SIDAT1 DIDAT2 AX[SI] AX[SI+2] AX (AX) +[DI+2]+CF [SI+2](AX) 结束
19 Glut _C 2013-08
5. 非压缩BCD码加法运算调整指令
(1)格式: AAA (2)功能: 对非压缩的BCD码加法运算进行调整。 (3)对标志位的影响:只影响AF,CF 。
与DAA类似,它也是跟在以AL为目的操作数的字节性 加法指令后面使用。
20 Glut _C 2013-08
计算机中的数据格式,是我们在编写程序时确定
标志位影响 O S Z A P C
○ × × × × ○ ○ × × × × ○ × ○ ○ × ○ ×
MUL src IMUL src AAM
BCD调整指令
6 Glut _C 2013-08
除法运算指令有
指令格式 操作功能 (AL) ← (AX)/(src)的商 (AH) ← (AX)/(src)的余数 (AX) ← (DX:AX) /(src)的商 (DX) ← (DX:AX) /(src)的余数 (AL) ← (AX)/(src)的商 (AH) ← (AX)/(src)的余数 (AX) ← (DX:AX) /(src)的商 (DX) ← (DX:AX) /(src)的余数 标志位影响 O S Z A P C
3 7 + 2 6 6 3
(0110 0011 B)
Glut _C 2013-08
0011 0111 + 0010 0110 0101 1101
显然,结果 不是正确的 BCD码
16
DAA指令就是对这样的加法运算进行调整,使得它变 为正确的BCD运算结果。
调整方法:如果表示BCD的四位二进制位 > 9,或产生 向高位的进位,则在相应的BCD位+6。 例如上面的结果, 低4位=1101,大于9 结果变为 正确的 BCD码运 算结果了
13 Glut _C 2013-08
当然,对于80386~Pentium,可以直接使用32位运算
ADD EAX,EBX 64位运算等,还是这样先做低32位加法,然后再用带进位加 法指令做高32位运算。
14 Glut _C 2013-08
3. 加一指令 (1)格式
INC dst
(2)功能
将目标操作数的内容+1,再送回目标操作数。
0101 1101 + 0000 0110 0110 0011
17 Glut _C 2013-08
1000 1001 + 0111 1001 1 0000 0010
进位=1
+
进位=1
89 79 168
1 0000 0010 + 0110 0110 1 0110 1000 1 6 8
18 Glut _C 2013-08
该指令影响标志位,但不影响CF。
25 Glut _C 2013-08
相关文档
最新文档