计算机硬件技术基础第6章.docx
《计算机硬件技术基础第6章.docx》由会员分享,可在线阅读,更多相关《计算机硬件技术基础第6章.docx(15页珍藏版)》请在冰豆网上搜索。
![计算机硬件技术基础第6章.docx](https://file1.bdocx.com/fileroot1/2023-1/28/3f5703ac-78cb-46ee-bad2-de4b28ba25d7/3f5703ac-78cb-46ee-bad2-de4b28ba25d71.gif)
计算机硬件技术基础第6章
学习要点
1.应知部分
(1)知道指令格式和8086常用的寻址方式
(2)知道8086的指令种类及各指令的功能和应用
(3)知道指令、伪指令、标识符、保留字、数据段、代码段、堆栈段等概念
(4)知道汇编语言程序的基本结构及格式要求
(5)知道转移程序、循环程序和子程序
2.应会部分
(1)会分析指令的寻址方式
(2)能读懂汇编语言源程序
(3)能进行简单汇编程序设计
(4)能运行及调试汇编语言程序
知识结构
学习方法
1.理解过程,记住形式
2.先读后套,再编,以求融会贯通
解题指导
6.1
(1)源操作数与目的操作数类型不匹配
(2)两个操作数同为内存操作数
(3)两个操作数同为内存操作数
(4)操作数不是16位
(5)目的操作数是立即数
(6)用CS作目的操作数
(7)指令中移位次数大于1
(8)给段寄存器DS直接送立即数
(9)在两个段寄存器之间传送数据
(10)源操作数、目的操作数类型不匹配
6.2
(1)(DX)=0096H
(2)(DX)=0069H
(3)(DX)=00FFH
(4)(DX)=00EEH
(5)(DX)=0008H
(6)(DX)=00F7H
6.3
(1)(BX)=06CBH
(2)(BX)=65A8H
(3)(BX)=B65AH
(4)(BX)=A9B2H
6.4
(1)(SP)=0FFCH
(2)(SP)=1000H,(AX)=5678H
6.5
(AF)=0,(CF)=0,(OF)=0,(PF)=0,(SF)=0,(ZF)=0
6.6
(1)DATASEGMENT
wDB10H
XDB20H
ZDB30H
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,z
SUBAL,X
SUBAL,w
MOVz,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(2)DATASEGMENT
wDB30H
yDB20H
rDB10H
zDB?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,w
ADDy,6
ADDr,3
SUBAL,y
SUBAL,r
MOVz,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(3)DATASEGMENT
aDB02H
bDB10H
cDW?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,a
MULb
MOVc,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(4)DATASEGMENT
aDB02H
bDB10H
cDB06H
sDW?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,c
MULc
MOVBX,AX
MOVAL,a
MULb
SUBAX,BX
MOVS,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(5)DATASEGMENT
aDB02H
bDB10H
cDW?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,a
CBW
DIVb
MOVc,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(6)DATASEGMENT
xDB02H
yDB10H
wDB?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,x
SUBAL,2
SHRAL,1
ADDAL,y
MOVw,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.7解:
提示:
该问题可直接通过分支程序进行三个数的比较,先作流程图,根据条件决定程序流向。
在此借助“冒泡排序”的思想,从第一个数开始,依次将第一个存储单元的数和第二个存储单元的数比较,第二个存储单元的数和第三个存储单元的数比较,若低地址单元的数大于高地址单元的数,则进行交换,否则继续比较。
采用循环程序嵌套,外层循环控制比较的次数,内层循环控制比较的个数。
DATASEGMENT
DATA1DB30H,20H,40H
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,3
LEASI,DATA1
MOVBL,0FFH;设置交换标志
L1:
CMPBL,0FFH
JNZOVER
MOVBL,00H
DECCX
JZOVER
PUSHSI
PUSHCX
L2:
MOVAL,[SI]
INCSI
CMPAL,[SI]
JBL3
XCHGAL,[SI]
MOV[SI-1],AL
MOVBL,0FFH
L3:
LOOPL2
POPCX
POPSI
JMPL1
OVER:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.8该问题用条件循环程序实现。
DATASEGMENT
nDW?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,1
MOVBX,2
L:
CMPAX,100
JAEL1
ADDAX,BX
DAA
INCBX
JMPL
L1:
DECBX
MOVn,BX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.9分析:
该问题用循环程序实现,循环的次数为100。
因为是1~100的累加,所以用循环计数器CX作源操作数,循环初值为100。
DATASEGMENT
SUMDW?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,100
MOVAX,0
LOOP1:
ADDAX,CX
DAA
LOOPLOOP1
MOVSUM,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.10分析:
该问题是一个不固定循环次数的循环程序,需要配合条件测试,测试存储区域中的数据是否为0。
DATASEGMENT
BUFFDB5,1,0,6,8,4
ANSDB?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
LEABX,BUFF;取存储区首地址
L:
MOVAL,[BX];取第1个数
INCBX
CMPAL,0;测试取出的数是否为0
JNEL;不为0,转L处,继续取下一个数
MOVAL,[BX];将0数据后的字节单元内容送ANS
MOVANS,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.11
(1)该程序的功能是选择数据区中最大的数。
运行结果是:
THERESULTIS:
9
(2)该程序的功能是将内存中的数与55进行比较,并显示大于55的数。
运行结果是:
60isaboveto55
6.12解:
DATASEGMENT
XDB01H
YDB03H
ZDB10H
MINDB?
DATAENDS
STASEGMENTSTACK‘STACK’
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X
CMPAL,Y
JBLP1
MOVAL,Y
CMPAL,Z
JBNEXT
LP2:
MOVAL,Z
JMPNEXT
LP1:
CMPAL,Z
JNBLP2
NEXT:
MOVMAX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.13解:
DATASEGMENT
BUF1DB01H,04H,05H,08H,12H,15H,14H,10H
BUF2DB8DUP(?
)
COUNTEQU$-BUF1
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,BUF1
LEADI,BUF2
MOVCX,COUNT
CLD
REPMOVSB
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.14解:
DATASEGMENT
nEQU10
RESDW?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,n
MOVAX,0
CALLSUM
MOVRES,AX
MOVAH,4CH
INT21H
SUMPROC
LOOP1:
ADDAX,CX
LOOPLOOP1
RET
SUMENDP
CODEENDS
ENDSTART
6.15解:
DATASEGMENT
STRDB‘STUDENT’
COUNTEQU$-STR
LARGEDB?
SMALLDB?
DATAENDS
STASEGMENTSTACK
DB100DUP(?
)
STAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
LEASI,STR
MOVCX,COUNT
CALLMAX
MOVLARGE,AL
CALLMIN
MOVSMALL,AL
MOVAH,4CH
INT21H
MAXPROC
MOVAL,[SI]
INCSI
LOOP1:
CMPAL,[SI]
JBL1
INCSI
LOOPLOOP1
L1:
MOVAL,[SI]
INCSI
LOOPLOOP1
RET
MAXENDP
MINPROC
MOVAL,[SI]
INCSI
LOOP1:
CMPAL,[SI]
JAL2
INCSI
LOOPLOOP1
L2:
MOVAL,[SI]
INCSI
LOOPLOOP1
RET
MINENDP
CODEENDS
ENDSTART