资源描述
串操作指令特点:
1. 可用前缀使其重复操作;
2. 每操作一次自动修改SI和DI内容,当DF=0时为增量,DF=1为减量;
3. 所有源操作数地址放在SI中,在DS段,串长 ≤ 64K;
所有目的操作数地址放在DI中,在ES段,串长 ≤ 64K;
4. 用重复前缀时,如果条件满足且CX ≠ 0 时重复,每重复一次
CX ← CX–1,否则结束重复;
5. 重复操作时IP不变,中断返回后继续操作。
使用串操作指令时注意:
1. SI ← 源串首(末)址
DI ← 目的串首(末)址;
2. CX ← 串长度;
3. 设DF 值;
4. 选重复前缀;
5. 使用条件重复前缀时,判断结束条件(即 是CX=0 还是ZF=0/1结束)
指令执行时间:
计算机中计时单位:
(1). 指令周期:执行一条指令所花时间;
(2). 总线周期:CPU 每访问一次内存或I/O端口所花时间;
(3). 时钟周期(T周期):计算机主频倒数,用T表达, 即 T=1 / F
1、 试分别阐明下列指令中源操作数和目操作数采用寻址方式:
答案:
目操作数 源操作数
(1) MOV AX,0FFFFH 寄存器 及时
(2) MOV ES,AX 寄存器 寄存器
(3) XOR CL,[100H] 寄存器 直接
(4) ADD [SI],DX 寄存器间 寄存器
(5) MOV ES:[H],CL 直接 寄存器
(6) SUB [BX+SI],1 基+变 及时
(7) ADC AX,[BX+SI+10H] 寄存器 相对基+变
(8) PUSH DS 隐含 寄存器
(9) CLD 隐含
(10) CMP [BP+DI],CL 基+变 寄存器
2、 若(BX)=1123H,(SI)=1968H,位移量=0313H,(DS)=1971H,试拟定由这些寄存器和下列寻址方式产生有效地址和物理地址:
答案:
EA 物址
(1) 直接寻址; 0313H 19A23H
(2) 用BX寄存器间接寻址; 1123H 1A833H
(3) 用BX寄存器相对寻址; 1436H 1AB46H
(4) 用BX和SI基址变址寻址; 2A8BH 1C19BH
(5) 用BX和SI相对基址加变址寻址。 2D9EH 1C4AEH
3、 持续执行如下指令,并在空格中填写执行指令成果。
答案:
MOV AX,2060H AL=60H AH=20H CF=
MOV DS,AX DS=2060H AH=20H CF=
ADD AL,AH AL=80H AH=20H CF=0
INC AX AL=81H AH=20H CF=0
MOV DX,512 DL=00H DH=02H CF=0
SUB AX,DX AL=81H AH=1EH CF=0
第3章:汇编语言程序设计
1. 本章学习规定
(1). 应熟悉内容:汇编语言格式、语句行构成。
(2). 应掌握内容: 批示性语句、指令性语句及互相区别、作用。
(3). 应熟悉掌握内容:各种构造汇编语言程序设计办法,特别是分支构造和循环构造程序特点和设计。
2. 本章重点难点分析:伪指令、程序设计、子程序中参数通过堆栈传递较难。通过看例题、做作业和上机实习解决。
如:汇编程序是将由助记符号所编写汇编语言源程序转换为计算机能直接执行目的程序软件,即:
汇编程序
连接程序
目的程序
可执行文献
汇编语言源程序
.ASM
MASM .OBJ LINK .EXE
上图可看出汇编语言源程序(扩展名为 .ASM)通过“汇编程序”汇编后生成二进制编码目的程序(.OBJ),再通过“连接程序”生成可执行文献(.EXE)便可以上机执行或使用DEBUG程序进行调试。
而批示性语句(伪指令)是告诉汇编程序如何将汇编语言源程序转换为目的程序语句,在可执行目的程序生成后软件中,伪指令是看不见。如:SEGMENT是表达一种段开始,ENDS表达段结束;
而ASSUME告诉汇编程序,将某一种段寄存器设立为存储某一种逻辑段段址,即明确指出源程序中逻辑段与物理段之间关系。当汇编程序汇编一种逻辑段时,即可运用相应段寄存器寻址该逻辑段中指令或数据。也就是说ASSUME是建立一种段寄存器与段名对照表,汇编时使汇编程序能找到本段属于哪个段寄存器,在此对照表中所浮现存储器操作数,寻址时只需给出偏移地址,否则还应给出段地址。 核心字NOTHING表达取消前面用ASSUME伪操作对这个段寄存器设立。
使用ASSUME语句,仅仅告诉汇编程序关于段寄存器与定义段之间相应关系。但它并不意味着汇编后这些段地址已装入了相应段寄存器中,这些段地址真正装入,仍需要用程序来完毕,且这 4个段寄存器装入略有不同。
3. 本章典型例题分析:
【例1】若从0200H单元开始有100个数,编一种程序检查这些数,正数保持不变,负数都取补后送回。
DATA SEGMENT
ORG 0200H
STRING DB 4 DUP (-55,5 DUP(6,-10,-8,9),2 DUP(-4,0))
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START PROC FAR
BEGIN: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV CX,100
LEA SI,STRING
AGAIN: MOV AL,[SI]
AND AL,AL
JNS OVER ;AL>0,跳至OVER
NEG AL ;AL<0,对AL求补
OVER: MOV [SI],AL
INC SI
LOOP AGAIN
INT 3
RET
START ENDP
CODE ENDS
END BEG
【例2】数据块间搬移程序。
程序规定把内存中一数据块(称为源数据块)传送到另一存储区(称为目数据块)。图4-11给出源数据块和目数据块在存储器中也许3种状况:两块分离和有某些重叠。对于两个数据块分离状况,如图4-11(a),数据传送从数据块首址开始,或者从数据块末址开始均可。但对于有某些重叠状况,则要加以分析,否则重叠某些某些会因“搬移”而遭破坏,从图4-11(b)和(c)可以得出如下结论:
当源数据块首址<目块首址时,从数据块末地址开始传送数据。
当源数据块首址>目块首址时,从数据块首地址开始传送数据。
流程图如图4-12所示,
┇
┇
┇
┇
┇
┇
┇
┇
┇
┇
┇
00000H 00000H 00000H
源数
据块 源数 目
据块 数据块
目 源数
目 数据块 据块
数据块
FFFFFH FFFFFH FFFFFH
(a) (b) (c)
图4-11 数据块之间三种状况
开 始
SI←源数据块首址
DI←目数据块首址
CX←搬家字节数
(SI)>(DI)?
N
Y
SI←(SI)+(CX)-1
DI←(DI)+(CX)-1
(DI)←[(SI)]
SI←(SI)+1
DI←(DI)+1
SI←(SI)-1
DI←(DI)-1
DI←[(SI)]
DI←[(SI)]
DI←[(SI)]
(CX)=0?
(CX)=0?
结 束
N
N
Y
Y
图 4-12
程序如下:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV CX,0010H ;取搬家字节数(16个字节)
MOV SI,3100H ;取源块首址
MOV DI,3200H ;取目块首址
CMP SI,DI ;从首址开始?
JA A2 ;是,转移
ADD SI,CX ;否,以末地址开始搬家
ADD DI,CX
DEC SI
DEC DI
A1: MOV AL,[SI] ;从末址开始搬家
MOV [DI],AL
DEC SI
DEC DI
DEC CX
JNE A1
JMP A3
A2: MOV AL,[SI] ;从首址开始搬家
MOV [DI],AL
INC SI
INC DI
DEC CX
JNE A2
A3: MOV AH,4CH
INT 21H
CODE ENDS
END START
4. 本章作业(带答案):
2、若在自H单元开始有一种1000个字节数据块,要把它传送到自2200H开始存储区中去,用如下三中办法,分别编制程序:
(1) 不用串操作指令。
(2) 用单个传送串操作数据传送指令。
(3) 用带重复前缀串操作数据传送指令。
程序如下:
DATA SEGMENT
ORG H
N1 DB n1,n2,…n1000
N2 EQU H+1000–1
CON EQU 1000
DATA ENDS
STACK SEGMENT STACK ‘STACK’
DW 100DUP(?)
STACK ENDS
CODE SEGMENT
ORG 1000H
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN PROC
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,N1+1000–1 ; (2) ; (3)
MOV DI,N2
MOV CX,CON ;STD
L1: MOV AL,[SI] ;MOVSB ;REP MOVSB
MOV [DI],AL
DEC SI
DEC DI
LOOP L1 ;LOOP L1
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END START
3、若在存储器中有数a、b、c、d(它们持续存储),编写一种程序实现:
((a * 10 + b)*10+c)*10+d (假设和不大于65535)
程序如下:
DATA SEGMENT
BCM DW a,b,c,d
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BCD1 PROC FAR
START:MOV AX,DATA
MOV DS,AX
LEA SI,BCM
MOV CX,3
MOV AX,[SI]
L1: INC SI
SHL AX,1 ;(AX)←(AX)×2
MOV BX,AX ;(BX)←(AX)×2
SHL AX,1 ;(AX)←(AX)×4
SHL AX,1 ;(AX)←(AX)×8
ADD AX,BX ;(AX)←(AX)×10
ADD AX,[SI]
LOOP L1
INC SI
MOV [SI],AX
MOV AH,4CH
INT 21H
BCD1 ENDP
CODE ENDS
END START
4、已知数组A包括10个互不相等整数,数组B包括15个互不相等整数。试编写一程序,将既在A中浮现又在B中浮现偶数存储在数组C中。
程序如下:
DATA SEGMENT
ORG 0500H
DATAA DW A1,A2,…A10
DATAB DW B1,B2,…B15
COUNTA EQU 10
COUNTB EQU 15
DATAC DW 10 DUP(?)
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START PROC FAR
BEGIN: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV ES,AX
MOV DS,AX
LEA BX,DATAC ;(BX)=数组C首址
CLD
LEA SI,DATAA ;(SI)= 数组A首址
MOV DX,COUNTA ;(DX)= 数组A元素个数
LP1: LODSW ;取数组A元素到AX
LEA DI,DATAB ;(DI)= 数组B首址
MOV CX,COUNTB ;(CX)= 数组B元素个数
REPNE SCASW ;(AX)= 数组B元素?不同重复
JNZ NEXT ;B中无此A元素转NEXT
TEST AX,01H
JNZ NEXT
MOV [BX],AX ;有A元素且是偶数存入C中
INC BX
INC BX
NEXT: DEC DX
JNZ LP1
INT 3
START ENDP
CODE ENDS
END BEGIN
5、若自STRING开始有一种字符串(以‘$’号作为字符串结束标志),请编程查找此字符串中有无字符‘#’,有多少个‘#’,并将个数存储在NUMBER字单元中,且把每一种‘#’字符所存储偏移地址放到自POINTER开始持续存储字单元中。
程序如下:
DATA SEGMENT
ORG 0100H
STRING DB '593#6707#84BK47#68H#8K8#497$'
NUMBER DB ?
POINTER DW 50 DUP (?)
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START PROC FAR
BEGIN: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV ES,AX
MOV DS,AX
LEA SI,STRING
LEA DI,POINTER
XOR BL,BL ;BL清0
AGAIN: MOV AL,[SI]
CMP AL,’$’ ;与’$’比较
JZ STOP
CMP AL,’# ’
JNZ NEXT
MOV DX,[SI]
MOV [DI],DX
INC DI
INC DI
INC BL
NEXT: INC SI
JMP AGAIN
STOP: LEA DI,NUMBER
MOV [DI],BL
INT 3
START ENDP
CODE ENDS
END BEGIN
一、8282 (地址锁存器)作用:
在T1时锁存地址信息。
二、8284(时钟发生器)作用:
1. 提供系统时钟CLK
2. 同步RESET
3. 同步READY
4. 提供其她系统时钟
三、8286(总线缓冲器)作用:
1. 数据缓冲
2. 增强总线负载能力
3. 控制数据传送方向
四、8288(总线控制器)作用:
在8088/8086 工作在最大模式时,依照S2~S0信号,输出系统各种控制信号
. 本章作业:(带答案)
1. 若用4K×1位RAM芯片构成16K×8位存储器,需要多少芯片(32片)?A19~A0地址线中哪些参加片内寻址(A0~A13)?哪些参加作芯片组片选取信号(A14~A19)?
2. 下列RAM各需要多少条地址线进行寻址?多少条数据I/O线?
地址线 数据线 地址线 数据线
(1) 512×4; 9 4 (5)4K×1; 12 1
(2) 1K×4; 10 4 6)16K×4; 14 4
(3) 1K×8; 10 8 (7)64K×1; 16 1
(4) 2K×1; 11 1 (8)256K×4; 18 4
3. 使用下列RAM芯片,构成所需存储容量,各需多少RAM芯片?各需多少RAM芯片组?共需多少寻址线?每块片子需多少寻址线?
片数 组数 总线数 片内线
(1)512×4芯片,构成8K×8存储容量; 32 16 13 9
(2)1024×1芯片,构成32K×8存储容量; 256 32 15 10
(3)1024×4芯片,构成4K×8存储容量; 8 4 12 10
(4)4K×1芯片,构成64K×8存储容量; 128 16 16 12
4. 若用2114芯片构成2KB RAM,地址范畴为3000H~37FFH,问地址线应如何连接?(假设CPU只有16条地址线,8根数据线,可选用线选法和全译码法)
C B A
A15 A14 A13 A12 A11 A10 A9 A8 A7 ~ A0
0 0 1 1 0 0 0 0 0 ~ 0
0 0 1 1 0 1 1 1 1 ~ 1
第三某些 综合练习题
1、名词解释∶
•ASSUME,SEGMENT,CPU,BCD码,ASCII码, RAM,EPROM,IP,SP,CS,DS,开中断,总线周期,T周期, 段寄存器,字节、字,汇编程序,堆栈,字长,中断,伪指令,批示性语句、指令性语句、OFFSET、物理地址、逻辑地址、ROM、ORG 、AB、DB、CB、指令周期 、全译码、局部译码、内存、外存 ┅
综合练习题答案如下:
1、名词解释(略)
3、判断下列指令正误,如果错误请指出因素。
答案:
(1) MOV CL,259 × 数据不匹配
(2) XOR BL,BH √
(3) ADD 100,AL × 及时数不能为目的操作数
(4) MOV SS,2200H × 及时数不能直接送基寄存器
(5) POP CS × POP 不能对CS
(6) XCHG CX,DX √
(7) IN AL,260H × 端口地址超过256,应用DX间接寻址
(8) MOV [BP+SI],[BX] × 源和目的操作数不能同步为存储器操作数
(9) LEA BX,AX × 源操作数应为存储器操作数
(10) MOV AX,10H[BX] √
4、 问答题:
(1) 何为逻辑地址?何为物理地址?它们俩者之间有何关系?
答:物理地址是存储器实际地址,一种存储单元物理地址是惟一,逻辑地址为程序设计中所使用存储器地址,它由段基址和地内偏移地址两部份构成,物理地址=段基址×16+偏移地址,可见一种存储单元逻辑地址可以有若干个。
(2) 什么是总线周期?一种基本总线周期由多少个T构成?
答:CPU每访问一次总线所花时间称为总线周期,一种基本总线周期由四个T周期构成。
(3) 在使用串操作指令(如MOVS)前应注意些什么?
答:使用串操作指令时应注意如下五点:1·将源串首(末)地址送入SI中、将目的串首(末)地址送入DI中;2·将串长度送入CX中;3·设立DF值;4·选取恰当重复前缀;5·判断串操作指令结束条件。
(4) 8088 CPU有多少根地址线?多少根数据线?它最大直接寻址范畴是多少?一次对外数据传送多少BIT二进制数?
答:8088 CPU有20根地址线,8根数据线,它最大直接寻址范畴是1MB,一次对外数据传送8BIT二进制数。
(5) 微机中基本计时有哪几种?它们之间有何关系?
答:微机中基本计时有:指令周期;总线周期;时钟周期。一种指令周期由若干时钟周期或总线周期构成,
一种基本总线周期由四个时钟周期构成,时钟周期是最小计时单位,它是微机主频倒数。
(6) 8086 / 8088 微解决器内部有哪些寄存器?其重要作用是什么?
答:8086 / 8088 微解决器内部有:AX、BX、CX、DX、SI、DI、CS、DS、SS、ES、IP、SP、FR、BP存储数据、偏移地址、段基址以及标志。
5、自1000H单元开始,有100个无符号数(字节),编写程序计算这100个数和,并把和存储在1971H和1972H单元,且高位存储在1972H单元。
程序如下:
DATA SEGMENT
ORG 1000H
N1 DB n1,n2,…n100
N2 EQU 1971H
CON EQU 100
DATA ENDS
STACK SEGMENT STACK ‘STACK’
DW 100DUP(?)
STACK ENDS
CODE SEGMENT
ORG H
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC
START: MOV AX,DATA
MOV DS,AX
LEA SI,N1
MOV CX,CON
XOR AX,AX
L1: ADD AL,[SI]
ADC AH,0
INC SI
LOOP L1
MOV N2,AL
MOV N2+1,AH
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END START
6、若自6000H单元开始有1000个数(字节),试针对下面状况编程将它们中最小值、最大值找出来,并分别存储在5000H和5001H字节单元中。
(1) 这1000个数为无符号数。
(2) 这1000个数为带符号数。
程序如下:
DATA SEGMENT
ORG 6000H
BUFFER DB X1,X2,…,X1000 ;自定义N个无(带)符号数
COUNT EQU $-BUFFER
MAX EQU 5000H ;保存最大值
MIN EQU 5001H ;保存最小值
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC
START: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT
LEA BX,BUFFER ;首地址→BX
MOV AL,[BX] ;AL←最大值初值
MOV DL,[BX] ;DL←最小值初值
DEC CX ;循环次数减1
AGAIN: INC BX
CMP AL,[BX] ;比较
JNC (JGE) NEXT1 ;若最大值≥[BX],则转至NEXT1
MOV AL,[BX] ;AL←保存最新最大值
JMP NEXT2
NEXT1: CMP DL,[BX] ;比较
JC (JL) NEXT2 ;若最小值<[BX],则转至NEXT2
MOV DL,[BX] ;DL←保存最新最小值
NEXT2: LOOP AGAIN ;循环
MOV MAX,AX ;MAX←存最大值
MOV MIN,DX ;存最小值→MIN
MOV AH,4CH
INT 21H ;返回DOS
MAIN ENDP
CODE ENDS
END START
7、用2114存储器芯片构成2KB RAM,地址范畴为C800H~CFFFH,问地址线、数据线及有关控制线如何连接?(假设CPU只有16根地址线、8根数据线,控制线为 WR、RD、IO/M,采用LS138全译法。见下图,)
C B A
A15 A14 A13 A12 A11 A10 A9 A8 A7 ~ A0
1 1 0 0 1 0 0 0 0 ~ 0
1 1 0 0 1 1 1 1 1 ~ 1
展开阅读全文