汇编课第3章寻址方式与指令系统之3 (1)
- 格式:pdf
- 大小:940.13 KB
- 文档页数:87
汇编习题及答案第三章 8086的寻址⽅式和指令系统1. 指令正误判断,对正确指令写出源和⽬的操作数的寻址⽅式,对错误指令指出原因(设VAR1, VAR2为字变量, L1为标号):(1)MOV SI,100 (2)MOV BX,VAR1[SI](3)MOV AX, [BX] (4)MOV AL, [DX](5)MOV BP, AL (6)MOV VAR1, VAR2(7)MOV CS, AX (8)MOV DS, 0100H(9)MOV [BX][SI], 1 (10)MOV AX, VAR1+VAR2(11)ADD AX, LENGTH VAR1 (12)OR BL, TYPE VAR2(13)SUB [DI], 78H (14)MOVS VAR1, VAR2(15)PUSH 100H (16)POP CS(17)XCHG AX, ES (18)MOV DS, CS(19)JMP L1+5 (20)DIV AX, 10(21)SHL BL, 2 (22)MOV AL, 15+23(23)MUL CX (24)XCHG CL, [SI](25)ADC CS:[0100], AH (26)SBB VAR1-5,154参考答案:(1)MOV SI,100 ;指令正确,源:⽴即数寻址,⽬的:寄存器寻址(2)MOV BX,VAR1[SI] ;指令正确,源:寄存器相对寻址,⽬的:寄存器寻址(3)MOV AX, [BX] ;指令正确,源:寄存器间接寻址,⽬的:寄存器寻址(4)MOV AL, [DX] ;指令错误,DX不能⽤作为地址寄存器(5)MOV BP, AL ;指令错误,类型不⼀致(6)MOV VAR1, VAR2 ;指令错误,MOV指令不能从存储器到存储器传送(7)MOV CS, AX ;指令错误,CS不能⽤作为⽬的操作数(8)MOV DS, 0100H ;指令错误,MOV指令不能将⽴即数传送到段寄存器(9)MOV [BX][SI], 1 ;指令错误,类型不定(10)MOV AX, VAR1+VAR2 ;指令错误,MOV指令中不能完成加法运算(11)ADD AX, LENGTH VAR1 ;指令正确,源:⽴即数寻址,⽬的:寄存器寻址(12)OR BL, TYPE VAR2 ;指令正确,源:⽴即数寻址,⽬的:寄存器寻址(13)SUB [DI], 78H ;指令错误,类型不定(14)MOVS VAR1, VAR2 ;指令正确,源:隐含寻址,⽬的:隐含寻址(15)PUSH 100H ;指令错误,⽴即数不能直接压⼊堆栈(16)POP CS ;指令错误,CS不能⽤作为⽬的操作数(17)XCHG AX, ES ;指令错误,XCHG指令中不能使⽤段寄存器(18)MOV DS, CS ;指令错误,MOV指令不能从段寄存器到段寄存器(19)JMP L1+5 ;指令正确,段内直接转移(20)DIV AX, 10 ;指令错误,DIV指令格式错误(21)SHL BL, 2 ;指令错误,移位指令的移位数要么是1,要么是CL(22)MOV AL, 15+23 ;指令正确,源:⽴即数寻址,⽬的:寄存器寻址(23)MUL CX ;指令正确,源:寄存器寻址,⽬的:隐含寻址(24)XCHG CL, [SI] ;指令正确,源:寄存器间接寻址,⽬的:寄存器寻址(25)ADC CS:[0100], AH ;指令正确,源:寄存器寻址,⽬的:直接寻址(26)SBB VAR1-5,154 ;指令正确,源:⽴即数寻址,⽬的:直接寻址2.写出下列转移指令的寻址⽅式(设L1为标号,VAR1为字型变量,DVAR1为双字型变量):(1)JMP L1 (2)JMP NEAR L1(3)JNZ L1 (4)JMP BX(5)JG L1 (6)JMP VAR1[SI](7)JMP FAR PTR L1 (8)JMP DVAR12. 答:(1)JMP L1 ;段内直接寻址(2)JMP NEAR L1 ;段内直接寻址(3)JNZ L1 ;段内相对寻址(4)JMP BX ;段内间接寻址(5)JG L1 ;段内相对寻址(6)JMP VAR1[SI] ;段内间接寻址(7)JMP FAR PTR L1 ;段间直接寻址(8)JMP DVAR1 ;段间间接寻址3. 如果堆栈的起始地址为2200:0000,栈底为0100H,(SP)=00A8H,求(1)栈顶地址;(2)SS的内容;(3)再存⼊数据5678H,3AF2H后,SP的内容。
汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。
所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。
在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。
操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。
微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。
其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。
另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。
为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。
1、⽴即寻址⽅式操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。
⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。
例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。
该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。
⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。
图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。