文档库 最新最全的文档下载
当前位置:文档库 › 第三章 80X86指令系统和寻址方式

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

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

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

3.1 (BX)=637DH,(SI)=2A9BH,(D)=7237H,试确定以下各种寻址方式下的有效地址?

答:(1)。立即寻址方式与有效地址无关。

(2)。直接寻方式,有效地址7237H。

(3)。使用BX的寄存器寻址方式与有效地址无关。

(4)。使用BX的寄存器间接寻址方式,有效地址由BX提供,有效地址为637DH。

(5)。使用BX的寄存器相对寻址方式,有效地址由(BX)+(D)提供,有效地址为7237H+637DH=D5B4H。

(6)。基址变址寻址方式,有效地址由(BX)+(SI)提供,有效地址为637DH+2A9BH=8E18H。

(7)相对基址变址寻址方式,有效地址由(BX)+(SI)+(D)提供,有效地址为637DH+2A9BH+7237H=004FH。

3.2 试根据以下要求写出相应的汇编语言指令。

答:(1)。ADD DX,BX

(2)。ADD AL,[BX][SI]

(3)。ADD 0B2H[BX],CX

(4)。ADD WORD PTR [0524H],2A59H

(5)。ADD AL,0B5H

3.3 用以下几种寻址方式把首地址BLOCK的字数组第6各字送DX 寄存器指令。

答:(1)。寄存器间接寻址:

LEA BX,BLOCK+(6-1)*2

MOV DX,[BX]

(2)。寄存器相对寻址:

LEA BX,BLOCK

MOV DX,(6-1*2)[BX]

(3)。基址变址寻址:

LEA BX,BLOCK

MOV SI,(6-1)*2

MOV DX,[BX+SI]

3.4 知(DS)=2000H、(BX)=0100H、(SI)=0002H、(20100H)=12H

(20101H)=34H、(20102H)=56H、(20103H)=78H、(21200H)=2AH、

(21201H)=4CH、(21202H)=B7H、(21203H)=65H,以下各指令执行后(AX)=?

答:(1)。(AX)=1200H

(2)。(AX)=0100H

(3)。(AX)=4C2AH

(4)。(AX)=3412H

(5)。(AX)=4C2AH

(6)。(AX)=7856H

(7)。(AX)=65B7H

3.5 给定(IP)=2BC0H、(CS)=0200H、(D)=5119H、(BX)=1200H、

(DS)=212AH、(224A0H)=0600H、(275B9H)=098AH,求出偏移地址?

答:(1)。段内直接寻址:JMP OPR(JMP NEAR PTR OPR)

(IP)=2BC0H+3+5119H=7CDCH

(2)。使用BX寄存器间接寻址方式的段内间接寻址:

JMP WORD PTR[BX]

(IP)=(212AH*10H+1200H)=(224A0H)=0600H

(3)。使用BX寄存器相对寻址方式的段内间接寻址:

JMP WORD PTR 5119H[BX]

(IP)=(212AH*10H+1200H+5119H)=(275B9H)=098AH

3.6 设当前数据段寄存器的内容为1BOOH,在数据段的偏移地址2000H单元内,含有一个内容为OFF10H 和8000H 的指针,它们是一个位变量的偏移地址和段地址,试写出把该变量装入AX 的指令序列,并画图表示出来。

答:MOV AX,1B00H

MOV DS,AX

LES BX,[2000H]

MOV AX,ES:[BX]

3.7 在0624H单元内有一条指令JMP SHORT OBJ,如位移量为(1)27H、(2)6BH、(3)。C6H,求转移地址?

答:(1)。(IP)=0624H+2+27H=064DH。

(2)。(IP)=0624H+2+6BH=0691H。

(3)。(IP)=0624H+2+0FFC6H=05ECH

((IP)=0624H+2-3AH=05ECH )

3.8 假定(DS)=2000H、(ES)=2100H、(SS)=1500H、(SI)=00A0H、

(BX)=0100H、(BP)=0010H、(V AL)=0050H,试指出以下指令源操作数的寻址方式?其物理地址值是多少?

答:(1)。MOV AX,0ABH

源操作数的寻址方式是立即寻址方式。

与物理地址值无关。

(2)。MOV AX,BX

源操作数的寻址方式是寄存器寻址方式。

与物理地址值无关。

(3)。MOV AX,[100H]

源操作数的寻址方式是直接寻址方式。

物理地址值为20100H。

(4)。MOV AX,VAL

源操作数的寻址方式是直接寻址方式。

物理地址值为20050H

(5)。MOV AX,[BX]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为20100H

(6)。MOV AX,ES:[BX]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为21100H

(7)。MOV AX,[BP]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为15010H

(8)。MOV AX,[SI]

源操作数的寻址方式是寄存器间接寻址方式。

物理地址值为200A0H

(9)。MOV AX,[BX+10]

源操作数的寻址方式是寄存器相对寻址方式。

物理地址值为20110H

(10)。MOV AX,VAL[BX]

源操作数的寻址方式是寄存器相对寻址方式。

物理地址值为20150H

(11)。MOV AX,[BX][SI]

源操作数的寻址方式是基址变址寻址方式。

物理地址值为201A0H

(12)。MOV AX,VAL[BX][SI]

源操作数的寻址方式是相对的基址变址寻址方式。

物理地址值为201F0H

3.9 在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:ARRAY DW 23,36,2,100,32000,54,0

(ARRAY DW 17H,24H,2H,64H,7D00H,36H,0H)

ZERO DW ?

(1)。LEA BX,ARRAY

MOV AX,(7-1)*2[BX]

MOV ZERO,AX

(2)。LEA BX,ARRAY+(7-1)*2

MOV AX,[BX]

MOV ZERO,AX

3.10 已知变量名TABLE的偏移地址为0032H,(0032H)=1234H。

执行以下指令后(AX)=?

答:执行MOV AX,TABLE (AX)= 1234H

执行LEA AX,TABLE (AX)= 0032H

3.11 执行下列指令(程序)后,AX寄存器内容是什么?

DA TA SEGMENT

TABLE DW 10,20,30,40,50

ENTRY DW 3

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA

STA TRT:MOV AX,DATA

MOV DS,AX

MOV BX,OFFSET TABLE

ADD BX,ENTRY

MOV AX,[BX]

MOV AH,4CH

INT 21H

CODE ENDS

END START

答:(AX)=1E00H

3.12.已知数据(ASCII码串)定义如下:

CSTRING DB ‘BASED ADDRESSING’

编写指令将字串第1个和第7个字符传送给DX寄存器。

答: LEA BX,CSTRING

MOV DL,[BX]

MOV DH,[BX+6]

(DX)=4142H

3.13 已知堆栈段寄存器SS的内容是0FFA0H堆栈指针寄存器SP的内容是00B0H,先执行两

条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。

解:

(PUSH指令示意图

3.14.设(DS)=1B00H,(ES)=2B00H,(1D000H)=8000H,(1D002H)=2B00H 要求写两条指令将(33000H)传送给AX寄存器。

答: LES BX,[2000H]

MOV AX,ES:[BX]

3.15.求出以下十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF、ZF、CF 和OF(PF、AF)的值。

答:

(1)1234 (2) 4321

+ 62A0 + 62A0

74D4 A5C1

OF=0 SF=0 ZF=0 OF=1 SF=1 ZF=0

AF=0 PF=1 CF=0 AF=0 PF=0 CF=0

(3) CFA0 (4)9D60

+ 62A0 + 62A0

3240 0000

OF=0 SF=0 ZF=0 OF=0 SF=0 ZF=1

AF=0 PF=0 CF=1 AF=0 PF=1 CF=1

3.16 求出以下十六进制数与十六进制数4AE0H之差,并根据结果设置标志位SF、ZF、CF 和OF(PF、AF)的值。

答:

(1)1234 (2) 5D90

- 4AE0 - 4AE0

C754 12B0

OF=0 SF=1 ZF=0 OF=0 SF=0 ZF=0

AF=0 PF=0 CF=1 AF=0 PF=0 CF=0

(3)9090 (4) EA04

- 4AE0 - 4AE0

45D4 9F24

OF=1 SF=0 ZF=0 OF=0 SF=1 ZF=0

AF=0 PF=1 CF=0 AF=0 PF=1 CF=0

3.17 写出执行以下计算的指令序列、其中X、Y、Z、R、W为16位带符号数的变量名。

(1)。Z W+(Z-X)

MOV AX,Z

SUB AX,X

ADD AX,W

MOV Z,AX

(2)。Z W-(X+6)-(R+9)

ADD X,6

ADD R,9

MOV AX,W

SUB AX,X

SUB AX,R

MOV Z,AX

(3)。Z (W*X)/(Y+6)、R 余数。

ADD Y,6

MOV AX,W

IMUL X

IDIV Y

MOV Z,AX

MOV R,DX

(4)。Z (W-X)/(5*Y)*2

MOV AX,5

IMUL Y

MOV BX,AX

MOV AX,W

SUB AX,X

CWD

IDIV BX

ADD AX,AX

MOV Z,AX

*3.18 已知程序段如下:AX ( SF ZF CF )

MOV AX,1234H 1234H 0 0 0

MOV CL,4 1234H 0 0 0

ROL AX,CL 2341H 0 0 0

DEC AX 2340H 0 0 0

MOV CX,4 2340H 0 0 0

MUL CX 8D00H 0 0 0

INT 21H

试问:

(1)。每条指令执行完后,AX 寄存器内容是什么?

(2)。每条指令执行完后,进位、符号和零标志的值是什么?

(3)。程序结束时,AX和DX寄存器内容是什么?

答:(1)。每条指令执行完后,AX 寄存器内容是:

MOV AX,1234H (AX)=1234H

MOV CL,4 (AX)=1234H

ROL AX,CL (AX)=2341H

DEC AX (AX)=2340H

MOV CX,4 (AX)=2340H

MUL CX (AX)=8D00H

INT 21H AX不定

(2)。每条指令执行完后,进位、符号和零标志的值是:

MOV AX,1234H (SF)=0;(ZF)=0;(CF)=0

MOV CL,4 (SF)=0;(ZF)=0;(CF)=0

ROL AX,CL (SF)=0;(ZF)=0;(CF)=0

DEC AX (SF)=0;(ZF)=0;(CF)=0

MOV CX,4 (SF)=0;(ZF)=0;(CF)=0

MUL CX (SF)=0;(ZF)=0;(CF)=0

INT 21H (SF)=X;(ZF)=X;(CF)=X

(3)。程序执行结束(DX)=0000H,(AX)=8D00H

3.19 下列程序中每条指令执行结束后AX寄存器及CF、SF、ZF和OF内容是什么?

MOV AX,0

DEC AX

ADD AX,7FFFH

ADD AX,2

NOT AX

SUB AX,0FFFFH

ADD AX,8000H

SUB AX,1

AND AX,58D1H

SAL AX,1

SAR AX,1

NEG AX

ROR AX,1

答:下列程序中每条指令执行结束后AX寄存器及CF、SF、ZF和OF内容是

(AX)(OF SF ZF CF) MOV AX,0 0000H 0 0 0 0

DEC AX FFFFH 0 1 0 0

ADD AX,7FFFH 7FFEH 0 0 0 1

ADD AX,2 8000H 1 1 0 0

NOT AX 7FFFH 1 1 0 0

SUB AX,0FFFFH 8000H 1 1 0 1

ADD AX,8000H 0000H 1 0 1 1

SUB AX,1 FFFFH 0 0 0 1

AND AX,58D1H 58D1H 0 0 0 0

SAL AX,1 B1A2H 1 1 0 0

SAR AX,1 D8D1H 0 1 0 0

NEG AX 272FH 0 0 0 1

ROR AX,1 4E5EH 0 0 0 0

3.20.已知变量DA TAX和变量DATAY定义如下:

DATAX DW 0148H,2316H

DATAY DW 0237H,4052H

按下列要求编写指令序列:

(1)。DATAX和DA TAY两个字数据相加,结果存放在DATAY中。

(2)。DATAX和DA TAY两个双字数据相加,结果存放在DA TAY开始字单元中。

(3)。解释下列指令的作用:

STC

MOV BX,DATAX

ADC BX,DA TAY

(4)。DATAX和DATAY两个字数据相乘(用MUL)

(5)。DATAX和DATAY两个双字数据相乘(用MUL)

(6)。DATAX除以23 (用DIV)

(7)。DATAX两个双字除以DATAY(用DIV)

答:

(1)。 MOV AX,DATAX

ADD DATAY,AX

MOV AX,DATAY+2

ADD DATAY+2,AX

(2)。 MOV AX,DATAX

ADD DATAY,AX

MOV AX,DATAY+2

ADC DATAY+2,AX

(3)。(DATAY)(DAYAX)+(DATAY)+1

(4)。 MOV AX,DATAX

MUL DATAY

(5)。设:DATAX DW 0148H,2316H DATAY DW 0237H,4052H

DL DW 4 DUP (0)

程序段为:

MOV AX,DATAX

MUL DATAY

MOV DL,AX

MOV DL+2,DX

MOV AX,DATAX+2

MUL DATAY

ADD DL+2,AX

ADC DL+4,DX

ADC DL+6,0

MOV AX,DATAX

MUL DATAY+2

ADD DL+2,AX

ADC DL+4,DX

ADC DL+6,0

MOV AX,DATAX+2

MUL DATAY+2

ADD DL+4,AX

ADC DL+6,DX

(6)。MOV AX,DATAX

MOV DX,0

MOV BX,23

DIV BX

(7)。MOV AX,DATAX

MOV DX,DATAX+2

DIV DATAY

3.21 写出DX、AX的双字长数求补的指令序列。

方法1:CMP DX,0

JGE NEXT

NEG DX

NEG AX

SBB DX,0

NEXT:

方法2 CMP AX,0

JGE NEXT

NOT AX

NOT DX

ADD AX,1

ADC DX,0

NEXT:

3.22 试编写一个程序求出双字长数的绝对值。双字长数在A和A+2单元中,结果存放在B 和B+2单元中。

方法1:

data segment

a dw xxxxh,xxxxh

b dw ?,?

data ends

code segment

assume cs:code,ds:daa

start: mov ax,data

mov ds,ax

MOV AX,A

MOV DX,A+2

NEG DX

NEG AX

SBB DX,0

MOV B,AX

MOV B+2,DX

Mov ah,4ch

Int 21h

Code ends

End start

方法2

data segment

a dw xxxxh,xxxxh

b dw ?,?

data ends

code segment

assume cs:code,ds:daa

start: mov ax,data

mov ds,ax

MOV AX,A

MOV DX,A+2

NOT AX

NOT DX

ADD AX,1

ADC DX,0

MOV B,AX

MOV B+2,DX

Mov ah,4ch

Int 21h

Code ends

End start

3.23 设(BX)=0E3H、(V ALUE)=79H,确定下列各条指令单独执行后的结果。

答:(1)。XOR BX,VALUE (BX)=009AH

(2)。AND BX,VALUE (BX)=0061H

(3)。OR BX,VALUE (BX)=00FBH

(4)。XOR BX,VALUE (BX)=001CH

(5)。AND BX,0 (BX)=0000H

(6)。TEST BX,01H (BX)=00E3H

3.24 已知(BX)=6D16H,执行后(DX)=?

MOV CL,07

SHR BX,CL

答:执行后(DX)=0DAH

3.25 试用移位指令把十进制数+53和-49分别乘以2,用什么指令,结果是什么?如果要除以2呢?

答:(1)。把+53和-49分别乘以2指令是:

MOV AL,53

MOV BL,-49

SHL AL,1

SHL BL,1

结果分别为 106、-98

(2)。把+53和-49分别除以2指令是:

MOV AL,53

MOV BL,-49

SHR AL,1

SAR BL,1

结果分别为 26、-24

3.26 试分析下列程序段完成什么功能:

MOV CL,04

SHL DX,CL

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL

答:完成将DX AX双字数据左移四位。

3.27 假定(DX)=0B9H、(CL)=03、(CF)=01,以下各条指令单独执行后(DX)值为多少?

(1)。SHR DX,1

(2)。SAR DX,CL

(3)。SHL DX,CL

(4)。SHL DX,1

(5)。ROR DX,CL

(6)。ROL DL,CL

(7)。SAL DH,1

(8)。RCL DX,CL

(9)。RCR DL,1

答:各条指令单独执行后(DX)值为:

(1)。SHR DX,1 (DX)=5CH

(2)。SAR DX,CL (DX)=17H

(3)。SHL DX,CL (DX)=5C8H

(4)。SHL DX,1 (DX)=72H

(5)。ROR DX,CL (DX)=2017H

(6)。ROL DL,CL (DX)=0CDH

(7)。SAL DH,1 (DX)=0B9H

(8)。RCL DX,CL (DX)=5CCH

(9)。RCR DL,01 (DX)=0DCH

3.28 下列程序段执行后,BX 寄存器内容是什么?

MOV CL,3

MOV BX,0B7H

ROL BX,1

ROR BX,CL

答:(BX)=C02DH

3.29 设数据定义如下:

CONAME DB ‘SPACE EXPLORERS INC。’

PRLINE DB 20 DUP(‘’)

用串指令编写程序段分别完成以下功能:

(1)。从左到右把CONAME中的字符串传送到PRLINE。

(2)。从右到左把CONAME中的字符串传送到PRLINE。

(3)。把CONAME第三和第四个字节内容装入AX中。

(4)。把AX寄存器内容存入PRLINE+5开始单元中。

(5)。检查CONAME中有无空格字符,如有传送到BH中。

(6)。编写程序段,把STRING中‘&’字符用空格代替。

解:(1)。从左到右把CONAME中的字符串传送到PRLINE。 Data segment

CONAME DB ‘SPACE EXPLORESINC。’

Count equ $-coname

PRLINE DB 20 DUP(‘‘)

Data ends

Code segment

Assume ds:data,es:data,cs:code

Start: mov ax,data

Mov ds,ax

Mov es,ax

MOV SI,OFFSET CONAME

MOV DI,OFFSET PRLINE

MOV CX,COUNT

CLD

REP MOVSB

Mov ah,4ch

Int 21h

Code ends

End start

(1)。从右到左把CONAME中的字符串传送到PRLINE。

Data segment

CONAME DB ‘SPACE EXPLORESINC。’

Count equ $-coname

PRLINE DB 20 DUP(‘‘)

Data ends

Code segment

Assume ds:data,es:data,cs:code

Start mov ax,data

Mov ds,ax

Mov es,ax

MOV SI,OFFSET CONAME+COUNT-1

MOV DI,OFFSET PRLINE+COUNT-1

MOV CX,COUNT

STD

REP MOVSB

Mov ah,4ch

Int 21h

Code ends

End start

(3)。把CONAME第三和第四个字节内容装入AX中。

MOV SI,OFFSET CONAME

LODSB

MOV AH,AL

LODSB

XCHG AH,AL

(4)。把AX寄存器内容存入PRLINE+5开始单元中。

MOV DI,OFFSET PRLINE

STOSB

MOV AL,AH

STOSB

(5)。检查CONAME中有无空格字符,如有传送到BH中。

MOV DI,OFFSET CONAME

MOV CX,COUNT

MOV AL,20H

CLD

REPNZ SCASB

JNZ NEXT

DEC DI

MOV BH,ES:[DI]

。。。。。。

NEXT:。。。。。。

(6)。编写程序段,把STRING中‘&’字符用空格代替。

Data segment

STRING DB ‘The data is FEB&03 ’

Count equ $-string

Data ends

Code segment

Assume ds:data,cs:code

Start: mov ax,data

Mov ds,ax

MOV DI,OFFSET STRING

MOV CX,COUNT

MOV AL,‘&’

CLD

REPNZ SCASB

JNZ NEXT

DEC DI

MOV BYTE PTR[DI],‘’

NEXT:Mov ah,4ch

Int 21h

Code ends

End start

3.31 假设程序中数据定义如下:用串指令分别编写程序段。

(1)。用空格清除PRINT_LINE域。

(2)。在STUDENT_ADDR查找第一个‘—’

(3)。在STUDENT_ADDR查找最后一个‘—’

(4)。如果STUDENT_NAME域全是空格,填入‘*’

(5)。把STUDENT_NAME移到PRINT_LINE前30个字节中,把STUDENT_ADDR移到PRINT_LINE后9个字节中。

答:(1)。用空格清除PRINT_LINE域。

Data segment

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB 9 DUP(?)

PRINT_LINE DB 132 DUP(?)

Data ends

Code segment

Assume cs:code, ds:data,es:data,

Start: mov ax,data

Mov ds,ax

Mov es,ax

MOV DI,OFFSET PRINT_LINE

MOV CX,132

MOV AL,‘’

CLD

REP STOSB

Mov ah,4ch

Int 21h

Code ends

End start

(2)。在STUDENT_ADDR查找第一个‘—’

Data segment

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB ‘SPAC——E EXP—LORESI—NC’ Cont equ $-student_addr

PRINT_LINE DB 132 DUP(?)

Data ends

Code segment

Assume cs:code, es:data,

Start: mov ax,data

Mov es,ax

MOV DI,OFFSET PRINT_LINE

MOV CX,CONT

MOV AL,‘—’

CLD

REPNZ SCASB

JNZ NEXT

MOV DH,[DI-1]

NEXT: Mov ah,4ch

Int 21h

Code ends

End start

(3)。在STUDENT_ADDR查找最后一个‘—’

Data segment

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB ‘SPAC——E EXP—LORESI—NC’ Cont equ $-student_addr

PRINT_LINE DB 132 DUP(?)

Data ends

Code segment

Assume cs:code, es:data,

Start: mov ax,data

Mov es,ax

MOV DI,OFFSET PRINT_LINE +CONT-1

MOV CX,CONT

MOV AL,‘—’

STD

REPNZ SCASB

JNZ NEXT

MOV DH,[DI+1]

NEXT: Mov ah,4ch

Int 21h

Code ends

End start

(4)。如果STUDENT_NAME域全是空格,填入‘*’

Data segment

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB 9 DUP(?)

PRINT_LINE DB 132 DUP(?)

Data ends

Code segment

Assume cs:code, ds:data,es:data,

Start: mov ax,data

Mov ds,ax

Mov es,ax

MOV SI,OFFSET PRINT_LINE

MOV DI,SI

MOV CX,30

MOV AL,‘’

CLD

REPNZ SCASB

JNZ NEXT

MOV CX,30

MOV AL,‘*’

REP STOSB

NEXT: Mov ah,4ch

Int 21h

Code ends

End start

(5)。把STUDENT_NAME移到PRINT_LINE前30个字节中,把 STUDENT_ADDR移到PRINT_LINE后9个字节中。

Data segment

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB 9 DUP(?)

PRINT_LINE DB 132 DUP(?)

Data ends

Code segment

Assume cs:code,ds:data,es:data,

Start:mov ax,data

Mov ds,ax

Mov es,ax

MOV SI,OFFSET PRINT_NAME

MOV DI,OFFSET PRINT_LINE

MOV CX,30

CLD

REP MOVSB

MOV SI,OFFSET PRINT_ADDR+9

MOV DI,OFFSET PRINT_LINE+131

MOV CX,9

CLD

MOVSB

NEXT:Mov ah,4ch

Int 21h

Code ends

End start

3.32 编写程序段,比较OLDS和NEWS的5个字符是否相等,如不相等转NEW_LESS否则顺序执行。

解: MOV SI,OFFSET OLDS

MOV DI,OFFSET NEWS

MOV CX,5

CLD

REPZ CMPSB

JNZ NEW_LESS

。。。。。。

NEW_LESS:

3.33 假定AX和BX内容为带符号数,CX和DX内容为无符号数,选用比较指令和条件转移指令实现以下判断。

(1)若DX的内容超过CX的内容,则转去执行EXCEED。

(2)若BX的内容超过AX的内容,则转去执行EXCEED。

(3)若BX的内容等于零,则转去执行ZERO。

(4)BX与AX的内容相比较是否产生溢出?若溢出则转OVERFLOW。

(5)若BX的内容小于等于AX的内容,则转EQ_SMA。

(6)若DX的内容低于等于CX的内容,则转EQ_SMA。

答:(1)。CMP DX,CX

JA EXCEED

(2)。CMP BX,AX

JG EXCEED

(3)。CMP CX,0

JZ ZERO

(4)。CMP BX,AX

JO OVERFLOW

(5)。CMP BX,AX

JLE EQ_SMA

(6)。CMP DX,CX

JBE EQ_SMA

3.34 试分析下列程序段:

ADD AX,BX

JNO L1

JNC L2

SUB AX,BX

JNC L3

JNO L4

JMP SHORT L5

如果AX,BX内容给定如下,以上程序段执行完后,转向哪里?

AX BX

(1)。 147B 80DC

(2)。 B568 54B7

(3)。 42C8 608D

(4)。 D023 9FD0

(5)。 94B7 B568

答:以上程序段执行完后转向

AX BX

(1)。 147B 80DC 转向L1

(2)。 B568 54B7 转向L1

(3)。 42C8 608D 转向L2

(4)。 D023 9FD0 转向L5

(5)。 94B7 B568 转向L5

3.35 指令CMP AX,BX后面跟着一条格式为J…L1的条件转移指令,其中…可以是B,NB,BE,NBE,L,NL,LE和NLE中的任一个。如果AX和BX的内容给定如下:

AX BX

(1)。1F52 1F52

(2)。88C9 88C9

(3)〃FF82 007E

(4)。58BA 020E

(5)。FFC5 FF8B

(6)。09A0 1E97

(7)。8AEA FC29

(8)。D367 32A6

问以上8条转移指令的那几条将引起转移到L1

答: AX BX

(1)。1F52 1F52 NB BE NL LE

(2)。88C9 88C9 NB BE NL LE

(3)。FF82 007E NB NBE L LE

(4)。58BA 020E NB NBE NL NLE

(5)。FFC5 FF8B NB NBE NL NLE

(-3B)(-75)

(6)。09A0 1E97 B BE L LE

(7)。8AEA FC29 B BE L LE

(-7516)(-3D7)

(8)。D367 32A6 NB NBE L LE

3.36 假定X和X+2单元内容为双精度数P,假定Y和Y+2单元内容为双精度数Q,其中X 和Y为低位字,试说明以下程序段完成什么工作?

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

寻址方式及指令系统习题与解答 计算机科学与工程学院黄洪波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.无溢出但有进位

第三章指令系统

第5章指令系统 一、判断题 (×)1.执行指令时,指令在内存中的地址存放在指令寄存器中。 (√)2.程序计数器PC用来指示从内存中取指令。 (√)3.同一系列的不同型号的计算机,保持软件向上兼容的特点。 (√)4.在计算机的指令系统中,真正必须的指令数是不多的,其余的指令都是为了提高机器速度和便于编程而引入的。 (×)5.RISC的主要目标是减少指令数,因此允许以增加每条指令的功能的办法来减少指令系统所包含的指令数。 二、选择题 1.在计算机的指令系统中采用不同的寻址方式的主要目的是 C 。 A.实现程序控制和快速查找存储器地址 B.可以直接访问主存和外存 C.缩短指令长度,扩大寻址空间,提高编程的灵活性 D.降低指令的译码难度 2.单操作数指令的操作数由 B 提供。 A.指定寄存器或由操作码指定存储单元 B.由地址码指定的存储单元;如果已标明该存储单元的内容为地址,则由该地址所指定的存储单元 C.由操作码直接指定数据 D.由操作码直接指定的存储单元 3.在多地址指令中,算术运算结果不会存储在 A 中。 A.累加器B.第一地址码所指定的存储空间 C.第二地址码所指定的存储空间D.第三地址码所指定的存储空间 4.把存储单元A的内容传送到存储单元B的指令执行后,存储单元A的内容为 B 。A.空白或零,视机器而定B.与存储单元B的内容相同 C.二进制补码D.存储单元A的内容与存储单元B的内容之差 三、填空题 1.指令操作码通常有两种编码格式:固定格式和可变格式。 2.在当前的计算机中,指令的执行方式有3种,就是顺序执行方式,重叠执行方式和流水线方式。 3.数据传送类指令实现的功能是传送数据,它往往是在主存储器和寄存器之间,或寄存器和寄存器之间传送数据。 4.所谓堆栈,是主存中专门用来存放数据的一个特定的区域,它具有先进后出的性质。 5.Intel 8086/8088的字符串操作指令用来处理存放在存储器中的一串字符或数据。6.内存地址寄存器用来指示从内存中取数据。 7.浮点运算指令对于用于科学计算的计算机是很必要的,可以提高机器的运算速度。四、名词解释 1.计算机指令系统:是指一台计算机上全部指令的集合,也称为计算机的指令集。 2.固定格式:操作码的长度是固定的,集中放在指令字的某一个字段中。 3.可变格式:操作码的长度可变,且分散地放在指令字的不同字段中。 4.寻址:就是寻找操作数的地址,最终目的是寻找所需的操作数。 五、简答题

作业习题 寻址方式和指令

寻址方式和指令习题 一、选择题 1、MOVX A,@DPTR指令中源操作数的寻址方式是() (A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址 2、ORG 0003H LJMP 2000H ORG 000BH LJMP 3000H 当CPU响应外部中断0后,PC的值是() (A)0003H (B)2000H (C)000BH (D)3000H 3、执行PUSH ACC指令,MCS-51完成的操作是() (A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP (C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP 4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=() (A)2000H (B)2001H (C)2002H (D)2003H 5、51执行完MOV A,#08H后,PSW的哪一位被置位() (A)C (B)F0 (C)OV (D)P 6、下面条指令将MCS-51的工作寄存器置成3区() (A)MOV PSW,#13H (B)MOV PSW,#18H (C)SETB PSW.4 CLR PSW.3 (D) SETB PSW.3 CLR PSW.4 7、执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是()(A)/PSEN (B)ALE (C)/RD (D)/WR 8、MOV C,#00H的寻址方式是() (A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址 9、ORG 0000H AJMP 0040H ORG 0040H MOV SP,#00H 当执行完上面的程序后,PC的值是()

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

实验一 指令与寻址方式认知实验(Keil)

实验一指令与寻址方式认知实验 一、实验目的 1.了解单片机基本指令及其寻址方式; 2.掌握在μVision环境中查看指令操作结果的技巧。 二、实验仪器和设备 Keil软件;THKSCM-2综合实验装置; 三、实验原理及实验内容 1.示例及相关设置 (1)建立一个文件夹:lx31。 (2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx31.asm文件名存盘到lx31文件夹中。 ORG 0000H MAIN:MOV R7,#16 MOV A,#00H MOV R0,#30H LP:MOV @R0,A INC R0 INC A DJNZ R7,LP SJMP $ END (3)在lx31文件夹下建立新工程,以文件名lx31存盘(工程的扩展名系统会自动添加)。 (4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置: ○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。 ○2晶振频率设为11.0592MHz。 ○3Output标签下的Create HEX File前小框中要打钩。

○4在Debug标签选择Use Simulator(软件模拟)。 (5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。利用单步、执行到光标处两种方法运行程序,观察程序运行的结果。 (6)分析程序的功能,研究观察以下指令的寻址方式及其操作效果。 2.示例及相关设置 (1)建立一个文件夹:lx32。 (2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx32.asm文件名存盘到lx32文件夹中。 ORG 0000H MOV R0,#20H MOV R1,#22H MOV A,@R0 ADD A,@R1 MOV 24H,A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 MOV 25H,A SJMP $ END (3)在lx32文件夹下建立新工程,以文件名lx32存盘(工程的扩展名系统会自动添加)。 (4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置: ○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。 ○2晶振频率设为11.0592MHz。 ○3Output标签下的Create HEX File前小框中要打钩。 ○4在Debug标签选择Use Simulator(软件模拟)。

第六章_寻址方式和指令系统

1

第 6章 寻址方式和汇编指令 第6章
6.1、寻址方式 6.2、汇编语言指令集 6.3、汇编源程序

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
▲ 汇编指令是可执行指令,每条指令对应一条机器 码,用以控制处理器中的执行部件进行各种操 作。 ▲ TMS320F281X系列的汇编指令有150多条。 ▲ 它们支持各种信号处理运算,同时也提供了应用 中所需要的多级处理和过程控制功能。 ▲ 寻址方式是指寻找指令中操作数地址的方式。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
TMS320C28x指令集采用7种存储器寻址方式: ▲ 直接寻址方式 ▲ 堆栈寻址方式 ▲ 间接寻址方式 ▲ 寄存器寻址方式 ▲ 数据/程序/IO空间立即寻址方式 ▲ 程序空间间接寻址 ▲ 字节寻址方式

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
F2812 的大多数指令利用操作码中的8位字段来选择寻 址方式和对寻址方式进行修改.在 F2812 指令系统中,这个8 位字段用于以下寻址方式: (1)loc16 。 为16位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
(2)loc32 。 为32位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
以上7种寻址方式都与“loc16/loc32”组合起来使用。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
寻址方式选择位
由 于 F2812 提 供 了 多 种 寻 址 方 式 , 因 此 用 寻 址 方 式 选 择 位 ( AMODE )来选择8位字段( loc16/loc32 )的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下: ▲ AMODE=0——该方式是复位后的默认方式,也是F2812的C/C++编译
器使用的方式。这种方式与C2xLP CPU的寻址方式不完全兼容。数据页指针 偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1——该方式包括的寻址方式完全与C2xLP 器件的寻址方式
兼容。数据页指针的偏移量是7位并支持所有C2xLP 支持的间接寻址方式。
对与loc16或者loc32字段,其可用的寻址方式总结如P375所示

存储器寻址方式

存储器寻址方式 存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。8088的存储器空间是分段管理的。程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA) 1.直接寻址 在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。其默认的段地址在DS段寄存器中,可以采用段超越前缀。 例将数据段中偏移地址2000H处的内存数据送至AX寄存器。 MOV AX, [2000H] 该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。 如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。

MOV AX, [2000H];指令代码:A1 00 20 例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。 MOV AX, ES:[2000H]; 指令代码:26 A1 00 20 变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如 WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。假设它在数据段偏移地址是0010H 。 例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。 MOV AX, WV AR; 指令功能: 上述指令实质就是如下指令: AX WV AR AX DS :[0010H]

寻址方式和指令系统

《微机原理》复习思考题第3章 8086的寻址方式和指令系统 3.1 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 3.2 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段 寄存器指出段地址,指令中应如何表示? 3.3 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定? 3.4 用寄存器间接寻址方式时,BX,BP,SI,DI分别针对什么情况来使用?这四个寄存器组合 间接寻址时,地址是怎样计算的?举例进行说明。 3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOV BYTE PTR [BP], 2000 MOV WORD PTR [BX], 2000 3.6 使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注 意什么问题? 3.7 下面这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。 XCHG CS, AX MOV [BX], [1000] XCHG BX, IP PUSH CS POP CS IN BX, DX MOV BYTE[BX], 1000 MOV CS, [1000] 3.8 8086系统中,当对SS和SP寄存器的值进行修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行之后,又自动恢复对SS寄存器赋值前的中断开放情况。这样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。 3.9 以下是格雷码的编码表 0——0000 1——0001 2——0011 3——0010 4——0110 5——0111 6——0101 7——0100 8——1100 9——1101 请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。 3.10 用加法指令设计一个简单程序,实现两个16位十进制数的加法,结果放在被加数单元。 3.11 为什么用增量指令或减量指令设计程序时,在这类指令后面不用进位标志CF作为判断依 据?

(完整版)第三章指令系统

第三章指令系统习题参考答案(三) 1、80C51系列单片机的指令系统有何特点? 答:80c51的指令系统的特点有:(1)执行时间短。一个机器周期指令有64条,2个时间周期指令有45条,而4个机器周期指令仅有2条(即乘法和除法指令);(2)指令编码字节少。单字节的指令有49条,双字节的指令有45条,三字节的指令仅有17条;(3)位操作指令丰富。这是80c51单片机面向控制特点的重要保证。 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器 空间如何? 答:(1)寄存器寻址。 对应的寄存器有: ·工作寄存器R0~R7 ·累加器A ·寄存器B ·数据指针DPTR (2)直接寻址。 对应的存储空间有: ·片内RAM低128字节(以地址形式表示) ·SFR(以地址形式或SFR符号形式表示,但符号将转换为相应的SFR 地址) (3)寄存器间接寻址。 对应的空间有: ·片内RAM(采用@R0,@R1或SP); ·片外RAM(采用@R0,@R1或@DPTR) (4)变址寻址。 对应的空间有: ·ROM空间(采用@A+DPTR,@A+PC) (5)相对寻址。 ·ROM空间(采用JC rel) (6)位寻址。 ·片内RAM的20H~2FH单元的128可寻址位 ·SFR的可寻址位 3、访问特殊功寄存器SFR可以采用哪些寻址方式? 答:直接寻址、位寻址 4、访问内部RAM单元可以采用哪些寻址方式? 答:寄存器寻址、直接寻址、寄存器间接寻址 5、访问外部RAM单元可以采用哪些寻址方式? 答:寄存器间接寻址 6、访问外部程序存储器可以采用哪些寻址方式? 答:立即寻址、变址寻址、相对寻址 7、为什么说布尔处理功能是80C51单片机的重要特点? 答:布尔处理功能是MCS-51系列单片机的一个重要特征,在物理结构

第三章 80868088的指令系统

3.1 指令的基本格式   一、指令构成 微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。每种指令又由两个字段(Field)构成: l.操作码(OP-Code)字段 该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。 2.操作数(Oprand)字段 该字段则是指出指令执行的操作所需的操作数。在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。 指令的基本格式如下:   二、8086   8086的指令长度可在1~6字节的范围,如图3-1所示。其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。   (1)B1字节各字段定义如下: OP--指令操作码。 D--表示方向。D=1寄存器为目的,D=0寄存器为源。 W--表示字节或字处理方式。W=0为字节指令,W=1为字指令。

(2)B2字节各字段定义如下: MOD--给出指令的寻址方式。8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量; MOD01,只有低8位位移量,需将符号扩展8位,形成16位; MOD=10有16位位移量。当MOD=1l时,为寄存器方式,两个操作数均为寄存器。 REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。 R/M--R/M受MOD制约。当 MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。MOD和R /M字段表示的有效地址 EA计算方法如表3-1所示,共2 4种。   (3) B3~B6字节这四个字节一般是给出存储器操作数地址的位移量(即偏移量)和/或立即操作数。位移量可为8位,也可为16位,这由MOD来决定。8086规定16位的字位移量的低位字节放于低地址单元,高位字节放于高地址单元。 若指令中只有8位位移量, 8086在计算有效地址时,自动用符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。指令中的立即操作数位于位移量的后面。若B3,B4有位移量,立即操作数就位于B5,B6。若指令中无位移量,立即操作数就位于B3,B4字节。总之,指令中缺少的项将由后面存在的项向前顶替,以减少指令长度。 3.2 8086的寻址方式   8086的操作数可隐含在操作码中,也可以是操作数字段中的操作数本身,还可以是存放操作数的地址,如寄存器,I/0端口及存储器。对存储器,给出的或是存储器地址,或是产生存储器地址的信息。从表3

指令格式及寻址方式

指令格式及寻址方式 一、指令格式 指令的表示方法称为指令格式,它包括指令的长度和指令内部信息的安排等内容。一条指令一船由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作效则表示指令操作的对象。操作数可以直接是一个数(立即数),也可以是一个数据所在的空间地址,即在执行指令时从指定的地址空间取出操作数。 单片机中的指令并不是固定的长度,对于不同的指令,指令的字节数不同。MC5—5l 单 片机用机器语言表示的指令格式按字节划分,有一字节指令、两字节指令和三字节指令三种。 1.一字节指令 一字节指令中的8位二进制代码既包含操作码的信息,也包含操作数的信息。在一字节指令中,有些指令的指令码中隐合着对某一寄存器的操作,NXP代理商无需再具体指定操作数。例如数 据指针DPTR加1指令;INC DPTR,其指令码为: 另外有些指令的操作数在通用寄存器中,由指令码中的rrr三位的不同编码来指定该 寄存器。例如:寄存器向氮加器A传送数据指令:MOV A,Rn,其指令码为: 其中,高5位表示操作内容——传送,最低三位rrr的不同二进制编码用来表示从哪一个寄 存器取数。 2.二字节指令。 二字节指令中的第一个字表尔操作码,第二个字节表示操作数,这里的操作数既可能是立即数,也可能是地址。其指令格式为: 3.三字节指令 三节节指令中,第一字节表示操作码,另两个字节是操作数,其指令格式为

绝大多数指令执行时都需要使用操作数,因此如何寻找存放操作数的单元地址和提取操作数就变得十分重要。Atmel代理所谓寻址方式就是如何找到存放操作数的地址,把操作数提取出来 的方法。 寻址方式与计算机的存储器空间结构有关,寻址方式越多,则计算机的功能越强,灵活性也越大,能更有效地处理各种数据,但指令系统也会相应的复杂。 MCS-51单片机共有七种寻址方式。下面分别加以介绍。 1.寄存器寻址 寄存器寻址是将所选定的工作寄存器组中的8个工作寄存器(R0—R7)的内容作为操 作数。指令操作码的低三位的不同组合分别代表R0—R7中的某一个。A、B、DPTR和C(位累加器)也能作为寄存器来寻址。例如: 这里源操作数和目标操作数均采用寄存器寻址.寄存器中的内容为操作数。 2.直接寻址 在直接寻址方式中、操作数由指令中的一个8位地址单元所指定。只有内部RAM中的00H~7FH地址单元和80H~FFH地址中的专用寄存器可直接寻址,且直接寻址是访问专 用寄存器的唯一方法。 采用直接寻址方式的指令是双字节指令,第一个字节是操作码,第二个字节是内部RAM的低128字节或专用寄存器的地址。例如: 此例中,源操作数采用直接寻址方式,表示把内部RAM中30H单元的内容送入A。指令代码为E5H、30H。 3.寄存器间接寻址 在寄存器间接寻址方式个,指令中给出的杏存器的内容为操作数的地址,而不是操作数本身。内部RAM和外部RAM都可以间接寻址。 当访问内部RAM或外部RAM的低256字节时,间址寄存器可以是选中寄存器组中的R0或R1,即内R0或R1间接给出操作数所在的地址‘ 当访问外部RAM时,16位间址寄存器只能使用16位数据指针寄存器DPTR,这时可对整个外部RAM空间(64KB)寻址。 PUSH和POP指令的执行也采用寄存器间接寻址,这时堆栈指针SP用作间址寄存 器。堆栈指针可驻留在内部RAM的任何地方;例如:

指令与寻址方式习题

指令与寻址方式习题解答 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

MCS-51单片机的寻址方式和指令系统

MCS-51单片机指令系统与汇编语言程序设计 伪指令............................................. (2) MCS-51单片机的寻址方式 (4) MCS-51单片机的指令系统 (7) 数据传送指令 (8) 算数运算指令 (10) 逻辑运算及移位指令 (12) 控制转移指令 (13) 位操作指令 (18)

指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下: [标号:] 操作码 [操作数] [,操作数] [;注释] 标号: 代表指令的具体地址 操作码: 又称助记符,英文缩写 操作数: 操作数中常数可以用二、八、十、十六进制表示,如果用十六进制表示,最高位用A以上的数开头时,前面须加0,否则机器不识别 注释:增加程序的可读性 伪指令 (1)定位伪指令ORG 格式:ORG n 其中:n通常为绝对地址,可以是十六进制数、标号或表达式。 功能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。 例如程序:ORG 1000H START:MOV A,#20H MOV B,#30H ┇ (2)结束汇编伪指令END 格式:[标号:] END [表达式] 功能:放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬。 (3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。 “字符名称”与“标号”的区别是“字符名称”后无冒号,而“标号”后面有冒号。 (4)定义字节伪指令DB

1_寻址方式与基本指令实验

2.1 寻址方式与基本指令实验 2.1.1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2.1.2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。 2.1.3 实验内容 1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST 文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 (1)程序装入后,代码段寄存器CS的内容为13FD________H,代码段第一条可执行指令MOV A X, DATA对应的机器代码为B8FC13__________H,它是一个_3_______字节指令,注意观察 执行该指令时IP值的变化情况,该指令源操作数DATA的寻址方式是(立即数寻址_),其值为__13FC________。 (2)执行完MOV DS, DATA指令后,数据段寄存器DS的内容为_13FC_______H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为_13FC0_______H、13FC1________H和13FC2________H。 (3)程序中第一条ADD AL, [BX] 指令对应的机器代码为_0207_________H,它是一个_2_______字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为_寄存器间接寻址_________,该操作数所在存储单元的逻辑地址(DS): (BX)为_13FC:0001_________,其物理地址为_13FC1_________H;执行完该指令后(AL)=_EA_____H,CF=_NC_____,OF=NV______,ZF=NZ______,SF=NG______,AF=NA______,PF=PO______;若两操作数为无符号数,计算结果是否正确__正确_____?若两操作数为带符号数,计算结果是否正确__正确______?若计算结果正确,结果是正数还是负数(正数)? (4)执行完第二条ADD AL, [BX] 指令后(AL)=__72____H,CF=CY______,OF=OV______,ZF=NZ______,SF=PL______,AF=AC______,PF=PE______;若两操作数为无符号数,计算结果是否正确__正确_____?若两操作数为带符号数,计算结果是否正确_不正确_______? (5)指令MOV SUM, AL中目的操作数的寻址方式为__寄存器直接寻址________。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为_00_______H。 DA TA SEGMENT NUM DB 82H, 68H, 88H SUM DB ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DA TA

第三章寻址方式与指令系统

第三章寻址方式与指令系统 一:选择题 1:下列指令中正确的是() A:MOV BX,AL B:MOV BL,AX C:MOV BL,AL D:MOV BL,BP 2:下列指令不合法的指令是() A:IN AX,03F8H B:MOV AX,BX C:REP CMPSB D:SHR BX,CL 3:下列指令中正确的是() A:MOV 100,CL B:MOV CL,100H C:MOV CL,1000 D:MOV CL,100 4:下列指令中正确的是() A:MOV SS,2400H B:MOV 2400H,SS C:MOV SS,DS D:MOV SS,SP 5:下列指令中正确的是() A:XCHG AH,AL B:XCHG AL,20H C:XCHG AX,DS D:XCHG[BX],[20H] 6:执行完下列程序后,BX寄存器的内容是() MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL A:002DH B:00EDH C:C02DH D:000DH 7:在程序运行过程中,确定下一条指令的物理地址的计算表达式是() A:CS×16+IP B:BX×16+DI C:SS×16+SP D:ES×16+SI 8:寄存器间接寻址方式中,操作数在()中 A:通用寄存器B:堆栈C:主存单元D:段寄存器 9:下列指令,指令()先执行CX-1赋给CX操作,然后再根据CX的值决定是否转移、循环或进行重复操作。 A:JNC B:REP C:JCXZ D:LOOP 10:运算型指令的寻址和控制转移型指令的寻址,其不同点在于() A:前者取操作数,后者决定程序的转移地址B:后者取操作数,前者决定程序的转移地址 C:两者都是取操作数D:两者都是决定程序的转移地址 11:在PC系列机中调试汇编语言程序的工具是DEBUG。用DEBUG调试程序时,可以在目标程序中设断点,或用单步跟踪来找出程序中的毛病。断点只能在RAM中设置,不能在ROM中设置,这是因为() A:ROM不能存放汇编程序B:ROM中数据不能修改 C:ROM不能放入断点中断指令D:ROM不能保护断点 12:DEBUG调试工具是汇编语言最有力的调试手段,当用D命令时显示的结果如下: 0000:0080 72 10 A7 00 7C 10 A7 00—4F 03 62 06 8A 03 62 06 0000:0090 17 03 62 06 86 10 A7 00—90 10 A7 00 9A 10 A7 00 INT 21H是最常用的DOS中断,试确定INT 21H的中断向量为 A:1072H:00A7H B:7C10H:A700H C:00A7H:107CH D;107CH:00A7H 13:设AL和BL是带符号数,当AL≤BL时转至NEXT处,在CMP AL,BL指令后应选择正确的条件指令是 A:JBE B:JNG C:JNA D:JNLE 二:填空题 1:若累加器AX中的内容为4142H,执行指令CMP AX,4041H后,(AX)= 。执行SUB AX,4041H 后,(AX)= 。 2:用CBW指令生成双倍长度的被除数存放在。用CWD指令生成双倍长度的被除数存放在。

单片机的指令和寻址方式

单片机的指令和寻址方式 单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU 执行该程序。程序是由指令组成的,指令的基本组成是操作码和操作数。单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有指令代码也各不相同,因此,必须对所选单片机的全部指令,也就是所谓指令系统,有足够的了解。各个系列的单片机虽然有不同的指令系统,但也有其共同性。掌握一种单片机的指令系统,对其它系列单片机可以起到触类旁通的作用。MCS-51 单片机应用广泛,派生品种多,具有代表性,所以,这里以MCS-51 系列的指令系统为例说明指令的组成和应用。1、MOV A,#20H 这条指令表示把20H 这个数送入累加器A 中(一个特殊功能寄存器)。 2、ADD A,70H 这条指令表示把累加器A 中的内容(在上例中送入的#20H)和存贮器中 地址为70H 单元中的内容(也是一个数字),通过算术逻辑单元(英文缩写为ALU)相加,并将结果保留在A 中。这里MOV、ADD 等称为操作码,而 A、#20H、70H 等均称为操作数。在汇编语言程序中,操作码通常由英文单词缩写而成,这样有助于记忆,所以又称助记符。如MOV 就是英文单词MOVE 的缩写,含有搬移的意思;而ADD 即为英文单词,其意为相加。因此,对于 略懂英语的用户,掌握单片机指令的含意是较为方便的。操作数有多种表示法,如以上的#20H 称为立即数,即20H 就是真正的操作数。而70H 是存贮器中某个单元的地址,在该单元中,放着操作数(比如说是3AH),ADD A,70H 不是将70H 和A 中的内容相加,而是从存贮器70H 单元中将3AH 取出和A 中的内容相加。由上可知,要找到实际操作数,有时就要转个弯,甚至转几个弯,这个过程称为寻址,MCS-51 共有7 种寻址方式,现介绍如下:

MIPS基本指令和寻址方式

MIPS 基本指令和寻址方式: MIPS 是典型的RISC 处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式字段,由指令格式确定各操作数的寻址方式。 MIPS 指令格式一般有三种格式: R-型指令格式 I-型指令格式 J-型指令格式 R _Type 指指指指 26 21 16 11 6 31 OP : 操作码 rs : 第一个源操作数寄存器 rt : 第二个源操作数寄存器(单目原数据) rd : 结果寄存器 shamt :移位指令的位移量 func : 指令的具体操作类型 特点:R-型指令是RR 型指令,其操作码OP 字段是特定的“000000”,具体操作类型由func 字段给定。例如:func=“100000”时,表示“加法”运算。 R[rd] ← R[rs] + R[rt] I _Type 指 指指指 26 21 1631 15 特点:I-型指令是立即数型指令 双目运算: R[rt] R[rs](OP )SignExt(imm16) Load 指令: Addr ← R[rs] + SignExt(imm16) 计算数据地址 (立即数要进行符号扩展) R[rt] ← M[Addr] 从存储器中取出数据,装入到寄存器中

Store 指令: Addr ← R[rs] + SignExt(imm16) M[Addr] ← R[rt] J _Type 指令格式 2631 6bit 26bit 25 特点:J-型指令主要是无条件跳转指令,将当前PC 的高4位拼上26位立即数,后补两个“0”, 作为跳转目标地址。 j L //goto L 指指指指指指指指指 jal L //$ra 指PC+4;goto L 指指指指指指指指指 R 型指令: 定点运算: add / addu , sub / subu , sra , mult/multu , div/divu 逻辑运算: and / or / nor , sll / srl 比较分支: beq / bne / slt / sltu 跳转指令: jr I 型指令: 定点运算: addi / addiu 逻辑运算: andi / ori 比较分支: slti / sltiu 数据传送: lw / sw / lhu / sh / lbu / sb / lui J 型指令: j / jal

相关文档
相关文档 最新文档