文档库

最新最全的文档下载
当前位置:文档库 > 指出下列指令中源操作数和目的操作数的寻址方式

指出下列指令中源操作数和目的操作数的寻址方式

1.指出下列指令中源操作数和目的操作数的寻址方式:

(1) MOV SI,1000

(2) MOV BP,AX

(3) MOV [SI],1000

(4) MOV BP,[AX]

(5) AND DL,[BX + SI + 20H]

(6) PUSH DS

(7) POP AX

(8) MOV EAX,COUNT[EDX*4]

(9) IMUL AX,BX,34H

(10) JMP FAR PTR LABEL

2.指出下列指令语法是否正确,若不正确请说明原因。

(1) MOV DS,0100H

(2) MOV BP,AL

(3) XCHG AX,2000H

(4) OUT 310H,AL

(5) MOV BX,[BX]

(6) MOV ES:[BX + DI],AX

(7) MOV AX,[SI + DI]

(8) MOV SS:[BX + SI + 100H],BX

(9) AND AX,BL

(10) MOV DX,DS:[BP]

(11) MOV [BX],[SI]

(12) MOV CS,[1000]

(13) IN AL,BX

3.设DS = 2000H,BX = 1256H,SI = 528FH,偏移量 = 20A1H,[232F7H] = 3280H,[264E5] = 2450H。若独立执行下述指令后,请给出对应IP寄存器的内容。

(1) JMP BX;IP=?

(2) JMP [BX][SI];IP=?

4.32位机中,当用MOVZX和MOVSX指令时,传送执行后,结果有什么区别?试以传送80H为例说明之。

6.有如下程序:

MOV AL,45H

ADD AL,71H

DAA

MOV BL,AL

MOV AL,19H

ADC AL,12H

DAA

MOV BH,AL

执行后,BX =?标志位PF =?CF =?

7.执行下列程序段,指出此程序段功能。

(1) MOV CX,10

LEA SI,First

LEA DI,Second

REP MOVSB

(2) CLD

LEA DI,ES:[0404H]

MOV CX,0080H

XOR AX,AX

REP STOSW

8.试用指令实现:

(1) AL寄存器低4位清0;

(2) 测试DL寄存器的最低2位是否为0,若是,则将0送入AL寄存器;否则将1送AL 寄存器。

9.已知AX=8060H,DX=03F8H,端口PORT1的地址是48H,内容为0040H;PORT2的地址是84H,内容为0085H。请指出下列指令执行后的结果。

(1) OUT DX,AL

(2) IN AL,PORT1

(3) OUT DX,AX

(4) IN AX,48H

(5) OUT PORT2,AX

1. 试用指令实现

(1)使AX寄存器清0有4种方式,试写出;

(2)BL寄存器低4位置1;

(3)CL寄存器低4位取反。

参考答案:

(1)XOR AX,AX

AND AX,0000H

SUB AX,AX

MOV AX,0000H

(2)OR BL,0FH

(3)XOR CL,0FH

2. 试分析下面程序段完成什么功能?

MOV CL,04H

SHL DX,CL

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL

参考答案:

(DX):(AX)的内容左移4位

3. 下列程序段执行完成后,物理地址单元01070H的内容是什么?

MOV AX,0E0H

MOV DS,AX ;(DS)= 00E0H

MOV BX,200H ;BX指向DS从200H

单元开始的存储区

MOV CX,BX ;(CX)=200H

NEXT: MOV [BX],BL ;将BL中的值存入

BX所指存储单元

INC BX

LOOP NEXT

参考答案:

该程度段实现的功能是将DS(值为00E0H)数据段中偏移地址从200H个单元赋予与它的低8位偏移地址相同的内容。物理地址单元01070H在该数据段中的偏移地址为:01070H –(DS)×16 = 0270H

所以,[01070H] = 70H.

4.已知AL中存放着某字符的ASCII码,下列程序段完成的功能是什么?若(AL)=?A‘=41H,程序段执行后,AL中的值为多少?

MOV BL,0 ;计数器BL清0

MOV CX,8 ;置循环次数8

AGAIN: ROL AL,1 ;AL内容循环左移1位,

最高位送至CF

JNC NEXT ;CX=1,计数器BL加1,

否则跳过

INC BL

NEXT: LOOP AGAIN

SHR BL,1 ;测试BL中统计结果

(AL中1的个数)的奇偶性

JC EXIT ;为奇数结束,否则将AL

最高位1

OR AL,80H

EXIT:HLT

参考答案:

该程度段实现的功能是对AL中的ASCII码字符进行奇偶测试,并根据结果修改AL 的最高位,使AL中1的个数为奇数。

若(AL)= ?A‘ = 41H,程序段执行后,(AL)= 11000001B

5.若(BX)= 0002H,且有如下变量定义:

DBT1 DW 0400H

DBT2 DD 01000020H

TAB DW 0600H, 0640H, 06A0H, 06C0H

请指出下列指令的寻址方式及转向地址:

(1)JMP BX

(2)JMP DBT1

(3)JMP DBT2

(4)JMP TAB [BX + 2]

参考答案:

(1) 转向地址(IP)=(BX)= 0002H,寻址方式为段内间接转移寻址;

(2)(IP)=(DATA1)= 0400H,寻址方式为段内间接转移寻址;

(3) (IP)= 0020H,(CS)= 0100H,即转向0100H:0020H处,寻址方式为段间间接转移寻址;

(4)(IP)=(TAB+BX+2)= (TAB+0004H)= 06A0H,寻址方式为段内间接转移寻址;

6. 在数据段ADDR1地址处有200个字节,要传送到数据段地址ADDR2处。试在下面程序段的空白处填上适当的指令或操作数,以实现上述功能。

MOV SEG,ADDR1

MOV DX,AX

MOV ES,1

MOV SI, 2

MOV DI,OFFSET ADDR2

MOV 3 ,200

CLD

REP 4

参考答案:

该程度段实现的功能是用带重复前缀的串传送指令完成数据块搬移。按串传送指令的约定,目标数据块应在ES附加数据段,SI指示源数据块地址,DI指示目标数据块地址,CX作重复次数计数器。

程序填空如下:

1 AX(ES指向ADDR2所在的数据段)

2 OFFSET ADDR2(设置源数据串首地址)

3 CX(设置传送的字节数)

4 MOVSB(字节串传送)

7. ADDR1开始的单元中连续存放两个双字数据,将其求和存放在ADDR2开始的单元。试在下面程序段的空白处填上适当的指令或操作数,以实现上述功能。

MOV CX,2

XOR BX,BX

CLC

NEXT:MOV AX,ADDR1[BX]

ADC AX, 1

MOV ADDR2[BX],AX

ADD 2 ,2

3 NEXT

参考答案:

该题要注意ADDR1的第2个双字数据相对于ADDR1的偏移地址为4。

程序填空如下:

1 ADDR1[BX+4]

(与第2个双字数据对应低位或高位相加)

2 BX(调整BX指向双字高位)

3 LOOP(双字未加完,转NEXT处)

8. 设有100H个字节的数据(补码)存放在数据段中自EA = 2000H开始的存储单元中,以下程序从该数据区中找出一个最小数并存入EA = 2100H的单元中,请将程序补充完整。

MIN:MOV BX,1

MOV AL,[BX]

MOV CX,2

LP1:INC BX

CMP AL,[BX]

3 LP2

MOV AL,[BX]

LP2:DEC CX

JNZ 4

MOV 5 ,AL

参考答案:

该程度段找最小数的思想是先假定第1个数存于AL中,然后依次同第2个数开始的余下数据比较。所以,各空应填:

1 2000H(BX指向数据区首地址2000H单元)

2 0FFH(设置比较次数,第一单元不比较)

3 JLE/JNG(小于等于或不大于转LP2)

4 LP1(未比较完转LP1继续扫描比较)

5 [2100H](AL中存放的最小值存入2100H单元)

9(1). 判断执行―B310H + 21A4H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1011 0011 0001 0000 B

+ 0010 0001 1010 0100 B

1101 0100 1011 0100 B = D4B4 H

OF = Cs⊕Cp = 0⊕0 = 0,CF = 0,

ZF = 0,SF = 1,PF = 1,AF = 0

9(2). 判断执行―A400H + 7100H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1010 0100 0000 0000 B

+ 0111 0001 0000 0000 B

1 0001 0101 0000 0000 B = D4B4 H

OF = Cs⊕Cp = 1⊕ 1 = 0,CF = 1,

ZF = 0,SF = 0,PF = 1,AF = 0

9(3). 判断执行―A323H -8196H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1010 0011 0010 0011 B

-1000 0001 1001 0110 B

0010 0001 1000 1101 B = D4B4 H

OF = Cs⊕Cp = 0⊕ 0 = 0,CF = 0,

ZF = 0,SF = 0,PF = 1,AF = 1

10.执行下列程序段,指出此程序段功能。

(1) MOV CX,10

LEA SI,First

LEA DI,Second

REP MOVSB

(2) CLD

LEA DI,ES:[0404H]

MOV CX,0080H

XOR AX,AX

REP STOSW

参考答案:

(1)将源字符串First的10个字节移送至目标字符串Second。

(2)将内存中从0404H单元开始的128个字单元清零。

11.试用指令实现:

(1) AL寄存器低4位清0;

(2) 测试DL寄存器的最低2位是否为0,若是,则将0送入AL寄存器;否则将1送AL 寄存器。

参考答案:

(1)AND AL, 0F0H

(2)AND DL, 03H

JZ LAB1

MOV AL, 01H

LAB1:MOV AL, 00H

或TEST DL, 03H

JZ L1

JNZ L2

L1:MOV AL, 00H

L2:MOV AL, 01H

12. 写出下列程序段计算的表达式,并计算程序执行后(AL)的值。(8分)

MOV BX,0110100101101100B

MOV CX,12

XOR AL,AL

MOV DL,1

AGAIN:SHL BX,1

JC NEXT

ADD AL,DL

NEXT:INC DL

LOOP AGAIN

HLT

参考答案:

表达式为 1 + 4 + 6 + 7 + 9 + 12

(AL)= 39 D = 27 H

13.有下列数据段:

DA TA SEGMENT

MAX EQU 03f9H

V AL1 EQU MAX MOD 0AH

V AL2 EQU V AL1*2

BUFF DB 4,5,?1234‘

BUF2 DB ?

LEND EQU BUF2-BUFF

DA TA ENDS

请写出数据段中MAX,V AL1,V AL2,LEND符号所对应的值。参考答案:

MAX = 256×3+16×15+9

= 1017 D = 03F9 H

V AL1 = 1017 ÷10 = 07 H (101余7) V AL2 = 7×2 = 14 D = 0E H LEND = BUF2 – BUFF = 06 H

14.已知X、Y、Z被赋值如下:

X EQU 60

Y EQU 70

Z EQU 8

试求下列表达式的值:

(1) X*Y-Z

(2) X/8 + Y

(3) X MOD(Y/Z)

(4) X*(Y MOD 2)

(5) X GE Y

(6) Y AND Z

参考答案:

(1) X*Y-Z = 60×70 – 8

= 4192 D

= 1060 H

(2) X/8 + Y = 60 ÷ 8 + 70

= 77 D

= 004D H

(3) X MOD(Y/Z) = 60 MOD (70 ÷ 8 )

= 60 MOD 8 = 0004 H (4) X*(Y MOD 2) = 60 × (70 MOD 2 )

= 60× 0 = 00 H

(5) X GE Y

(X ≥ Y不成立,结果为00 H)

(6) Y AND Z = 70 AND 8

= 46 H AND 08 H

= 01000110 B AND 00001000 B

= 00 H

15.如何用256×1芯片组成4096×8的存储容量。

答案:

16.设有3个字变量的变量名及其内容如下:

V AR1 3C46H

V AR2 F678H

V AR3 0059H

试设计一个数据段定义这3个变量及其地址(包括段地址和偏移地址)表变量ADDRTABL。参考答案:

数据段定义如下:

DATA SEGMENT

V AR1 DW 3C46H

V AR2 DW F678H

V AR3 DW 0059H

ADDRTABL DD VAR1

DD V AR2

DD V AR3

DATA ENDS

5-1.已知8086 CPU中当前段寄存器的基址(DS) = 021FH,(ES) = 0A32H,(CS) = 234EH,则上述各段在存储器空间中物理地址的首地址号及末地址号是什么?

参考答案:

DS:DS × 10H = 021F0 H (首地址)

= 021F0 H + 0FFFF H

= 121EF H (末地址)

ES:DS × 10H = 0A320 H (首地址)

= 1A31F H (末地址)

CS:DS × 10H = 234E0 H (首地址)

= 334DF H (末地址)

5-2.假如8086 CPU中,(CS) = 234EH,已知物理地址为25432H,若(CS)的内容被指定成1A31H,则物理地址应为什么地址号?

参考答案:

偏移地址= 原物理地址– (CS) × 10H

= 25432 H – 234E0 H

= 1F52 H

新物理地址= (CS) × 10H + 偏移地址

= 1A310 H + 1F52 H

= 1C262 H

5-5.在8086中,堆栈操作是字操作,还是字节操作? 已知(SS) = 1050H,(SP) = 0006H,(AX) = 1234H。若执行对AX的压栈操作(即执行PUSH AX),操作后则(AX)存放在何处?

参考答案:

(1)堆栈操作是字操作。

(2)首先SP 自动减2,(SP)= 0004 H ,然后压入AX ,所以(AX)存放在:

PA = (SS) × 10H + 0004 H = 10504 H

执行此操作时,8086输出的状态信息:

S0 = 1,S1=1,S2=0,表示写内存;S3=1,S4=0,访问堆栈段;S5=0,禁止可屏蔽中断;S6=0,8086与总线相连。

1. (1)已知数据段定义如下,假设该数据段从56ABH:0099H 开始,请用示意图说明各变量在内存中的分配情况。

DATA SEGMENT

V AR1 DB 1000B ,32,30H

V AR2 DB ?B2b‘

V AR3 DW 2 DUP (?)

V AR4 DD 56ABH

DATA ENDS

参考答案:

(2)已知数据段定义如下,假设该数据段从0A8BH :0000H 存储单元开始,请用示意图说明各变量在内存中的分配情况。 DATA SEGMENT

V AR1 DW 06D9H

V AR2 DB ?eA‘

V AR3 DB ?

V AR4 DW 2 DUP (00)

DATA ENDS

参考答案:

2.对下列RAM 芯片组排列,各需要多少个RAM 芯片?多少个芯片组?多少根片内地址

线?若和8088CPU 相连,则又有多少根片选地址线?

08 H 20 H

30 H 42 H 32 H

62 H

????

AB H 56 H 00 H 00 H

VAR1VAR2VAR3VAR456ABH:0099H 56ABH:009CH 56ABH:009FH 56ABH:00A3H 06H

?00H VAR3VAR2VAR1VAR065H 41H 0A8BH:0000H 00H 00H

00H

D9H

0A8BH:0002H 0A8BH:0004H 0A8BH:0005H

(1) 1K×4位芯片组成16K×8位存储空间

(2) 8K×8位芯片组成512K×8位存储空间

参考答案:

(1)芯片数:(16K×8)/(1K×4)= 32

芯片组数:16K/1K = 16

片内地址线:log2 1K = 10

片选地址线:log2 16K - 10 = 4

(2)芯片数:(512K×8)/(8K×8)= 64

芯片组数:512K/8K = 64

片内地址线:log2 8K = 13

片选地址线:log2 512K - 13 = 6

3. 试用指令实现

(1)使AX寄存器清0有4种方式,试写出;

(2)BL寄存器低4位置1;

(3)CL寄存器低4位取反。

参考答案:

(1)XOR AX,AX

AND AX,0000H

SUB AX,AX

MOV AX,0000H

(2)OR BL,0FH

(3)XOR CL,0FH

4. 若(BX)= 0002H,且有如下变量定义:

DBT1 DW 0400H

DBT2 DD 01000020H

TAB DW 0600H, 0640H, 06A0H,

06C0H

请指出下列指令的寻址方式及转向地址:

(1)JMP BX

(2)JMP DBT1

(3)JMP DBT2

(4)JMP TAB [BX + 2]

参考答案:

(1) 转向地址(IP)=(BX)= 0002H,寻址方式为段内间接转移寻址;

(2)(IP)=(DATA1)= 0400H,寻址方式为段内间接转移寻址;

(3) (IP)= 0020H,(CS)= 0100H,即转向0100H:0020H处,寻址方式为段间间接转移寻址;

(4)(IP)=(TAB+BX+2)= (TAB+0004H)= 06A0H,寻址方式为段内间接转移寻址;

5. 设有100H个字节的数据(补码)存放在数据段中自EA = 2000H开始的存储单元中,以下程序从该数据区中找出一个最小数并存入EA = 2100H的单元中,请将程序补充完整。

MIN:MOV BX,1

MOV AL,[BX]

MOV CX,2

LP1:INC BX

CMP AL,[BX]

3 LP2

MOV AL,[BX]

LP2:DEC CX

JNZ 4

MOV 5 ,AL

参考答案:

该程度段找最小数的思想是先假定第1个数存于AL中,然后依次同第2个数开始的余下数据比较。所以,各空应填:

1 2000H(BX指向数据区首地址2000H单元)

2 0FFH(设置比较次数,第一单元不比较)

3 JLE/JNG(小于等于或不大于转LP2)

4 LP1(未比较完转LP1继续扫描比较)

5 [2100H](AL中存放的最小值存入2100H单元)

6(1). 判断执行―B310H + 21A4H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1011 0011 0001 0000 B

+ 0010 0001 1010 0100 B

1101 0100 1011 0100 B = D4B4 H

OF = Cs⊕Cp = 0⊕0 = 0,CF = 0,

ZF = 0,SF = 1,PF = 1,AF = 0

6(2). 判断执行―A400H + 7100H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1010 0100 0000 0000 B

+ 0111 0001 0000 0000 B

1 0001 0101 0000 0000 B = D4B4 H

OF = Cs⊕Cp = 1⊕ 1 = 0,CF = 1,

ZF = 0,SF = 0,PF = 1,AF = 0

6(3). 判断执行―A323H -8196H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1010 0011 0010 0011 B

-1000 0001 1001 0110 B

0010 0001 1000 1101 B = D4B4 H

OF = Cs⊕Cp = 0⊕ 0 = 0,CF = 0,

ZF = 0,SF = 0,PF = 1,AF = 1

7.试用指令实现:

(1) AL寄存器低4位清0;

(2) 测试DL寄存器的最低2位是否为0,若是,则将0送入AL寄存器;否则将1送AL 寄存器。

参考答案:

(1)AND AL, 0F0H

(2)AND DL, 03H

JZ LAB1

MOV AL, 01H

LAB1:MOV AL, 00H

或TEST DL, 03H

JZ L1

JNZ L2

L1:MOV AL, 00H

L2:MOV AL, 01H

8.写出下列程序段计算的表达式,并计算程序执行后(AL)的值。(8分)

MOV BX,0110100101101100B

MOV CX,12

XOR AL,AL

MOV DL,1

AGAIN:SHL BX,1

JC NEXT

ADD AL,DL

NEXT:INC DL

LOOP AGAIN

HLT

参考答案:

表达式为 1 + 4 + 6 + 7 + 9 + 12

(AL)= 39 D = 27 H

9.已知8086 CPU中当前段寄存器的基址(DS) = 021FH,(ES) = 0A32H,(CS) = 234EH,则上述各段在存储器空间中物理地址的首地址号及末地址号是什么?

参考答案:

DS:DS × 10H = 021F0 H (首地址)

= 021F0 H + 0FFFF H

= 121EF H (末地址)

ES:DS × 10H = 0A320 H (首地址)

= 1A31F H (末地址)

CS:DS × 10H = 234E0 H (首地址)

= 334DF H (末地址)

10.假如8086 CPU中,(CS) = 234EH,已知物理地址为25432H,若(CS)的内容被指定成1A31H,则物理地址应为什么地址号?

参考答案:

偏移地址= 原物理地址– (CS) × 10H

= 25432 H – 234E0 H

= 1F52 H

新物理地址= (CS) × 10H + 偏移地址

= 1A310 H + 1F52 H

= 1C262 H

1. 判断执行―B310H + 21A4H‖运算后,OF、CF、ZF、SF、PF和AF的状态。

参考答案:

1011 0011 0001 0000 B

+ 0010 0001 1010 0100 B

1101 0100 1011 0100 B = D4B4 H

OF = Cs⊕Cp = 0⊕0 = 0,CF = 0,

ZF = 0,SF = 1,PF = 1,AF = 0

2. 若AX = 6535H、BX = 42D2H,则执行指令SUB AX,BX 之后,AX = ?标志位AF、ZF、CF、SF、PF、OF分别为?

参考答案:

0110 0101 0011 0101 B

-0100 0010 1101 0010 B

————————————————

0010 0010 0110 0011 B =2263H

AF = 0、ZF = 0、CF = 0、

SF = 0、PF = 1、OF = 0

3. 若某数据区的起始地址为70A0H:DDF6H,则该数据区的首字单元和16个字的末字单元的物理地址分别为?

参考答案:

(1)首字单元物理地址

= 70A0 H × 10H + DDF6 H

= 7E7F6 H

(2)末字单元物理地址

= 首地址+ (字数-1)× 2

= 7E7F6 H + (16 -1)× 2

= 7E814 H

4. 如果DS = 7100H,则当前数据段的起始地址为?末地址为?

参考答案:

起始地址= 7100 H × 10 H

= 71000 H

末地址= 71000 H + 0FFFF H

= 80FFF H

5.设8086 CPU中(CS) = 234EH,已知物理地址为25432H,若(CS)的内容被指定成1A31H,则物理地址应为什么地址号?

参考答案:

偏移地址= 原物理地址– (CS) × 10H

= 25432 H – 234E0 H

= 1F52 H

新物理地址= (CS) × 10H + 偏移地址

= 1A310 H + 1F52 H

= 1C262 H

作业:

1.试判断下列运算执行之后,OF、CF、ZF、SF、PF和AF的状态:

(1) A400H + 7100H

(2) A323H - 8196H

2.若已知一个字串的起始逻辑地址为2000H :1000H,试求该字串中第11个字的逻辑地址及物理地址。

3.若已知当前栈顶的逻辑地址为3000H:0200H,试问压入两个字后栈顶的逻辑地址和物理地址是什么? 若又弹出3个字后,则栈顶的逻辑地址和物理地址又是什么?