搜档网
当前位置:搜档网 › 8086指令系统精析解析

8086指令系统精析解析

8086指令系统精析解析
8086指令系统精析解析

8086指令系统精析

3.1基本数据类型

1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字

(64位,486中引入的)和双四字(128位,Pentium3中引入的)。

2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1

3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的

地址,双字和四字的自然边界地址要分别能被4和8除尽。

4.数据结构要尽可能在自然边界上对齐

5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访

问,只要进行一次存储访问操作。

6.数字数据类型(学生自学)PPT

3.28086的指令格式

一、指令格式

Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中:

1.标号是一个标识符,后面跟有冒号

2.助记符是一类具有相同功能的指令操作码的保留名

3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取

决于操作码

4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程

序的另一部分声明的赋予数据项的标识符。

5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数

是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。

3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。

1.立即数

用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。

立即数可以是8位或16

例1 MOV AX , 2056H

结果( AH ) = 20H ( AL ) = 56H

例2 MOV AL , 78 H

结果( AL ) = 78H

2.寄存器操作数

操作数在寄存器中,指令中指定寄存器名

8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL

16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI

CS、DS、SS、ES

例1 MOV AX , 2056H

执行后:(AX)=2056H

例2 MOV BL , AH

执行前:(BL) = 12H, (AH) = 78H

执行后:(BL) = 78H (AH) = 78H

▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。

▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。

3. 内存操作数

▲指令MOV DS: [ DI ] , CL

完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT

地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H

MOV AX, 2000H

MOV DS, AX ; (DS) = 2000H

MOV DI, 1000H ; (DI) = 1000H

MOV DS: [ DI ], CL ;(21000H) = (CL)

结果如图所示:PPT(第一页)

内存单元的地址由段地址和偏移地址构成

▲为减短指令长度

指令中只给出偏移地址的来源,段地址由默认关系给出。

MOV AL,[ 2000H ] PA= ( DS ) ×10H + 2000H

即选择DS寄存器的内容为段地址。

▲CPU根据偏移地址给出的方式,按默认关系自动选择段寄存器,获取段值,由段值、偏移值构成操作数所在内存单元的物理地址。

指令中用[ ] 给出偏移地址。操作数的偏移地址又称有效地址EA ( Efficient Address)

▲按给出偏移地址方式的不同,分为以下5种:

直接寻址MOV AL, [ 1000H ]

寄存器间接寻址MOV AL, [ BX ]

寄存器相对寻址MOV AL, [ BX + 10H ]

基址加变址寄存器MOV AL, [ BX + SI ]

相对基址加变址寄存器MOV AL, [ BX + SI + 10H ]

(1)直接寻址方式-位移量

存储器操作数的有效地址EA在指令中直接给出。

例MOV AL, [ 1000H ]

默认段寄存器为DS。

操作数所在内存单元的物理地址为:PA = ( DS )×10H + EA

例:MOV AX , [ 1000 H]

若( DS ) = 2000H

内存操作数的物理地址为:

PA = ( DS )×10H +EA = 2000H ×10H + 1000H = 21000H 21000

执行后 (AX)= 3040H

在汇编语言程序中,不直接用数值表示偏移地址,用符号代替数值表示地址,称符号地址(变量名)。

例 符号buffer 表示一个地址。 MOV AX , [buffer] 或写成 MOV AX , buffer 源操作数为buffer 指向的内存单元的内容

符号地址( 变量名)经汇编连接后,与一个确定的数值地址相对应,可用操作符Offset 获取变量的偏移地址。 故 PA = ( DS )×10H + Offset buffer

指令执行结果 ( AX ) = 0B0A H

(2) 寄存器间接寻址-基地址

存储器操作数的有效地址EA 由寄存器给出,寄存器的内容为操作数的有效地址。

可用的寄存器有 BX 、SI 、DI 、BP 如: MOV AL, [ BX ] MOV AH, [ SI ] MOV DL, [ DI ] MOV DH, [ BP ] 默认段寄存器的关系:

①使用BX 、SI 、DI ,默认段寄存器为DS PA = ( DS )×10H + (SI)或(BX)或(DI) ②使用BP ,默认段寄存器为SS PA = ( SS )×10H + ( BP ) 例1: MOV AX , [ DI ]

若 ( DS ) = 3000H ,( DI ) = 2000H

则内存操作数的物理地址为:PA = ( DS )×10H + ( DI ) = 32000H

执行后(AX) = (32000H) = 400BH

例2:MOV AX , [ BP ]

若( SS ) = 4000H,( BP ) = 3000H

则内存操作数的物理地址为:PA = ( SS )×

指令执行后(AX) = (43000H) = 0102H

(3)寄存器相对寻址-基地址+位移量

操作数的有效地址由一个寄存器与一个偏移量相加得到,偏移量(相对量)在指令中给出,范围在0000 ~ FFFFH

可用的寄存器有BX、DI、SI、BP , 与寄存器间接寻址相同。

如::MOV AL, [ BX +10H] MOV AH, [ DI+20H ]

MOV

DL, 30H [ SI ]

MOV DH, 40H [ BP ]

PA = ( DS )×10H + (SI)或(BX)或(DI)+偏移量

PA = ( SS )×10H + ( BP )+偏移量

例1:MOV AX , [ BX+30H ]

若( DS ) = 2000H,( BX ) = 1000H

则内存操作数的物理地址为:PA = ( DS )×

指令执行后:(AX) = (21030H) = 8976H

(4)基址加变址寻址-Index+Dsplacement

操作数的有效地址由一个基址寄存器与一个变址寄存器之和给出。可用的基址寄存器为BX、BP,变址寄存器为SI 、DI

如MOV AL,[ BX+SI ]

MOV AX,[ BX][DI ]

MOV DL,[ BP+SI ]

MOV DX,[ BP][DI ]

默认段寄存器由基址寄存器决定。

① 基址寄存器为BX ,默认段寄存器为DS PA = ( DS )×10H + ( BX ) +(SI)或(DI) ② 基址寄存器为BP ,默认段寄存器为SS

PA = ( SS )×10H + ( BP ) +(SI)或(DI)

例1: MOV AX , [ BX + SI ]

若 ( DS ) = 4000H ,( BX ) = 2000H ,( SI ) = 100H

则内存操作数的物理地址为: PA = ( DS )×

指令执行后: (AX) = (42100H) = 2345H

(5)相对基址加变址寻址 – Base+ Index+Dsplacement 基址寄存器有 BX 、BP ,变址寄存器有 SI 、DI 如

MOV AL, [ BX+SI +10H] MOV AX ,20H[ BX][DI ]

MOV DL ,[ BP+SI+30H ] MOV DX ,40H[ BP][DI ]

例: MOV AX , [ BX + SI + 10H ]

若 ( DS ) = 4000H ,( BX ) = 3000H ,( SI ) = 200H

则内存操作数的物理地址为:

PA = ( DS )×10H + ( BX ) + ( SI ) + 10H = 43210H 指令执行后:(AX) = (43210H) = 8877H

除此之外,其他方式均错误。如下: MOV CL, [AX] MOV AX, [DX] MOV AL, [CX] MOV CX, [BP+BX] MOV AH, [SI+DI] MOV BL, [AX+CX]

3.48086的通用指令

指令系统可分为六个功能组:数据传送、算术运算、逻辑运算、串操作、控制传送、处理器控制。

3.4.1数据传送指令

数据传送是最基本、最重要的一种操作,实际程序中,使用的比例最高。

寄存器——寄存器

寄存器——内存单元

寄存器——I/O端口

按传送内容,可分为四类:

(1). 通用数据传送MOV, PUSH, POP, XCHG, XLAT

(2). 地址传送LEA, LDS, LES

(3)标志传送PUSHF, POPF, LAHF, SAHF

(4)输入输出传送(累加器专用传送指令)IN, OUT

▲特点:

(1). 除POPF、SAHF外,其他传送指令对标志位均无影响;

(2). 唯一允许以段寄存器做操作数的指令,且只有MOV、PUSH、POP这三条允许。

1. MOV指令

格式MOV dst,src

执行( dst ) ←( src )

MOV传送指令的使用:

①reg/mem/segreg ←reg 通用寄存器/存储器/段寄存器←通用寄存器(8个)

MOV AL , BL

MOV [ BX ] , AL

MOV DS , AX

②reg/segreg ←mem 通用寄存器/段寄存器←存储器

MOV AL , [ BX ]

MOV DS , [ BX+SI ]

③reg/mem ←segreg 通用寄存器/存储器←段寄存器

MOV BX , CS

MOV [ BX ] , DS

④reg/mem ←data 通用寄存器/存储器←立即数MOV Al , 9

MOV BX , OFFSET buffer

MOV [ value ] , 0

MOV WORD PTR [ BX ] , 1

MOV指令特点及注意事项:

1)双操作数指令(注意双操作指令的特点)

2)可进行字节或字传送

3)不允许存储器传送到存储器

MOV [ BX ] ,value 错存储器不能传给存储器!MOV [DI],[SI] 错

MOV AX ,value 对

MOV [ BX ] ,AX 对

MOV AL ,[SI] 对

MOV [ DI ] ,AL 对

4)可对DS、ES、SS 赋值,但不允许立即数直接传送给段寄存器MOV DS,AX

MOV ES ,[BX]

MOV DS,1000H 错

MOV AX ,1000H

5)CS不能做目的操作数, 不能通过传送指令改变CS的值

MOV CS ,AX 错

6)不允许段寄存器传送到段寄存器

MOV ES ,DS 错

MOV AX ,DS

MOV ES ,AX

2 交换指令

格式XCHG DOPD,SOPD

执行(DOPD) ——(SOPD)

reg ——reg reg——mem mem——reg

例1 XCHG AX, BX 字操作

执行前(AX)= 1122H (BX)= 3344H

执行后(AX)= 3344H (BX)= 1122H

例2 XCHG AH, BL 字节操作

执行前(AX)= 1122H (BX)= 3344H

执行后(AX)= 4422H (BX)= 3311H

注意事项:

●双操作数指令

●可进行字或字节操作

●不允许对立即数、段寄存器做操作数

XCHG AX, 4 错

XCHG BX, DS 错

3 堆栈操作指令

(1)入栈操作Array格式PUSH DOPD

执行分两步:P54

执行(SP)←(SP)- 2

(SS:SP)←(DOPD)

特点:

① 单操作数指令

② 操作数为16位,可以是reg/segreg/mem,(CS除外)不可以是data

reg : AX, BX, CX, DX, SI, DI, BP, BX

segreg : DS, ES, SS

mem 字类型(或双字) 例: PUSH AX

跳上去(低位)再把AX 的货放进去

若执行前: (SS )= 2000H (SP )= 1002H

(SS :SP )= 21002H (AX )= 1234H

则执行后: (SS )= 2000H (SP )= 1000H (SS :SP )= 1234H (AX )= 1234H

(2) 出栈操作

格式 POP DOPD

执行 (DOPD ) ← (SS :SP ) (SP ) ←(SP )+ 2 特点:

③ 单操作数指令

④ 操作数为16位,可以是reg/segreg/mem, 不可以是data

例: POP BX

把货先复制给BX 再跳下来(高位) 若执行前: (SS )= 2000H (SP )= 1000H

SS:SP 2000:1002

指令执行前

(AX)=1234h

SS:SP 2000:1000

指令执行后

(AX)=1234h

SS:SP SS:SP (DOPD t)

SS:SP 2000:1000

指令执行前

(BX)=5678h

(SS :SP )= 1234H (BX )= 5678H 则执行后: (SS )= 2000H

(SP )= 1002H (SS :SP )= 2010H

(BX )= 1234H ● PUSH 和POP 指令只能对字操作。 PUSH AL 错

POP BYTE PTR [BX] 错

● 可以对段寄存器操作,POP CS 非法,PUSH CS 合法 PUSH DS PUSH CS POP ES POP CS 错 4 输入输出指令 IN 、OUT 、

1)IN 输入指令

把一个字节或一个字由一个输入端口(port ),传送至AL 或AX 。 IN AL(AX) , n ;端口地址0~255 IN AL(AX) , DX ;浮动地址 64k 2)OUT 输出指令

把AL 中的一个字节或AX 中的一个字,传送至一个输出端口。 OUT n , AL(AX) OUT DX , AL(AX)

4 地址传送指令LEA 、LDS 、LES LEA 有效地址传送 格式 LEA reg, mem 执行 (reg ) ← mem 的EA

即 寄存器 ← 存储器操作数的偏移地址

SS:SP 2000:1002

指令执行后 (BX)=1234h

Buffer

内存

例1:buffer是一个符号地址表示的内存操作数(变量)。

LEA BX,buffer

若变量buffer的偏移地址= 1000H,执行后( BX ) = 1000H

等价于MOV BX ,OFFSET buffer

注意:OFFSET是汇编程序提供的一个操作符,不是CPU的指令。

例2: 将buffer为首的4个字节内存内容相加,存放在AL中。

MOV AX, SEG buffer 取段地址

MOV DS, AX

LEA BX, buffer

MOV CX, 4

MOV AL, 0

Exit:ADD AL, [BX]

INC BX

DEC CX ; (cx) =(cx) -1

JNZ exit ;ZF ≠0, 即CX ≠0, 转至exit

说明:

①操作符SEG 的作用是取变量的段地址。执行完前两条指令后,

(DS)=buffer的段值;

②操作符OFFSET的作用是取变量的偏移地址,执行完LEA BX, buffer,

(BX)为buffer的偏移地址;

③操作数[BX]是以DS为段值,BX为偏移值的内存单元。

LEA reg, mem的特点及注意事项:

●目的操作数reg应是16位通用寄存器

LEA ES, [BX] 错

LEA AL, buffer 错

LEA 6, [BX+SI] 错

LEA [DI], buffer 错

●源操作数应是存储器操作数

LEA BX, AX 错

传送的是内存单元的有效地址,与其内容无关。

1)L DS r, src

执行:(EA)给r,(EA+2)给DS

2)L ES r, src

执行:(EA)给r,(EA+2)给ES

二、算术运算指令PPT

特点:

①带符号数用补码表示

如:MOV AX, -1 等价于MOV AX, 0FFFFh 负数补码为零

②对加、减运算,不区分无符号数、带符号数;对乘、除运算,区分无符

号数、带符号数

③可进行字节或字操作

④影响状态标志

⑤十进制运算方法

1. 加法运算指令PPT

① ADD 、ADC 为双操作数指令,适用于所有的寻址方式。 ② INC 为单操作数指令

③ INC 指令除不影响CF 外,6个状态标志AF CF OF PF SF ZF 均据结果设置,主要用于循环程序中修改地址指针和循环次数,指令的操作数可以在通用寄存器中,也可以在内存中。 ④ ADC 带进位加法,实现多字节运算 例1:字节运算 MOV AL, 64H ADD AL, 64H 即 01100100 + 01100100 = 11001000

分析运算后,各标志位的状态。 C=0; A=0; Z=0; P=0; S=1; O=1 例2 INC AL

执行前 (AL )= FFH

FFH

+ 01H

11 = 00H

执行后: (AL )=00H , CF=不变,OF=0,ZF=1, PF=1, SF=0, AF=1

。 例3 value 是一个字变量, OFFSET value = 1000H , (DS )=2000H ,

(21000H )=01FFH 。 INC value

或写成: INC [value]

value

01FFH

+ 0001H

11

=0200H

执行后:(21000H)=0200H,CF=不变,OF=0,ZF=0,SF=0, AF=1,PF=0

注意是内存单元内容加1,而非地址加1。

例4 将buffer为首的4个字节内存内容相加,存放在AL中。

MOV CX, 4

LEA BX, buffer

MOV AL, 0

exit: ADD AL, [BX]

INC BX

DEC CX

JNZ exit

若编程如下,不能实现,为什么?

MOV CX, 4

MOV AL, 0

exit: ADD AL, [buffer]

INC buffer

DEC CX

JNZ exit

实现的是1A+1B+1C+1D,指令INC buffer,将buffer指向的内容加1,

而不是地址buffer加1

例5 两双字相加0002F365H + 0005 E024 H = ?

分析:8086/8088只能按字节或字相加,位数在字以上的操作数,先加低位,再加高位,加高位时加入从低位产生的进位。

MOV AX,F365H ①ADD AX,E024H ②MOV BX,0002H ③ADC BX,0005H ④value

buffer

执行完①、②:(AX)= D389H CF=1, OF=0, SF=1, ZF=0

执行完③、④:(BX)= 0008H CF=0, OF=0, SF=0, ZF=0

结果存放在:0008(BX)D389(AX)

BCD码(Binary Coded Decimal )

① 用二进制编码表示十进制数。

② 常用8421 BCD码,与十进制数码对应关系:

例:48的BCD码为(0100 1000)BCD

根据在内存的存放形式,分压缩BCD码和非压缩BCD码:

①压缩BCD码(一字节存放2个BCD码。)即组合十进制数

如2148 的压缩BCD码为:

( 0010 0001 0100 1000 )压缩BCD 在内存中占2字节

②非压缩BCD码(一字节存放1个BCD码。)即未组合十进制数

如2148 的非压缩BCD码为:

( 00000010 00000001 00000100 00001000 ) 非压缩BCD

在内存中占4字节

当数据用压缩或非压缩BCD码表示时,为使运算的结果仍为BCD码表示,需对结果进行调整:十进制运算= 二进制运算+ 十进制调整。

+ (0000 1001)压缩BCD = (0001 0111 )压缩BCD

例:(0000 1000 )

压缩BCD

计算过程:二进制运算和十进制调整(加6)

具体调整过程P65-66,学生自己看。

3)AAA分离BCD码调整指令

将AL中的结果调整为分离BCD码

两个未组合的十进制数可以直接用ADD指令相加,但要得到正确的未组合的十进制数,必须在加法指令以后,紧接着用一条AAA指令加以校正,于是在累加器中就可以得到正确的结果。

例:MOV AH , 0

ADD BL , CL

AAA

MOV AL , BL

4)D AA组合BCD码调整指令第五版书P65 举例

例:若有两个多字节数NA和NB,每一个是16位十进制数,NA放在以FIRST 开始的存储区中,NB放在以SECOND开始的存储区中,都是低字节在前。编程将相加以后的和放在自THIRD开始的存储区中。

分析:每个是16位十进制数,十进制数在机器中用(压缩)BCD码表示,一个字节可以表示两位十进制数,因此16位十进制数用8个字节表示。做8次加法。

MOV BX, OFFSET FIRST

MOV SI, OFFSET SECOND

MOV DI, OFFSET THIRD

MOV CX, 8

CLC ; 标志位C清零

AGAIN: MOV AL, [BX]

ADC AL, [SI]

DAA

MOV [DI], AL

INC BX

INC SI

INC DI

DEC CX

JNZ AGAIN ;CX不为0时循环

JNC FINISH ;结果不产生进位时结束

MOV [DI], 01H

FINISH: HLT

2. 减法运算指令PPT

①SUB、SBB、 CMP为双操作数,DEC、NEG为单操作数

②SBB为带进位减法

③除DEC不影响CF标志外,6个状态标志AF CF OF PF SF ZF均据结果

置位

④NEG求补运算,。等价于用0减去操作数。其对标志位的影响,由0减

去该操作数的过程决定

例1 编程完成2D04H – 3AB0H

MOV AX ,2D04H

SUB AX ,3AB0H

2D04H 0010 1101 0000 0100

- 3AB0H - 0011 1010 1011 0000

1 1 1111 1 1 111

= F254H = 1111 0010 0101 0100

执行后: (AX)=0F254H CF=1,OF=1,SF=1,ZF=0,AF=1,PF=1

例2 value 是一个字节变量,OFFSET value = 1000H,(DS)=2000H,

(21000H)=00H

DEC value

执行后:(21000H)=0FFH

CF=不变,OF=1,ZF=0,SF=1

00 H - 01 H 11 FFH

PF=1,AF=1

注意:是内存单元内容减1,而非地址减1。

例3 MOV AH, 80H

NEG AH

00 H 0000 0000 B

- 80 H - 1000 0000 B

1 1

= 80H = 1000 0000B

执行后:(AH)=80H CF=1,OF=1,ZF=0,SF=1, PF=0,AF=0

例4 用指令完成两双字相减运算

0546 7A70H

- F001 A543H

MOV AX,7A70H

SUB AX,A543H

MOV BX,0546H

SBB BX,F001H

1)A AS分离BCD码减法调整指令

2)D AS组合BCD码减法调整指令

3)C MP oprd1, oprd2 ; (oprd1) - (oprd2)

①比较指令CMP,进行两操作数相减操作,但只影响标志值,不影响操作数

(减的结果不保存)

②利用CMP执行后的标志值,比较两操作数之间的关系

CMP A, B

①据ZF判断两数是否相等

ZF=1 两数相等, A = B;ZF=0 两数不等, A ≠B

②据ZF和CF判断两无符号数关系

CF= 1 ,A低于B;CF= 0,A高于等于B

CF=1或ZF=1,A低于等于B;CF=0且ZF=0,A高于B

例5 将AX和BX中较大的无符号数,存于AX中

CMP AX, BX ;比较

JAE above ;高于等于则跳转

XCHG AX, BX ;低于则交换

above: 、、、

③用ZF、SF 和OF判断两带符号数关系

●不溢出情况,

OF=0, SF=0 A≥B

OF=0, SF=1 A< B

●溢出情况,(由符号位可决定是否溢出)

正- 负= 负,结果SF = 1, OF=1,但,正> 负,知A > B 负- 正= 正,结果SF = 0, OF=1,但,负< 正,知A < B OF=1, SF=1 A> B

OF=1, SF=0 A< B

例6 将AX和BX中较大的带符号数,存于AX中

CMP AX, BX ;比较

JGE great ;大于等于则跳转

XCHG AX, BX ;小于则交换

great: 、、、

例题:第五版书P64

3. 乘法指令

1)MUL src

2)IMUL src

①单操作数指令

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

指令系统和汇编语言程序的设计实验

第二章指令系统和汇编语言程序设计实验 本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法, 目的在于通过这些实验可以使学生巩固所学知识, 加深对 MCS-51单片机部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。 第一节指令系统实验 实验一熟悉键盘操作及数传指令编程设计 一、实验目的 1.熟悉软件模拟调试的环境及键盘操作。 2.掌握汇编语言程序设计的方法,加深对指令的理解。 3.学会软件模拟调试和察看修改观察项的方法。 二、实验容 印证数据传送指令的功能、寻址方式以及 PC 指针、 SP 指针、 DPTR 指针、Ri 指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤 1.进入调试软件环境,输入源程序; 2.汇编源程序; 3.用单步方式运行程序; 4.检查并记录各寄存器和存储单元容的变化。 四、程序清单

1. 部 RAM 数据传送 需要查看的数据有 30H,31H,A,R0等。 ORG 0000H MOV R0,#30H MOV 30H,#45H MOV 31H,#46H MOV R2,30H MOV 02H,31H MOV A,#87H MOV 0E0H,30H MOV 30H,A MOV 31H,R0 SJMP $ END 2. 外部数据传送 需要查看的数据有外部数据存储器单元 2000H ,外部程序存储器单元2001H 。 ORG 0000H MOV A,#89H MOV DPTR,#2000H

MOVX DPTR,A INC DPTR CLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END 3. 堆栈操作 需要查看的数据有 50H 、 51H 、 A 及 SP 指针和堆栈区中数据随 PUSH 和POP 指令执行后的变化情况和数据的存放次序等。 1 可用于保护现场和恢复现场的程序 ORG 0000H MOV SP,#5FH MOV 50H,#3BH MOV 51H,#2FH MOV A,#12H

第4章指令系统层习题参考解答-汇编语言与计算机组成原理 答案

1.什么是“程序可见”的寄存器? 程序可见寄存器是指在用户程序中用到的寄存器,它们由指令来指定。 2. 80x86微处理器的基本结构寄存器组包括那些寄存器?各有何用途? 基本结构寄存器组按用途分为通用寄存器、专用寄存器和段寄存器3类。 通用寄存器存放操作数或用作地址指针;专用寄存器有EIP和EFLAGS,分别存放将要执行的下一条指令的偏移地址和条件码标志、控制标志和系统标志;段寄存器存放段基址或段选择子。 3.80x86微处理器标志寄存器中各标志位有什么意义? 常用的7位: CF进位标志: 在进行算术运算时,如最高位(对字操作是第15位,对字节操作是第7位)产生进位或借位时,则CF置1;否则置0。在移位类指令中,CF用来存放移出的代码(0或1)。 PF奇偶标志: 为机器中传送信息时可能产生的代码出错情况提供检验条件。 当操作结果的最低位字节中1的个数为偶数时置1,否则置0。 AF辅助进位标志: 在进行算术运算时,如低字节中低4位(第3位向第4位)产生进位或借位时,则AF置1;否则AF置0。 ZF零标志:如指令执行结果各位全为0时,则ZF置1;否则ZF置0。 SF符号标志:其值等于运算结果的最高位。 如果把指令执行结果看作带符号数,就是结果为负,SF置1;结果为正,SF置0。 OF溢出标志: 将参加算术运算的数看作带符号数,如运算结果超出补码表示数的范围N,即溢出时,则OF置1;否则OF置0。 DF方向标志: 用于串处理指令中控制处理信息的方向。 当DF位为1时,每次操作后使变址寄存器SI和DI减小;当DF位为0时,则使SI和DI增大,使串处理从低地址向高地址方向处理。 4.画出示意图,简述实模式下存储器寻址的过程。 20位物理地址如下计算(CPU中自动完成):10H×段基址+偏移地址=物理地址 5. 画出示意图,简述保护模式下(无分页机制)存储器寻址的过程。 采用对用户程序透明的机制由选择子从描述子表中选择相应的描述子,得到欲访问段的段基址、段限等有关信息,再根据偏移地址访问目标存储单元。

8086指令系统精析解析

8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H

8086汇编指令手册

8086汇编指令手册 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. —— BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH内容装入标志寄存器.

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

寻址方式及指令系统习题与解答 计算机科学与工程学院黄洪波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汇编指令大全.

标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器 CF 当执行一个加法(减法使最高位产生进位(借位时 CF=1 否则 CF=0 PF 指令执行的结果低 8位有偶数个一时, CF=1 否则 CF=0 AF 当执行一个加法(减法使运算结果低 4位向高 4位有进位(借位时 AF=1 否则 AF+0 ZF 当前运算结果为零, ZF=1 否则 ZF=0 SF 符号标志位 OF 溢出标志位 DF 方向标志位 IF 中断允许位 IF=1时响应外部中断

TF 跟踪标志位 操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式: 1 寄存器寻址例:INC AX ; MOV AX , BX 2 寄存器间接寻址 (寄存器只能是 BX , DI , SI , BP ; [PA=(BX 、 DI 、 SI +DS》 4 或 BP+SS》4] 3 寄存器相对寻址 4 基址变址寻址 5 相对基址变址寻址 6 直接寻址 7 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1 数据传送指令 mov 注意: 不允许在两个存储单元之间直接传送数据

不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除 CS 外的段寄存器 2 入栈(出栈指令 PUSH (POP 注意: PUSH 操作数不能是“立即数” POP 操作数不能是段寄存器 CS 不影响标志位 先进后出 单操作符 3 交换指令 XCHG 注意:

习题解答

第1章汇编语言基础知识习题解答 1.1 什么是汇编语言?汇编语言的特点是什么? 答:为了克服机器语言难以记忆、表达和阅读的缺点,人们采用具有一定含义的符号作为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。汇编语言是汇编指令集、伪指令集和使用它们规则的统称。汇编语言的特点是: (1)执行速度快。(2)程序短小。 (3)可以直接控制硬件。 (4)可以方便地编译。 (5)辅助计算机工作者掌握计算机体系结构。 (6)程序编制耗时,可读性差。(7)程序可移植性差。 1.2 把下列十进制数转换成二进制数、八进制数、十六进制数。 ① 127 ② 1021 ③ 0.875 ④ 6.25 答: ① 1111111B;177Q;7FH ② 1111111101;1775Q;3FDH ③ 0.111 B;0.7Q;0.EH ④ 110.01B;6.2Q;6.4H 1.3把下列二进制数转换成十进制数。 ① 1001.11 ② 101011.10011 ③ 111.011 ④ 1011.1 答: ① 9.75D ② 43.59375D ③ 7.375D ④ 11.5D 1.4 把下列八进制数转换成十进制数。 ① 573.06 ② 75.23 ③ 431.7 ④ 123.45 答: ① 379.09375D ② 61.296875D ③ 281.875 ④ 83.578125 1.5 把下列十六进制数转换成十进制数。 ① 0D5.F4 ② 8BA.7C ③ 0B2E.3A ④ 6EC.2D 答: ① 213.953125D ②2234.484375 ③2862.2265625 ④1772.17578125 1.6 把下列英文单词转换成ASCII编码的字符串。 ① Upper ② Blow ③ Computer ④ What 答: ① 55H,70H,70H,65H,72H ② 53H,6CH,6FH,77H ③ 43H,6FH,6DH,70H,75H,74H,65H,72H ④ 57H,68H,61H,74H 1.7求下列带符号十进制数的8位基2码补码。 ① +127 ②?2 ③?128 ④ +2 答: ① 01111111B ② 11111110B ③ 10000000B ④ 00000010B 1.8 求下列带符号十进制数的16位基2码补码。 ① +628 ②?9 ③?1234 ④ +3249 答: ① 0000001001110100B ② 1111111111110111B ③ 1111101100101110B ④ 110010110001B 1.9 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十 六进制数表示其运算结果。 ① 68+(―53)② 68―53 ③ 68―(―53)④(―68)―53 答: ① 0FH ②0FH ③ 0A1H ④87H 1.10 汉字在输入、存储、输出过程中所使用的汉字编码是否一样?使用的是什么编码? 答: 在汉字的输入、存储、输出过程中所使用的汉字编码是不一样的,输入时有输入编码,存储时有汉字机内码,输出时有汉字字形码。

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

常用8086汇编指令(彩色版)

8086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为:MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input)输入 OUT(Output)输出 XLAT(Translate)换码 这组指令只限于使用累加器AX或AL传送信息. .IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为:IN AL,DX(字节) IN AX,DX(字) 执行的操作:AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT输出指令 长格式为:OUT PORT,AL(字节) OUT PORT,AX(字)

执行的操作:(PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为:OUT DX,AL(字节) OUT DX,AX(字) 执行的操作:((DX))<-(AL)(字节) ((DX)+1,(DX))<-AX(字) 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息. .XLAT换码指令 格式为:XLAT OPR 或:XLAT 执行的操作:(AL)<-((BX)+(AL)) 3.有效地址送寄存器指令 LEA(Load effective address)有效地址送寄存器 LDS(Load DS with Pointer)指针送寄存器和DS LES(Load ES with Pointer)指针送寄存器和ES .LEA有效地址送寄存器 格式为:LEA REG,SRC 执行的操作:(REG)<-SRC 指令把源操作数的有效地址送到指定的寄存器中. .LDS指针送寄存器和DS指令 格式为:LDS REG,SRC 执行的操作:(REG)<-(SRC) (DS)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器. .LES指针送寄存器和ES指令 格式为:LES REG,SRC 执行的操作:(REG)<-(SRC) (ES)<-(SRC+2) 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器. 4.标志寄存器传送指令 LAHF(Load AH with flags)标志送AH SAHF(store AH into flags)AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags)标志出栈 .LAHF标志送AH

习题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,给出下面各指令或指令组执行后相应寄存器/存储单元的结果。

8086 汇编语言中断程序设计

汇编语言程序设计实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

LEA DX,FNAME MOV CX,0 ;语句1 INT 21H JC EXIT MOV FNUM,AX MOV BX,AX ;语句2 MOV CX,100 MOV AH,40H LEA DX ,BUF INT 21H MOV BX,FNUM MOV AH,3EH INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START 使用相应的文本编辑器建立文件LAB7.asm,内容如上所示。 2.汇编并运行此程序后,在当前目录建立的文件名是什么?其内容是什么? 1>汇编: C:\masm> masm lab7; 2>连接: C:\masm> link lab7; 3>运行: C:\masm> lab7 3.若将语句1 改为mov cx,1,则运行情况与前面会有什么区别? 4.若将语句1 改为mov cx,2,则运行结果同上会有什么不同?并简要说明此语句的作用. 5.若将语句2 改为mov bx,1,则运行结果会有什么不同?简要说明则语句的作用. 实验二:编写0 号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。源程序下: assume cs:code code segment start: mov ax,cs mov ds,ax

mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例程cld rep movsb mov word ptr es:[0],200h mov word ptr es:[2],0 ;设置中断向量表 mov dx,0ffffh mov bx,1 ;测试一下 div bx mov ax,4c00h int 21h do:jmp short dostart db 'divide error!' dostart: mov ax,0 mov ds,ax mov si,202h mov ax,0b800h mov es,ax mov di,160*12+60 mov cx,13 s: mov al,ds:[si] mov ah,15 mov es:[di],ax inc si inc di inc di loop s mov ax,4c00h int 21h doend:nop code ends end start

第3章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

第二章8086习题答案

第二章8086习题答案

微机原理第二章习题与分析解答 1.单项选择题 (1)8086工作最大方式时应将引脚MN/MX接() A.负电源 B.正电源 C.地 D.浮空 分析:8086规定工作在最小方式下MN/MX接+5V,工作在最大方式下MN/MX 接地。 答案:C (2)8086能寻址内存储器的最大地址范围为() A.64KB B.1MB C.16MB D.16KB 分析:8086有A 0~A 19 20条地址总线,220=1MB。 答案:B (3)在总线周期,8086CPU与外设需交换() A.地址信息 B.数据信息 C.控制信息 D.A、B、C 分析在总线周期,CPU必须发出地址信息的控制信息以后,才能实现与外设进行交换数据。 答案:D (4)8086用哪种引脚信号来确定是访问内存还是访问外设() A.RD B.WR C.M/IO D.INTA 分析:引脚信号M/IO是Memory or Input Output的缩写,当M/IO=0时,用以访问外设;当M/IO=1,用以访问外设。 答案:C (5)在8086指令系统中,下列哪种寻址方式不能表示存储器操作数()A.基址变址寻址B.寄存器寻址C.直接寻址D.寄存器间接寻址 分析:8086指令系统共有七种寻址方式,只有立即寻址方式和寄存器寻址方式不是表示存储器操作数的。 答案:B (6)当CPU时钟频率为5MHz,则其总线周期() A.0.8 s B.500ns C.200ns D.200μs 分析:时钟周期T=1/?=200ns,而一个总路线周期通常由4个T状态组成,有4╳T=4╳200ns=0.8μs. 答案:A (7)8086工作在最大方式下,总路线控制器使用芯片() A.8282 B.8286 C.8284 D.8288 分析:在最大方式下,系统中主要控制信号是由总路线控制器产生,而只有芯片8288才有这方面的功能。 答案:D (8)取指令物理地址=() A.(DS)╳10H+偏移地址 B.(ES)╳10H+偏移地址 C.(SS)╳10H+(SP) D.(CS)╳10H+(IP) 分析:每当8086CPU取指令时,总是根据CS:IP的所指的存贮单元去取指令。 答案:D (9)一个数据的有效地址是2140H、(DS)=1016H,则该数据所在内存单元

8086汇编指令表

8086汇编指令表

MOV MOV DST,SRC DST≠CS、IP和imm 不影响 标志位 MOV [9AF0H],AL MOVS MOVS mem, mem MOVSB/W 不影响 标志位 字符串传送ES:DI←(DS:SI) SI←(SI)(+/-)1 DI←(DI)(+/-)1 MOVS ES:BYTE PTR[DI], DS:[SI] MUL MUL r/m8 设置CF OF S Z A P无法预 测 无符号乘法:AX←AL*r/m8 MUL CL MUL r/m16 无符号乘法:DX:AX←AX*r/m16 MUL CX NEG NEG reg/mem CF OF SF ZF AF PF 求补:取反加一 0-(DST) NEG CL NOP NOP 不影响空操作NOP NOT NOT reg/mem 不影响按位取反NOT CL OR 同AND PF SF ZF CF=OF=0 逻辑或 OR AL,0FH (不变\置1) OUT OUT imm8,AL/AX/EAX 不影响 标志位 将AL/AX/EAX输出到imm8指定端 口 OUT 0FFH,AL OUT DX,AL/AX/EAX 将AL/AX/EAX输出到DX指定的端口OUT DX,AL POP POP DST DST!=imm & CS 不影响 标志位 DST←((SP)+1,(SP)) SP←(SP)+2 POP WORD Ptr [87EAH] POPF POPF 设置所有标志位从堆栈中弹出16位标志寄存器POPF PUSH PUSH SRC 8086 SRC!=imm 不影响 标志位 SP<--(SP)-2 ((SP)+1,(SP))←(SRC) [SP循 环] PUSH WORD Ptr [87EAH] PUSHF PUSHF 不影响压栈16位标志寄存器PUSHF RCL 同SHL 同ROL 带进位循环左移 RCL AL,1 RCR 同SHL 同ROL 带进位循环右移 RCR AL,1 ROL 同SHL 移一位后符号位 改变则OF=1 循环左移: ROL AL,1 ROR 同SHL 同ROL 循环右移: ROR AL,1 REP REP String operation 不影响 标志位 CX=0则终止---CX←(CX)-1 ---串操作---SI/DI增量 REPZ REPE REPE String operation AF CF OF PF SF ZF CX=0||ZF=0则终止 ---CX←(CX)-1 ---串比较---SI/DI增量 REPNZ REPNE REPNE String operation AF CF OF PF SF ZF CX=0||ZF=1则终止--- CX←(CX)-1 ---串比较---SI/DI增量 RET RET 恢复压栈标志位 POP IP[CS] 子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08

指令系统及汇编语言程序设计

第3章指令系统及汇编语言程序设计 一、简答题 1、80C51系列单片机的指令系统有何特点? 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何? 3、访问特殊功能寄存器SFR可以采用哪些寻址方式? 4、访问内部RAM单元可以采用哪些寻址方式? 5、访问外部RAM单元可以采用哪些寻址方式? 6、访问外部程序存储器可以采用哪些寻址方式? 7、为什么说布尔处理功能是80C51单片机的重要特点? 8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问? 9、试根据指令编码表写出下列指令的机器码。 (1)MOV A,#88H (2)MOV R3,50H (3)MOV P1.1,#55H (4)ADD A,@R1 (5)SETB 12H 10、完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指 令序列。 (1)将R0的内容传送到R1; (2)内部RAM单元60H的内容传送到寄存器R2; (3)外部RAM单元1000H的内容传送到内部RAM单元60H; (4)外部RAM单元1000H的内容传送到寄存器R2; (5)外部RAM单元1000H的内容传送到外部RAM单元2000H。 11、11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。试分析执行下列程序段 后上述各单元内容的变化。 MOV A,@R1 MOV @R1,40H MOV 40H,A MOV R1,#7FH 12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH, 试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指 出CY、AC、和OV的值。 (1)MOV A,@R0 (2)ANL 40H,#0FH (3)ADD A,R4 (4)SWAP A (5)DEC @R1 (6)XCHD A,@R1 13、若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、 42H单元中的内容各为多少? MOV A,50H MOV R0,A MOV A,#00H MOV @R0,A MOV A,3BH MOV 41H,A MOV 42H,41H 14、试用位操作指令实现下列逻辑操作。要求不得改变未涉及的位的内容。

第二章8086习题答案

微机原理第二章习题与分析解答 1.单项选择题 (1)8086工作最大方式时应将引脚MN/MX接() A.负电源 B.正电源 C.地 D.浮空 分析:8086规定工作在最小方式下MN/MX接+5V,工作在最大方式下MN/MX 接地。 答案:C (2)8086能寻址内存储器的最大地址范围为() A.64KB B.1MB C.16MB D.16KB 分析:8086有A 0~A 19 20条地址总线,220=1MB。 答案:B (3)在总线周期,8086CPU与外设需交换() A.地址信息 B.数据信息 C.控制信息 D.A、B、C 分析在总线周期,CPU必须发出地址信息的控制信息以后,才能实现与外设进行交换数据。 答案:D (4)8086用哪种引脚信号来确定是访问内存还是访问外设() A.RD B.WR C.M/IO D.INTA 分析:引脚信号M/IO是Memory or Input Output的缩写,当M/IO=0时,用以访问外设;当M/IO=1,用以访问外设。 答案:C (5)在8086指令系统中,下列哪种寻址方式不能表示存储器操作数()A.基址变址寻址B.寄存器寻址C.直接寻址D.寄存器间接寻址 分析:8086指令系统共有七种寻址方式,只有立即寻址方式和寄存器寻址方式不是表示存储器操作数的。 答案:B (6)当CPU时钟频率为5MHz,则其总线周期() A.0.8 s B.500ns C.200ns D.200μs 分析:时钟周期T=1/?=200ns,而一个总路线周期通常由4个T状态组成,有4╳T=4╳200ns=0.8μs. 答案:A (7)8086工作在最大方式下,总路线控制器使用芯片() A.8282 B.8286 C.8284 D.8288 分析:在最大方式下,系统中主要控制信号是由总路线控制器产生,而只有芯片8288才有这方面的功能。 答案:D (8)取指令物理地址=() A.(DS)╳10H+偏移地址 B.(ES)╳10H+偏移地址 C.(SS)╳10H+(SP) D.(CS)╳10H+(IP) 分析:每当8086CPU取指令时,总是根据CS:IP的所指的存贮单元去取指令。 答案:D (9)一个数据的有效地址是2140H、(DS)=1016H,则该数据所在内存单元

相关主题