明天 汇编考试,今天小结一下
数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数 POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(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,O SUB,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,O INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,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/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,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,O ROR,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 标志位: C CLD,STD 功能: 设定方向标志 语法: CLD STD 标志位: D CLI,STI 功能: 设定中断标志 语法: CLI STI 标志位: I CMP 功能: 比较OP1与OP2的值 语法: CMP r/m,r/m/data 标志位: C,P,A,Z,O JMP 功能: 跳往指定地址执行 语法: 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,O SCASB,SCASW 功能: 字符串搜索指令 语法: SCASB SCASW 标志位: C,P,Z,S,O LODSB,LODSW,STOSB,STOSW 功能: 字符串载入或存贮指令 语法: LODSB LODSW STOSB STOSW 标志位: 无 REP,REPE,REPNE 功能: 重复前缀指令集 语法: REP 指令S REPE 指令S REPNE 指令S 标志位: 依指令S而定 对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。 这里将简单介绍其指令类型及指令说明,如有要求给具体的指令格式及应用,请与amay联系,amay加以更新。 1)数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。 数据传送指令类型 指 令 说 明 通用数据传送指令 MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换) 累加器专用传送指令 IN(输入指令) 、OUT(输入指令) 地址传送指令 LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES) 标志寄存器传送指令 LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈) 2)算术指令:用来执行算术运算。 算术指令类型 指 令 说 明 加法指令 ADD(加法)、ADC(带进位加法)、INC(加1) 减法指令 SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较) 乘法指令 MUL(无符号数乘法)、IMUL(带符号数乘法) 除法指令 DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字) 3)逻辑指令:对字或字节执行逻辑运算。 逻辑指令类型 指 令 说 明 逻辑运算指令 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试) 移动指令 SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移) 4)串处理指令:处理存放存储器里的数据串。 串处理指令类型 指 令 说 明 指 令 MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串) 5)控制转移指令:用来控制程序的执行流程。 控制转移指令类型 指 令 说 明 无条件转移指令 JMP(段间和段内转移) 条件转移指令 JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移) 循环指令 LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令) 子程序指令 CALL(调用指令)、RET(返回指令) 中断指令 INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)
1.设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A )
A.20640H B.2063EH
C.2063FH D.21900H
解释:
(ss)*16+(sp)=物理地址.假设:(ss)=1234h(sp)=5678h(ss)*16=12340H,再加上(SP),则:179B8H
2.使用DOS功能调用时,子程序编号应放在( B )
A.AL B.AH
C.AX D.任意指定
解释:
子程序放在代码段CS:,使用DOS功能调用与它互不干涉;估计你的问题没说清楚,请补充一下.AL,AH,AX硬要选一个,则只能选AH,AH是指定中断调用功能号的,进入中断后,走那个分支,由AH的值决指定。
3.没有语法错误的输出指令是( B )
A.OUT AX,30H B.OUTDX,AL
C.OUT AL,DX D.OUT30H,AH
解释:
OUT 是输出指令,DX是端口地址,OUT DX,AL 就是将AL的内容输出到DX所指示的端口
4.用MOV指令将十进制数89以非压缩BCD码格式送入AX,可使用的指令是( B )
A.MOV AX,89 B.MOVAX,0809H
C.MOV AX,89H D.MOV AX,0809
解释:
同理:应该是MOV AX,0506H,非压缩的BCD码就是用8位两进制表示一位BCD,这样56的5需要一个字节放在AX中AH ,56的6也需要一个字节放在AX中AL,所以16位寄存器AX可以放2位BCD码,但放的时候要拆成0506
5.设AX=8765H,DX=4321H,执行CWD指令后,DX中的内容是( B )P117
A.4321H B.0FFFFH
C.8000H D.0001H
解释:
CWD是汇编语言中的字扩展指令,它的功能是将一个字型变量扩展为双字型变量,即 C hange W ord to D ouble word。CWD是字到双字符的扩展指令,可将AX内容扩展到DX AX。规则:若最高位=1,则执行后DX=FFFFH;若最高位=0,则执行后DX=0000H。
6.设CL=05H,要获得CL=0AH,可选用的指令是( A)
A.XOR CL,0FH B.NOTCL
C.OR CL,0AH D.ANDCL,0FH
解释:
XOR CL,0FH为CL=05H=00000101B与0FH=00001111B进行异或操作,结果为00001010B=0AH
7.假设执行ADD指令后AL=8CH,再执行DAA指令,AL中的值是(A )
A.92H B.0104H
C.74H D.8CH
解释:
DAA(Decimal Adjust After Addition) 组合(压缩)BCD码的加法调整指令。 格式:DAA 功能:将AL的内容调整为两位组合型的二进制数。调整方法与AAA指令类似,不同的是DAA指令要分别考虑AL的高4位和低4位。 如果AL的低4位大于9或AF=1,则AL的内容加06H,并将AF置1;然后如果AL的高4位大于9或CF=1,则AL的内容加60H,且将CF置1。如果两个都不满足,则将AF,CF清零。 例: 两个组合BCD码的加法运算 MOV AL,37H MOV BL,35H ADD AL,BL ;两个16进制数相加,AL此时为37H+35H=6C DAA ;DAA调整,这时AL为72H。
8. MOV AL,79H
ADD AL,B1H
上面指令执行后,设置的标志位CF和ZF的值是( D )
A.CF=0, ZF=1 B.CF=l, ZF=1
C.CF=0, ZF=0 D.CF=1, ZF=0
解释:
SF:代表最高位是否为1,如果为1的话,SF就置1; ZF:代表的是运算结果是否为0,如果为0的话,ZF就置1; CF:代表的是运算过程中最高但是否有进位或借位,如果有的话,CF就置1; PF:代表的是运算结果低8位是否有偶数个1,如果是偶数个1的话,PF置1;
9. TEST DL,55H
JZ NEXT
NEXT:……
…
上述程序段,执行JZ指令时能产生转移的情况是( D )
A.DL>55H B.DL<55H
C.DL=55H D.DL中第0、2、4、6位均为0
解释:
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果
10.假设AL=28H,执行ROL AL,1 指令之后的情况是( D ) P125
A.AL=14H, CF=1 B.AL=50H, CF=1
C.AL=14H, CF=0 D.AL=50H, CF=0
解释:
al = 0010 1000
al = 0101 0000
cf = 0 ;
11. 98的BCD码是 (B)
A)10011001 B) 10011000 C) 10011010 D) 10001010
解释: bcd码每位不大于10
12. –0110110 的补码是 (A)
A) 11001010 B) 11001001 C)10110110 D) 00110110
解释: 负数原码取反加1
13. 十进制数92对应的二进制数为 (A)
A) 01011100 B) 01011101 C)11011100 D) 11000101
解释: 太简单不解释
14. 十六进制38H相应的十进制数是 (B)
A) 32 B) 56 C) 58 D) 60
解释: 太简单不解释
15. 运算器的主要功能是进行__(C)__
A) 逻辑运算B) 算术运算 C) 逻辑运算与算术运算 D) 初等函数的运算
16. 下列不能做输入的是 (C)
A) 键盘 B) 扫描仪 C) 打印机 D) 鼠标
17. 8086状态字PSW中表示进位的标志位是 (B)
A) ZF B) CF C) PF D) OF
18. 8086状态字PSW中表示运算结果为零的标志位是 (A)
A) ZF B) CF C) PF D) OF
19. 将一个字数据入栈(PUSH AX), 栈指针如何变化 (A)
A) SP<-SP-2 B) SP<-SP-1 C) SP<-SP+2 D) SP<-SP+1
解释:PUSH操作会使SP指针向前移
20. 将一个字节数据入栈(PUSH AL), 栈指针如何变化 (B)
A) SP<-SP-2 B) SP<-SP-1 C) SP<-SP+2 D) SP<-SP+1
解释:PUSH操作会使SP指针向前移
21. 指出该条指令的寻址方式 MOV AX, [DI] (C)
A) 立即寻址 B) 寄存器寻址C) 寄存器间接寻址 D) 直接寻址
22. CPU处理动作的最小单位是 (B)
A) 指令周期 B)时钟周期 C) 总线周期 D) 机器周期
解释:时钟周期也称为T状态,是微处理器动作处理的最小时间单位.大小由系统旱象确定的.是系统时钟周期的倒数. 时钟周期的上升如下降脉冲,每个时钟周期有2次.
23.设BX=1234H,DS=2000H,(21234H)=5678H,则指令“LEA SI,[BX]”执行后的结果是 P74
( B )
A.SI=5678H B.SI=1234H
C.SI=2000H D.SI=3234H
解释:LEA装入偏移地址是根据OPS寻址方式计算EA,不需要再用EA来取操作数。 例如:BUF的偏移地址为120H,BX=0A00H,SI=0010H,则 命令 LEA DI,BUF //DI=120H 命令 LEA DX,[BX][SI] //DX=BX+SI=0A00H+0010H=0A10H
24.设BX=1234H,DS=2000H,(21234H)=5678H,则指令“MOV SI,[BX]”执行后的结果是 P74
( a )
A.SI=5678H B.SI=1234H
C.SI=2000H D.SI=3234H
填空题
1. 8 位二进制数是一字节, 16 位二进制数是一个字
2. 8086CPU有16位 数据总线、20位地址总线,可寻址空间是1 MB。
解释:ax为16位,地址有 SS*16+SP 故有20位 空间为2^20 = 1m
3. 写出下列指令,数据类的寻址方式:
MOV AX , 2000H 立即寻址 ; MOV AX , BX 寄存器寻址
;
4. 内存某单元的内容为 11010011B (1)该数为原码,真值是 –83D
(2)该数为反码,真值是 –44D. (3)该数为补码,真值是 –45D
5. 信息代码 011 0110奇校验码为:1011 0110 ,偶校验码为:0011 0110
解释:
奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
6. 8086CPU由___执行部件EU_____和___总线接口部件BIU______两部分组成
协调工作过程: 总线接口部件和执行部件并不是同步工作的,它们按以下流水线技术原则来协调管理: ① 每当8086 的指令队列中有两个空字节,或者8088 的指令队列中有一个空字节时,总线接口部件就会自动把指令取到指令队列中。 ② 每当执行部件准备执行一条指令时,它会从总线接口部件的指令队列前部取出指令的代码,然后用几个时钟周期去执行指令。在执行指令的过程中,如果必须访问存储器或者输入/输出设备,那么,执行部件就会请求总线接口部件进入总线周期,完成访问内存或者输入/输出端口的操作;如果此时总线接口部件正好处于空闲状态,那么,会立即响应执行部件的总线请求。 但有时会遇到这样的情况,执行部件请求总线接口部件访问总线时,总线接口部件正在将某个指令字节取到指令队列中,此时总线接口部件将首先完成这个取指令的操作,然后再去响应执行部件发出的访问总线的请求。 ③ 当指令队列已满,而且执行部件又没有总线访问请求时,总线接口部件便进入空闲状态。 ④ 在执行转移指令、调用指令和返回指令时,由于程序执行的顺序发生了改变,不 再是顺序执行下面一条指令,这时,指令队列中已经按顺序装入的字节就没用了。遇到这种情 况,指令队列中的原有内容将被自动消除,总线接口部件会按转移位置往指令队列装入另一 个程序段中的指令。
7. I/O端口的两种编址方式:统一编址 和 独立编址
解释:
独立编址和统一编址: 1.独立编址(专用的I/O端口编址)----存储器和I/O端口在两个独立的地址空间中 (1)优点:I/O端口的地址码较短,译码电路简单,存储器同I/O端口的操作指令不同,程序比较清晰;存储器和I/O端口的控制结构相互独立,可以分别设计 (2)缺点:需要有专用的I/O指令,程序设计的灵活性较差 2.统一编址(存储器映像编址)----存储器和I/O端口共用统一的地址空间,当一个地址空间分配给I/O端口以后,存储器就不能再占有这一部分的地址空间 (1)优点:不需要专用的I/O指令,任何对存储器数据进行操作的指令都可用于I/O端口的数据操作,程序设计比较灵活;由于I/O端口的地址空间是内存空间的一部分,这样,I/O端口的地址空间可大可小,从而使外设的数量几乎不受限制 (2)缺点:I/O端口占用了内存空间的一部分,影响了系统的内存容量;访问I/O端口也要同访问内存一样,由于内存地址较长,导致执行时间增加
8.若源程序从标号START开始执行,源程序结束伪指令为__END START________。
三、简答题 (每题5分,共20分)
1. 计算机的硬件系统由哪几个部件组成?简述各部件的功能?
答:计算机硬件由运算器、控制器、存储器、输入设备和输出设备组成。
运算器: 主要进行算术和逻辑运算
控制器: 从存储器取指令,送指令寄存器,再送指令译码器,根据指令的功能产生一系列时序信号控制各部件动作。
存储器:存储程序、原始数据、中间结果和最终结果等,包括内存和辅助存储器。
输入设备: 用来接收用户输入的原始数据和程序的设备
输出设备:将计算机运算结果转换为人们或设备能识别的形式的设备
2. 什么叫寻址方式?8086 有哪些寻址方式?
答:寻址操作数有效地址的方式叫寻址方式。 8086的寻址方式有:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址。
解释:
以 MOV 指令为例 1. 立即寻址方式* —— 操作数在指令中给出MOV AL, 5MOV AX, 3064H* 只能用于SRC字段 ? MOV 5, AL* SRC 和 DST的字长一致 ? MOV AH, 3064H 2. 寄存器寻址方式* —— 操作数在指定的寄存器中MOV AX, BXMOV AL, BH * 字节寄存器只有 AH AL BH BL CH CL DH DL* SRC 和 DST的字长一致 MOV AH, BX* CS不能用MOV指令改变 MOV CS, AX 3. 直接寻址方式* —— 有效地址EA由指令直接给出有效地址EA:操作数的偏移地址物理地址PA = 16d * (DS) + EA例:MOV AX, [2000H]EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H 例:操作数地址可由变量(符号地址)表示MOV AH, VALUE ( VALUE DB 10 ) * 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES :[2000H] * 使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE ;错误 MOV AL, VALUE MOV AX, WORD PTR VALUE * 适于处理单个变量 4. 寄存器间接寻址方式 * ——EA在基址寄存器(BX/BP) 或变址寄存器(SI/DI)中 BX, SI, DI ->(DS) 物理地址 = 16d * (DS) + (BX) 物理地址 = 16d * (DS) + (SI) 物理地址 = 16d * (DS) + (DI) BP ->(SS) 物理地址 = 16d * (SS) + (BP) MOV AX, [BX] PA = 16d *(DS) + (BX) MOV ES:[BX] , AX PA = 16d *(ES) + (BX) MOV DX, [BP] PA = 16d *(SS) + (BP) 寄存器间接寻址方式* * 不允许使用AX、CX、DX存放EA MOV AX, [CX];错误 * SRC 和 DST的字长一致 MOV DL, [SI] ; [BX]指示一个字节单元 MOV DX, [DI] ; [BX]指示一个字单元 * 适于对数组、字符串、表格中的数据连续处理 5. 寄存器相对寻址方式* 有效地址 = (BX) + 8位或者16或位移量 有效地址 = (BP) + 8位或者16或位移量 有效地址 = (SI) + 8位或者16或位移量 有效地址 = (DI) + 8位或者16或位移量 例: MOV AX, COUNT[SI] 或 MOV AX, [COUNT+SI] 假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么 PA = 35000H 假设(35000H)=1234H, 那么 (AX)=1234H * 适于数组、字符串、表格的处理 6. 基址变址寻址方式* 有效地址 = (BX) + (SI) 有效地址 = (BX) + (DI) 有效地址 = (BP) + (SI) 有效地址 = (BP) + (DI) MOV AX, [BX][DI] PA=(DS)×16d+(BX)+(DI) 或 MOV AX, [BP+DI] PA=(SS)×16d+(BX)+(DI) MOV AX, ES:[BX][SI] PA=(ES)×16d+(BX)+(SI) * 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, [BX][BP] ;错误 MOV AX, [SI][DI] ;错误 7. 相对基址变址寻址方式* 有效地址 = (BX) + (SI) + 8位或者16或位移量 有效地址 = (BX) + (DI) + 8位或者16或位移量 有效地址 = (BP) + (SI) + 8位或者16或位移量 有效地址 = (BP) + (DI) + 8位或者16或位移量 MOV AX, MASK[BX][SI] 或 MOV AX, MASK[BX+SI] 或 MOV AX, [MASK+BX+SI] * 适于堆栈处理和数组处理
3. 什么是逻辑地址?它由哪两部分组成?8086的物理地址是如何形成的?
答:逻辑地址是将存储器分成若干个段之后而出现的一种地址形式,它由段地址和偏移地址组成,物理地址是将逻辑地址中的段地址左移4个二进制位,再加上偏移地址而形成的.
4. 简述汇编语言的上机过程包括哪几个步骤?
1) 设计程序
2) 使用masm命令编译程序,生成扩展名为obj的文件
3) 使用link命令连接程序,生成扩展名为exe的可执行文件
4) 执行生成的可执行文件
汇编考试小结