当前位置:文档之家› 指出下列指令中源操作数和目的操作数的寻址方式

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

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

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个字后,则栈顶的逻辑地址和物理地址又是什么?

寻址方式及指令系统习题与解答

寻址方式及指令系统习题与解答 计算机科学与工程学院黄洪波2012年3月 一、单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为()。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为()。 A.13000H B.23000H C.33000H D.3000H 3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为()。 A.20200H B.30200H C.50200H D.200H 4.指令MOV MEM[BX],AX中的MEM是()。 A.原码B.反码C.补码D.移码 5.用来作为寄存器间接寻址的寄存器有()个。 A.8 B.6 C.5 D.4 6.指令MOV [BX+SI],AL中的目的操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 7.指令MOV BX,[BP+5]中的源操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 8.段内间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 9.段间间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 10.下述指令中不改变PSW的指令是()。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 11.下述指令中不影响CF的指令是()。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX 12.两个整数补码9CH和7AH相加运算后,会产生()。 A.无溢出且无进位B.无溢出但有进位

8086汇编语言指令的寻址方式有哪几类

1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 寄存器寻址最快 7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS , AX ;不能修改CS MOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送 XCHG BX , IP ;不能用名字直接访问IP PUSH CS POP CS ;不允许直接修改CS值 IN BX , DX ;输入数据必须使用累加器AL或AX MOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000 MOV CS , [1000];不允许直接修改CS值 20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少? 利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH 27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行 PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么? 栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址) B P7 5. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H, (31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H, (32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容: (1) MOV AX,BX (2) MOV AX,[BX] (3) MOV AX,4200H (4) MOV AX,[2800H] (5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI] 9. 分别执行下列各指令组,写出AX的内容: (1) MOV AX,93A4H NEG AX 73A4-8c5c,e689-1977 (AX)=6C5CH (2) XY DW "AB" MOV AX,XY (AX)=4142H (3) MOV AX,2B7EH MOV CX,4DB5H ADD AX,CX (AX)=7933H (4) XA DW 0BD57H MOV AX,0FBCDH AND AX,XA (AX)=B945H (5) STC MOV BX, 0B69FH MOV AX, 43A2H SBB AX, BX

内存操作数及寻址方式的使用

武汉工程大学 电气信息学院 《面向对象程序设计》实验报告[ 1 ] 专业班级过程装备与控制工程1 班 实验时间 2015 年 5 月 日 学生学号实验地点机电工程学院205 学生姓名指导教师华夏 实验项目内存操作数及寻址方式的使用 实验类别设计实验实验学时3学时 实验目的及要求通过实验掌握下列知识。 (1)DEBUG命令:G、N、W、L及Q。 (2)8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 (3)8088指令:INC、DEC、LOOP、INT3、INT20H,寄存器SI、DI。 (4)8088汇编语言伪操作:BYTE PTR,WORD PTR. (5)求累加和程序和多字节加减法程序。 成绩评定表 类别评分标准分值得分合计 上机表现 按时出勤、遵守纪律 认真完成各项实验内容 30分

《电子线路CAD设计》实验报告 报告质量程序代码规范、功能正确 填写内容完整、体现收获70分 评阅教师: 日期:年月日

实验内容 (说明:此部分应包含:实验内容、实验步骤、实验数据与分析过程等) 1.一、实验内容、实验方法与步骤、实验数据与结果分析 1)内存操作数及各种寻址方式使用 (1)先输入程序内容,用A命令输入上述程序,运行如下: (2)并用T命令逐条运行,运行如下:

(3)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。程序运行如下:

(4)注意D命令显示结果中右边的ASCII字符及双字节数存放法。 (5)思考有关指令中的BYTE PTR及WORD PTR伪操作不加行不行,试一试。 2)求累加和程序 (1)用A命令将程序输入到100H开始的内存中,在输入时记下标号LOP和J的实际地址,在输入LOOP指令时LOP用实际地址代替。 (2)用命令NAA将此程序命名为文件AA (3)用R命令将BX:CX改为程序长度值 (4)用命令W100将此程序存放到AA命名的磁盘文件中

汇编语言内存操作数及寻址

实验一内存操作数及寻址 通过实验掌握下列知识: 80x86系统中数据在内存中的存放方式和内存操作数寻址方式。 80x86指令: MOV, ADD, SUB, ADC,SBB,INC, DEC, LOOP,CLC 伪指令与操作符: BYTE PTR, WORD PTR,OFFSET,SIZEOF。 简单字符串处理、多字节加减法。 一、内存操作数及各种寻址方式: 阅读下列程序段: ... ... .data wds WORD 1111h, 2222h, 3333h dwds DWORD 6 dup (0CDCDCDCDh) ... ... MOV AX, 1234h MOV EBX, OFFSET wds MOV [EBX], AX MOV BYTE PTR[EBX+2], 20h MOV DL, 39h MOV [EBX+4], DL ADD EBX, SIZEOF wds MOV ESI, 2 DEC DL MOV [EBX+ESI], DL DEC DL MOV [EBX+ESI+1], DL MOV WORD PTR[EBX+ESI+2], 1068h MOV DWORD PTR[EBX+ESI*4], 2846h 1)分析并写出每条指令执行的结果。 2)将程序补充完整,编译、连接后,单步执行,验证分析结果。 3) 说明程序中访问内存操作数的指令所使用的寻址方式,访问的内存地址,以及所访问的内存存储单元位数。 4)有关指令中BYTE PTR、WORD PTR、DWORD PTR伪指令不加会有何结果? 试一试。 二、阅读下列程序段: (指令CLC,Clear Carry Flag :清除进位标志) ...... MOV ECX,4 CLC L1:

微机原理第二次作业(1)

1. 分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。 (1)MOV AX,2408H (2)MOV CL,0FFH (3)MOV BX,[SI] (4)MOV 5[BX],BL (5)MOV [BP+100H],AX (6)MOV [BX+DI],’$’ (7)MOV DX,ES:[BX+SI] (8)MOV VAL[BP+DI],DX (9)IN AL,05H (10)MOV DS,AX (1)立即数寻址;寄存器寻址 (2)立即数寻址;寄存器寻址 (3)寄存器间寻址;寄存器寻址 (4)寄存器寻址;寄存器相对寻址 (5)寄存器寻址;寄存器相对寻址 (6)立即数寻址;基址变址寻址 (7)基址变址寻址;寄存器寻址 (8)寄存器寻址;相对基址变址寻址 (9)直接寻址;寄存器寻址 (10)寄存器寻址;寄存器寻址 2 已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H 单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX 寄存器的内容各是什么? (1)MOV AX,0200H (2)MOV AX,[200H] (3)MOV AX,BX (4)MOV AX,3[BX] (5)MOV AX,[BX+SI] (6)MOV AX,2[BX+SI] (1)AX=0200H (2)AX=2A10H (3)AX=0200H (4)AX=5946H (5)AX=463CH (6)AX=6B59H

3. 设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H, BP=0200H, 数据段中变量名为VAL 的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什 么?物理地址值是多少? 1)MOV AX,[100H] (2)MOV AX,VAL (3)MOV AX,[BX] (4)MOV AX,ES:[BX] (5)MOV AX,[SI] (6)MOV AX,[BX+10H] (7)MOV AX,[BP] (8)MOV AX,VAL[BP][SI] (9)MOV AX,VAL[BX][DI] (10)MOV AX,[BP][DI] (1)直接,10100H (2)直接,10030H (3)寄存器间接,10100H (4)寄存器间接,20100H (5)寄存器间接,100A0H (6)寄存器相对,10110H (7)寄存器间接,35200H (8)相对基址变址,352D0H (9)相对基址变址,10154H (10)基址变址,35224H 4 若AL=0FFH,BL=13H,指出下列指令执行后标志AF、OF、ZF、SF、PF、CF的状态。 (1) ADD BL, AL (2) SUB BL, AL (3) INC BL (4) NEG BL (5) AND AL, BL (6) MUL BL (1)AF= 1 , OF= 1 , ZF= 0 , SF= 0 , PF= 1 , CF= 1 (2)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 1 , CF= 0 (3)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 1 , CF= 0 (4)AF= 0 , OF= 0 , ZF= 0 , SF= 1 ,PF= 1 , CF= 0 (5)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 0 , CF= 0 (6)AF= 0 , OF= 0 , ZF= 0 , SF= 0 ,PF= 0 , CF= 0

【VIP专享】汇编程序设计--内存操作数及寻址方法 实验报告

《汇编语言程序设计》 实验报告

实验二内存操作数及寻址方法 实验目的 通过实验掌握下列知识: 1、DEBUG命令:A,T,D,F,G; 2、数据在内存中的存放方式和内存操作数的几种寻址方式; 3、汇编指令:INC,DEC,LOOP,INT 3的应用; 4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。 实验内容和步骤 一、内存操作数及各种寻址方式使用 程序内容:寻址方式: MOV AX,2000 MOV [200],AX ;直接寻址 MOV BX,210 MOV BYTE PTR[BX],50 ;寄存器间接寻址 MOV CL,40 INC BX MOV [BX],CL ;寄存器间接寻址 DEC CL MOV SI,5 MOV [BX+SI],CL ;基址加变址寻址 MOV [BX+SI+1],CL ;基址变址相对寻址 MOV WORD PTR[BX+SI+2],1234 ;基址变址相对寻址 操作步骤 1)用A命令键入上述程序,并用T命令逐条运行。 2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意是什么寻址方式。 注:D命令显示结果时,双字节数在内存的存放是高地址对应高数据位; 指令中出现的BYTE PTR及WORD PTR是因为操作数的宽度必须一致。

图 2-1 键入程序 图2-2 U命令查看程序

图2-3 T命令逐条运行,用D命令检查有关内存单元的内容相对应的寻址方式见程序处标注。 二、求累加和程序 程序内容: MOV BX,200 MOV CX,9 XOR AX,AX ADD AL,[BX] ;按字节相加 ADC AH,0 ;若有进位则到AH中 INC BX LOOP 108 INT3 操作步骤: 1)进入DEBUG环境。 2)用命令F 200 L10 40 在内存200H-20FH地址处填入一系列值40H。

寻址方式教案(1)

§3.1MCS-51单片机寻址教案 授课人:章谋学习目标:1、了解汇编指令的结构组成 2、掌握7种指令寻址方式的结构和特点 3、熟练运用汇编指令编写程序 计划课时:2学时 教学重点:掌握4种类型的寻址方式 教学难点:7种寻址方式在程序中的应用 教学方法:实例演示、小组讨论、软件仿真、当堂练习 第一课时 〖本节课的教学目标〗 1、学生能了解汇编指令语句格式 2、学生能区分出立即寻址、直接寻址、间接寻址的异同 教学过程 课前预习情况检查(预习卡1--3题的完成情况的检查) 一、课堂引入: 1、学生利用老师写好的程序载入下图进行运行并记录运行现象。 2、观察单片机系统中有硬件但没有程序运行所出现的现象。 3、观察单片机系统中有程序但硬件有故障所出现的现象。 循环彩灯效果图

彩灯实验箱实物连结图 org 0000h start:mov r0,#08 delay: mov r1,#10 mov r4,#08 de0: mov r2,#127 mov a,#0feh de1: mov r3,#200 loop1:mov p1,a de2: djnz r3,de2 acall delay djnz r2,de1 rr a djnz r1,de0 djnz r0,loop1 ret loop2:mov p1,a rl a acall delay djnz r4,loop2 循环彩灯应用程序 ajmp start

二、课堂自学: 1、学生自学,了解汇编指令的组成 Start : mov a, #30h ; (A) ←30H 标号( );指令助记符( );目的操作数( ); 源操作数( ) 释( ) 注:指令操作数可能有2个或3个,也可能只有1个或1个也没有。 2、小组讨论,完成寻址方式的分类 (小组学生举手作答与老师提问相结合,注重从最后一名学生开始抓起) ①、立即数寻址:②、直接寻址方式 ③、寄存器寻址 ④、寄存器间接寻址: 例如:MOV A ,3AH ;(3AH )→A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,#3AH ;3AH →A 目的操作数( ),源操作数( ),寻址方式( ) MOV DPTR ,#2000H ;2000H →DPTR ;DPH=20H ;DPL=00H 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,3AH ;(3AH) →A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,P1;P1口→A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,R0;R0→A 目的操作数( ),源操作数( ),寻址方式( ) MOV P1,A ;A →P1口 目的操作数( ),源操作数( ),寻址方式( ) ADD A ,R0;A+R0→A 目的操作数( ),源操作数( ),寻址方式( ) 65H 47H R0 A 47H 数据存储器 地址 ┋ ┋ 65H ① ② 将片内RAM 65H 单元内容47H 送A

寻址方式

寻址方式:1.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。4,直接寻址:指令中直接给出操作数所在的存储器地址。5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。 数据传送类指令:一、以累加器为目的操作数的指令 MOV A, Rn ; (Rn)→A,n=0~7 MOV A, @Ri ; ((Ri))→A,i=0,1 MOV A, direct ;(dir ect)→A MOV A, #data ; #data→A 二、以Rn为目的操作数的指令 MOV Rn, A ; (A)→Rn, n=0~7 MOV Rn, direct ;(direct)→Rn, n=0~7 MOV Rn, #data ; #data→Rn, n=0~7 三、以直接地址direct为目的操作数的指令 MOV direct, A ; (A)→direct MOV direct, Rn ;(Rn)→direct, n=0~7 MOV direct1, direct2; MOV direct, @Ri ;((Ri))→direct MOV direct, #data ; #data→direct 四、以寄存器间接地址为目的操作数的指令 MOV @Ri, A ;(A)→((Ri)),i=0,1 MOV @Ri, direct ;(direct)→((Ri)) MOV @Ri, #data ; #data→((Ri)) 五、16位数传送指令 MOV DPTR, #data16 ; #data16→DPTR 唯一的16位数据的传送指令, 立即数的高8位送入DPH, 立即数的低8位送入DPL。 六、堆栈操作指令 内部RAM中可以设定一个后进先出(LIFO-Last In First Out)的区域称作堆栈,堆栈指针SP始终指向堆栈的 栈顶位置。 1、进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中 2、出栈指令 POP direct SP指示的栈顶(内部RAM单元)内容送入direct字节单元 中,栈指针SP减1 七、累加器A与外部数据存储器传送指令 MOVX A, @DPTR ;((DPTR))→A,读外部RAM/IO

第3章答案指令系统1-40

第3章指令系统 1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。1、指令:CPU根据人的意图来执行某种操作的命令 指令系统:一台计算机所能执行的全部指令集合 机器语言:用二进制编码表示,计算机能直接识别和执行的语言 汇编语言:用助记符、符号和数字来表示指令的程序语言 高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言 2,什么是计算机的指令和指令系统? 2、见第1题。 3,简述89C51汇编指令格式。 3、操作码[目的操作数] [,源操作数] 4,简述89C51寻址方式和所能涉及的寻址空间。 5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式? 5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址 6,在89C51片内RAM中,已知(30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。 6、MOV A,40H ;直接寻址(40H)→A MOV R0,A ;寄存器寻址(A)→R0 MOV P1,#0F0H ;立即数寻址0F0→P1

MOV @R0,30H ;直接寻址(30H)→(R0) MOV DPTR,#3848H ;立即数寻址3848H→DPTR MOV 40H,38H ;直接寻址(38H)→40H MOV R0,30H ;直接寻址(30H)→R0 MOV P0,R0 ;寄存器寻址(R0 )→P0 MOV 18H,#30H ;立即数寻址30H→18H MOV A,@R0 ;寄存器间接寻址((R0)) →A MOV P2,P1 ;直接寻址(P1)→P2 最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 注意:→左边是内容,右边是单元 7,对89C51片内RAM的高128字节的地址空间寻址要注意什么 7、用直接寻址,位寻址,寄存器寻址 8,指出下列指令的本质区别。 8,MOV A,DATA ;直接寻址2字节1周期 MOV A,#DATA ;立即数寻址2字节1周期 MOV DATA1,DATA2 ;直接寻址3字节2周期 MOV 74H,#78H ;立即数寻址3字节2周期 如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A 9,设R0内容为32H, A的内容为48H, 片内RAM的32H单元内容为80H, 40H单元内容为08H, 请指出在执行下列程序段后上述各单元内容的变化。 9、 MOV A,@R0 ;((R0))=80H→A MOV @R0,40H ;(40H)=08H→(R0) MOV 40H,A ;(A)=80→40H MOV R0,#35H ;35H→R0 最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H 10,如何访问SFR,可使用哪些寻址方式? 10、用直接寻址,位寻址,寄存器寻址 11,如何访问片外RAM,可使用哪些寻址方式? 11、只能采用寄存器间接寻址(用MOVX指令) 12,如何访问片内RAM,可使用哪些寻址方式? 12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7) 高128字节:直接寻址,位寻址,寄存器寻址 13,如何访问片内外程序存储器,可使用哪些寻址方式? 13、采用变址寻址(用MOVC指令)

8086 CPU寻址方式

8086 CPU的七种基本的寻址方式 分别是:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址 1. 立即寻址:操作数包含在指令中,是指令的一部分。此时的操作数称为立即数 MOV AX, 1234H 2. 寄存器寻址:操作数在CPU寄存器中,指令中指定寄存器编号 MOV SI, AX MOV AL, AH 3. 直接寻址:操作数在存储器中,指令直接包含操作数的有效地址。此时操作数一般存放在数据段DS中,采用换段前缀可以使用其它段寄存器。 MOV AX, [1234H] 4. 寄存器间接寻址:操作数在存储器中,操作数有效地址在SI、DI、BX、BP之一种。在不使用换段前缀的情况下,若有效地址在SI/DI/BX中,则以DS的值为段值;若有效地址在BP中,则以段寄存器SS的值为段值。 MOV AX, [SI] MOV [BP], CX 5. 寄存器相对寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8位或16位位移量之和。即:EA = (BX/BP/SI/DI) + (8/16位位移量) 在不使用换段前缀的情况下,若SI/DI/BX的内容作为有效地址的一部分,则以DS的值为段值;若BP的内容作为有效地址的一部分,则以段寄存器SS的值为段值。 在指令中给定的8位或16位位移量以补码形式表示。在计算有效地址时,若位移量是8位,则将其有符号扩展为16位,当有效地址超过FFFFH,则对其进行64K取模。 例如:MOV AX, [DI+1223H] MOV BX, [BP-4] MOV ES:[BX+5], AL 注意:书写时基址或变址寄存器名一定要放在方括号中,而位移可以不写在方括号中。下面两条指令是等价的: MOV AX, [SI+3] 等价于MOV AX, 3[SI] 6. 基址加变址寻址:操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加得到。 EA = (BX/BP) + (SI/DI) 在不使用换段前缀的情况下,若BP的内容作为有效地址的一部分,则以SS的值为段值;否则以DS的值为段值。有效地址超过FFFFH,则对其进行64K取模。例如:MOV AX, [BX+DI] 等价形式MOV AX, [DI][BX] MOV AX, ES:[BX+SI] MOV DS:[BP+SI], AL

8086微型计算机原理与应用(吴宁)习题答案(第三章)

8086微型计算机原理与应用(吴宁)习题答案(第二章)第三章 3-3 (1) 源操作数为立即寻址方式;目的操作数为寄存器寻址方式 (2) 源操作数为基址寻址方式;目的操作数为寄存器寻址方式 EA=BX+DISP , PA= DS*16+EA (3) 源操作数为寄存器寻址方式;目的操作数为寄存器间接寻址方式 EA=SI , PA= DS*16+EA (4) 源操作数为基址加变址寻址方式;目的操作数为寄存器寻址方式 EA=BX+SI , PA= DS*16+EA (5) 源操作数为寄存器寻址方式;目的操作数为寄存器寻址方式 (6) 源操作数为基址寻址方式;目的操作数为寄存器寻址方式 EA=BX+10H , PA= DS*16+EA (7) 源操作数为寄存器间接寻址方式;目的操作数为寄存器寻址方式 EA=SI , PA= ES*16+EA (8) 源操作数为带位移量的基址加变址寻址方式;目的操作数为寄存器寻址方式 EA=BX+SI+20H , PA= DS*16+EA 3-7 (1)AX=3355H , SP=1FFEH (2) AX= 3355H , DX= 4466H , SP =1FFEH 3-8 BX= 4154H , [2F246H]= 6F30H 3-9 SI=0180H , DS = 2000H 3-10 求执行指令后的结果 (1) CL=F6H (2) [1E4F6H]=5678H (3) BX=0056H AX=1E40H (4) SI=00F6H , [SI]= [1E4F6H]= 0024H (5) AX=5678H [09226H]=1234H 3-12 (1) 端口580H 的内容为60H (2) 端口580H 的内容为60H, 端口581H 的内容为80H (3) 端口40H 的内容4FH 送至AL中 (4) 端口40H 的内容4FH 送至AL中, 端口41H 的内容送至AH中 (5) 端口45H 的内容为60H (6) 端口45H 的内容为60H, 端口46H 的内容为80H 3-13 (1) 寄存器间址 LEA SI, BLOCK ADD SI, 0AH MOV AX , [SI] (2) 基址寻址 LEA BX, BLOCK MOV AX, [BX+0AH]

指令与寻址方式习题

指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:(1)AND AX,0FFH (2)AND BL,[OFFH] (3)MOV DS,AX (4)CMP [SI],CX (5)MOV DS:[0FFH],CL (6)SUB [BP][SI],AH (7)ADC AX,0ABH[BX] (8)OR DX,-35[BX][DI] (9)PUSH DS (10)CMC 答:目的操作数源操作数 (1)寄存器直接寻址立即数寻址 (2)寄存器直接寻址直接寻址 (3)寄存器直接寻址寄存器直接寻址 (4)寄存器间接寻址寄存器直接寻址 (5)直接寻址寄存器直接寻址 (6)基址变址寻址寄存器直接寻址 (7)寄存器直接寻址寄存器相对寻址 (8)寄存器直接寻址基址变址相对寻址 (9)无寄存器直接寻址 (10)隐含寻址 2.试分别指出下列各指令语句的语法是否有错,如有错,指明是什么错误。 (1)MOV [BX][BP],AX (2)TEST [BP],BL (3)ADD SI,ABH (4)AND DH,DL (5)CMP CL,1234H (6)SHR [BX][DI],3 (7)NOT CX,AX (8)LEA DS,35[SI] (9)INC CX,1 (10)P USH 45[DI] 答:(1)应将BP,BX其中之一该为SI或DI (2)正确 (3)ABH改为0ABH (4) (5)是字操作,CL改为CX (6)移位数大于1时,应用CL (7)NOT指令只有一个操作数 (8)LEA指令的源操作数应为一内存单元地址

(9)此指令不用指出1 (10)45改为45H 3.下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态? MOV DL,86 ADD DL,0AAH 答: 0101,0110 + 1010,1010 = 1,0000,0000 CF=1 AF=1 ZF=1 SF=1 OF=1 4.在8086/8088CPU中可用于作地址指针的寄存器有哪些? 答:有BX,CX,DX,BP,SI,DI (IP,SP,) 5.已知(DS)=09lDH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。下列各指令或程序段分别执行后的结果如何? (1)MOV CL,20H[BX][SI] (2)MOV [BP][DI],CX (3)LEA BX,20H[BX][SI] MOV AX,2[BX] (4)LDS SI,[BX][DI] MOV [SI],BX (5)XCHG CX,32H[BX] XCHG 20H[BX][SI],AX 答(1) (CX)=56F6H; (2) (09226H)=5678H; (3) (AX)=1E40H; (4) (1E4F6H)=0024H; (5) (09226H)=1234H,(AX)=5678H. 6.已知(SS)=09l 5H,(DS)=0930H,(SI)=0A0H,(DI)=1C0H,(BX)=80H,(BP)=470H。现有一指令“MOV AX,OPRD”,如源操作数的物理地址为095C0H,试用四种不同寻址方式改写此指令(要求上述每个已知条件至少要使用一次)。 答:(1)MOV AX,[BP] (2)MOV AX,[BP+DI+80H] (3)MOV AX,[DI+0100H] MOV AX,[SI+0220H] (4)MOV AX,[02C0H] 7.试按下列要求分别编制程序段: (1)把标志寄存器中符号位SF置‘1’。 (2)寄存器AL中高低四位互换。 (3)由寄存器AX,BX组成一个32位带符号数(AX中存放高十六位),试求这个数的负数。 (4)现有三个字节存储单元A,B,C。在不使用ADD和ADC指令的情况下,实现(A)+(B)=>C。 (5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1形成奇数)。 答:(1)MOV AH, 80H SAHF

8086汇编各种寻址方式大全

各种寻址方式 1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。 例:MOV AL,50H MOV DS, 1250H 错误 2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。 例:MOV AL,BL MOV CL, BX 错误 以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储 器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存 储器操作数,如BUF DB 10H,20H。 3. 存储器寻址 (1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。 例:MOV AL,[1000H] 约定由DS提供段地址 MOV AL,CS:[1000H] ;段超越,由CS提供段地址 MOV AL,SS:[1000H] ;段超越,由SS提供段地址 例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000 (2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。 例:MOV AX,[SI] ;AX←DS:[SI] MOV [BX],AX ;DS:[BX]←AX 例:MOV AX, [BX] 如果(DS)= 2000H, (BX)= 1000H, 则物理地址 = 20000H + 1000H = 21000H (3)寄存器相对寻址 这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。 例:MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI]) 其中COUNT为16位位移量的符号地址。 如果(DS)= 3000H,(SI)= 2000H,COUNT = 3000H 则物理地址 = 30000H + 2000H + 3000H = 35000H (4)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。 例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH] MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX (5)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS 中,允许段超越。 例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX

实验2 内存操作数及寻址方法

实验2 内存操作数及寻址方法 2.1 实验目的 通过实验掌握下列知识: ①DEBUG命令:G,N,W,L及Q。 ②8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 ③8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。 ④8088汇编语言伪操作:BYTE PTR,WORD PTR。 ⑤求累加和程序和多字节加减法程序。 2.2 实验类型 验证型实验 2.3 实验内容及步骤 2.3.1 内存操作数及各种寻址方式使用 1. 实验程序 MOV AX,1234 MOV [1000],AX MOV BX,1002 MOV BYTE PTR [BX],20 MOV DL,39 INC BX MOV [BX],DL DEC DL MOV SI,3 MOV [BX+SI],DL MOV [BX+SI+1],DL MOV WORD PTR [BX+SI+2],2846 2. 实验步骤 1)用A命令键入上述程序,并用T命令逐条运行。 2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。 3. 注意 D命令显示结果中右边的ASCII字符及双字节数存放法。

4. 思考 有关指令中BYTE PTR及WORD PTR伪操作不加行不行? 试一试。 2.3.2 求累加和程序 1. 实验程序 MOV BX,1000 MOV CX,10 SUB AX,AX LOP:ADD AL,[BX] ADC AH,0 INC BX J:LOOP LOP INT3 2. 实验步骤 1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。 2)用命令N AA将此程序命名为文件AA(文件名可任取)。 3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址)。 4)用命令W100将此程序存到AA命名的磁盘文件中。 5)用命令Q退出DEBUG。 6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。 7)用E命令在内存地址1000H处键入16个数字 8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。 9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。 10)重复GJ与T,再检查AX是否正确。 11)用G命令使程序运行到结束,检查AX值是否正确。 2.3.3 多字节加法程序 1. 实验程序 MOV DI,1000 MOV CX,8 MOV SI,2000

习题及参考解答

第3章习题及参考解答 1.指出下列各指令中源操作数和目的操作数的寻址方式。 (1)MOV DI,100 (2)MOV CX.100[SI] (3)MOV [SI],AX (4)ADD AX,[BX+DI] (5)AND AX,BX (6)MOV DX,[1000] (7)MOV BX,[BP+DI+100] (8)PUSHF (9)SUB [1050],CX (10)AND DH,[BP+4] 解 源操作数目的操作数 (1)立即寻址寄存器寻址 (2)变址寻址寄存器寻址 (3)寄存器寻址寄存器间接寻址 (4)基址加变址寻址寄存器寻址 (5)寄存器寻址寄存器寻址 (6)直接寻址寄存器寻址 (7)基址加变址寻址寄存器寻址 (8)寄存器寻址寄存器间接寻址 (9)寄存器寻址直接寻址 (10)变址寻址寄存器寻址 2.试述指令MOV AX,2000H和MOV AX,DS:[2000H]的区别 解区别有三条: (1)MOV AX,2000H对源操作数是立即寻址,而MOV AX.[2000H]对源操作数是直接寻址; (2)前者功能是把立即数2000H送入AX中,而后者是把内存2000H单元与2001H单元的内容取出送 入AX 中; (3)两者的机器代码不同,执行速度也不同,前者执行时间快,后者执行时间慢。 4.若DS=4000H,BX=0800H,[40800H]=05AOH,[40802H]=2000H,求执行指令LDS SI,[BX]后,DS与SI中的内容。若上题中的DS换成ES,其他条件不变,求执行指令LES DI,[BX]后,ES与DI中的内容。 解 SI=05AOH,DS=2000H DI=05AOH,ES=2000H 5.若AX=98ABH,BX=A8BCH。求执行指令ADD AX,BX后,AX与BX中的内容,并指出SF,ZF,AF,PF,CF和OF的状态。 解AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。 6.若CX=6700H,DX=78FFH,CF=1。求分别执行指令 (1)ADD CX,DX (2)ADC CX,DX (3)SUB CX,DX (5)AND CX,DX

习题1——指令系统 参考答案

《汇编语言》习题1——指令系统参考答案 习题1-1 在8086CPU中,如果SS的内容设置为1A4BH,堆栈的长度为100H字节,问SP寄存器的初始化值为多少?SP初始指向哪个主存物理地址? 答:SP寄存器的初始化值为:100H SP初始指向的主存物理地址是:1A5B0H 习题1-2 分别说明下述8086指令中的源操作数和目的操作数的寻址方式。 指令目的操作数源操作数 (1) MOV ES, AX 寄存器寻址寄存器寻址 (2) ADD DS:[12H],AL 直接寻址寄存器寻址 (3) SUB BX,1200H 寄存器寻址立即寻址 (4) SHR AX,1 寄存器寻址立即寻址 (5) AND -28H[BP][DI], AX 基址变址寻址寄存器寻址 (6) MOV CX,LAB1[BX] 寄存器寻址基址/变址寻址 (7) SBB AX, [BX] 寄存器寻址寄存器间接寻址 (8) OR DX,-360H[SI] 寄存器寻址基址/变址寻址 (9) ADC VAR1,CX 直接寻址寄存器寻址 (10) XOR [DI],AX 寄存器间接寻址寄存器寻址 习题1-3分别说明下述指令语句的语法正确与否,如果有错,说明其错误。 指令正误 (1)MOV DS, 1234H 错误,立即数不能直接传送到段寄存器中 (2)ADD AH,AL 正确 (3)SUB CS,AX 错误,不能对CS直接操作 (4)MOV BX,[BX][SI] 正确 (5)ADC VAR1,[BP][DI] 错误,两个操作数不能同时都在存储器中 (6) SBB [BX][BP],AX 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器 (7)PUSH 5678H 错误,立即数不能作为源操作数直接压入堆栈 (8)SHL [BP][SI],CL 错误,目的操作数没有明确指明是字还是字节 (9)ROR AX,2 错误,移位次数大于1时,需将其提前存入CL中 (10)NEG AX,BX 错误,操作数个数错误 (11)LEA CS,AX 错误,目的操作数只能是16位通用寄存器 (12)MOV AL,BX 错误, 操作数位数不一致 (13)ADD DS:200H,AX 正确 (14)AND [BX][BP],AH 错误, 基址变址寻址方式中不能两个寄存器都 是基址寄存器 (15)OR BH,-16H[BP] 正确 (16)CLC AX 错误,操作数个数错误 (17)MUL AX,BX 错误,操作数个数错误 (18)DIV 12H 错误,源操作数不能是立即数 习题1-4 在8086中,如果(DS)=1A26H,(SS)=20B0H,(BX)=1200H,(SI)=0034H, (BP)=5700H(1B484H)=1234H,(26200H)=5678H,给出下面各指令或指令组执行后相应寄存器/存储单元的结果。

相关主题
文本预览
相关文档 最新文档