复习内容.docx
- 文档编号:24453473
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:23
- 大小:109.40KB
复习内容.docx
《复习内容.docx》由会员分享,可在线阅读,更多相关《复习内容.docx(23页珍藏版)》请在冰豆网上搜索。
复习内容
写出下述指令中源操作数的寻址方式(每小题2分,共10分)
1.MOVAX,100
2.ADDAX,BX
3.SUBAX,[100H]
4.CMPAX,[BX]
5.MOVAL,[SI+10]
6.movcx,100h
7.adddx,bx
8.moval,[100h]
9.movcx,[di]
10.andcl,[di+10]
11.movcx,100h
12.adddx,bx
13.moval,[100h]
14.movcx,[di]
15.andcl,[di+10]
16.movax,100h
17.addax,bx
18.movbl,[100h]
19.movcx,[si]
20.andal,[si+10]
21.movax,100h
22.addax,bx
23.movbl,[100h]
24.movcx,[si]
25.andal,[si+10]
26.movcx,100h
27.adddx,bx
28.moval,[100h]
29.movcx,[di]
30.andcl,[di+10]
31.ADDAX,10
32.MOVAX,BX
33.SUBAL,[SI]
34.MOVAL,[SI+10]
35.SUBAL,[10H]
36.movax,1000h
37.addax,bx
38.movbl,[100h]
39.movcx,[di]
40.andal,[di+10]
三.下述指令中,是否有错,有错则改正之(每小题2分,共10分)
1.MOVSI,ALN
2.ADDAL,100HN
3.MOVAL,[SI+DI]N
4.MOV[BX],[SI]N
5.MOV100H,BLN
6.moval,100Y
7.addax,clN
8.movax,[1001]Y
9.mov[si+di],100N
10.movax,[cx]N
11.moval,100Y
12.addax,clN
13.moval,[100]Y
14.mov[si+bx],100N
15.movax,[dx]N
16.moval,100Y
17.addax,cl
18.moval,[100]
19.mov[si+bx],100
20.movax,[dx]
21.moval,100
22.addax,cl
23.movax,[1001]
24.mov[si+di],100
25.movax,[cx]N
26.SUB[3000H],[BX]N
27.OUT180H,AXN
28.CMPAL,[SI][DI]N
29.PUSHBLN
30.MOVCS,2000HN
31.moval,100HN
32.addax,cxY
33.moval,[100]Y
34.mov[si+bx],100N
35.movax,[dx]N
1.已知数据段的定义如下,现要求把BUF数据区中的十六进制,转换为压缩的BCD码,百位存放在RES单元中,十位与个位存放在RES1单元中,编程实现之。
DATASEGMENT
BUFDB0ABH
RESDB?
RES1DB?
DATAENDS
答:
DATASEGMENT
BUFDB0ABH
RESDB?
RES1DB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
MOVAX,DATA
MOVDS,AX
Moval,buf
Movah,0
Movbl,100
Divbl;百位值在AL中,十位个位的值在AH中
Movres,al
Moval,ah
Movah,0;此时十位个位的值在AX中
Movbl,10
Divbl;十位的值在AL中,个位的值在AH中
Movcl,4
Shlal,cl
Addal,ah
Movres1,al
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
2.已知在BUF这个存贮区单元中,存放着一个十六进制数,现要求把该数在屏幕上显示出来,编程实现之.
datasegment
BUFdb0A9H
dataends
codesegment
assigncs:
code,ds:
data
start:
movax,data
movds,ax
movdldat
moval,dl
movcl,4
shrdl,cl
cmpdl,09
jakk1
jbekk2
kk2:
adddl,30h
movah,02h
int21h
jmpk1
kk1:
subdl,0aH
adddl,’A”
movah,2
int21h
k1:
movdl,al
anddl,0fh
cmpdl,09
jakkk1
jbekkk2
kkk2:
adddl,30h
movah,02h
int21h
jmpk2
kkk1:
subdl,0aH
adddl,’A”
movah,2
int21h
k2:
movah,4ch
int21h
codeends
endstart
3.试统计AX中1的个数,其值存入BL中,编程实现之。
CODESEGMENT
ASSUMECS:
CODE
BEGIN:
MOVCX,16
MOVBL,0
MOVDX,01H
K1:
TESTAX,DX
JNZKK1
JNKK2
KK1:
INCBL
JMPK2
KK2:
JMPK2
K2:
SHLDX,1
DECCX
JNZK1
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN;整个程序的结束
4.数据段的定义如下。
已知函数的功能为Y=5*X+7(X偶数)
Y=3*X-8(X奇数)
且X的值存放在BUF单元中,结果Y存放入RES单元中,编程实现其功能,要求写出完整的源程序。
(15分)
DASEGMENT
BUFDB57
RESDW?
DAENDS
答:
DASEGMENT
BUFDB57
RESDW?
DAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DA
BEGIN:
MOVAX,DA
MOVDS,AX
MOVAL,BUF
TSETAL,01H
JAEK1;为奇数则到K1处执行
MOVBL,5
MULBL
ADDAX,7
JMPK2
K1:
MOVBL,3
IMULBL
SUBAX,8
K2:
MOVRES,AX
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
5.已知数据段的定义如下,现在BUF数据区中有若干个有符号的十六进制,该数据区以$作为结束标志,现要求求该数据区中的最大数,并把该数存放在RES单元中,编程实现之。
DASEGMENT
BUFDB0ABH,1,2,3,5,’ueuu87786KHH$’
RESDB?
DAENDS
答:
DASEGMENT
BUFDB0ABH,1,2,3,5,’ueuu87786KHH$’
RESDB?
DAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DA
BEGIN:
MOVAX,DA
MOVDS,AX
LEASI,BUF
MOVCX,N
MOVAL,[SI];第一个数送入AL寄存器,且为MAX
K1:
MOVBL,[SI]
CMPBL,AL
JGEK2;若所取的数大于MAX则跳转到标号K2处。
JMPK3
K2:
MOVAL,BL;进行交换
K3:
INCSI
LOOPK1
MOVRES,AL;结果送入RES单元中
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN;整个程序的结束
6.数据段的定义如下。
已知在从BUF开始的一段存贮区单元中,存放有若干个数据,该数据以’*’作为结束标志,试统计其中奇数的和和偶数的和,并把奇数和结果存放于RES存贮区单元中,把偶数和结果存放于RES1存贮区单元中,编程实现其功能,要求写出完整的源程序。
DASEGMENT
BUFDB1,2,3,4,5,6,7,8,9,-10,-13,29,31,20,‘*’
RESDB?
RES1DB?
DAENDS
答:
Datasegment
BUFDB1,2,3,4,5,6,7,8,9,-10,-13,29,31,20,‘*’
RESDB?
RES1DB?
Enddata
Codesegment
Assumecs:
code,ds:
data
Begin:
movax,data
Movds,ax
Leasi,buf
Xorbx,bx
Xorcx,cx
Lp:
moval,[si]
Cmpal,’*’
Jenn
Andal,01
Jzkk
Addcl,[si]
Adccx,0
Jmpmm
Kk:
addbl,[si]
Adcbx,0
Mm:
incsi
Jmplp
Nn:
movres1,cx
Movres,bx
Movah,4ch
Int21h
Codeends
Endbegin
7.已知数据段的定义如下,现在BUF数据区中有若干个有符号的十六进制,现要求把该数据区中的所有小写字母改为大写字母,存放与原位置,编程实现之。
DASEGMENT
BUFDB0ABH,1,2,3,5,’ueuu87786KHH$’
RESDB?
DAENDS
答:
DASEGMENT
BUFDB0ABH,1,2,3,5,’ueuu87786KHH$’
RESDB?
DAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DA
BEGIN:
MOVAX,DA
MOVDS,AX
LEASI,BUF
MOVCX,N
K1:
MOVBL,[SI]
CMPBL,‘a’
JAEKK1
JBKK2
KK1:
CMPBL,‘z’
JBEKK3
JAKK2
KK3:
SUBBL,10
ADDBL,‘A’
MOV[SI],BL
JMPKK2
KK2:
INCSI
DECCX
JNZK1
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN;整个程序的结束
接口电路
1、设8253A的端口地址为0FFF0H~0FFF3H,已知输入的时钟CLK为1KHz,要求产生25Hz的占空比为50%方波输出,试对8253A进行初始化编程,且画出连接关系.(10分)
CLK
解:
n=5*103/25=200
CLK0
计数器0的分频系数为200占空比为50%均采用方式3
Moval,00110111b
OUT0
Movdx,0fff3h
Outdx,al
Movdx,0fff0h
CLK1
Moval,00h
Outdx,al
OUT
OUT1
Moval,2h
+5V
GATE0
Outdx,al
GATE1
;上述为计数器0初始化
Hlt
2、电路如下图所示,在图中地址总线的A0、A1接到8255A的A0、A1,地址总线的A5、A6、A2、A3、A4、A7(此经过一个反向器接到或门)通过或门接到8255A的片选端(CS低电平有效),当K1闭合时,发光二极管L1点亮,K1断开时发光二极管L1熄灭;当K2闭合时,发光二极管L2点亮,K2断开时发光二极管L2熄灭(不允许二个开关同时闭合);编程完成上述功能,并写出PA、PB、PC、控制口的地址。
(15分)
由图中可知,其8255A的地址为00H、01H、02H、03H
PA口工作在方式0,输入方式;PB工作在方式0,输出方式
其控制字为10010000B
Moval,90h
Out03h,al
K1:
inal,00h
Cmpal,0feh
Jzkk1;代表检测到K1键按下,其对应的键值为11111110B
Cmpal,0fdh
Jzkk2;代表检测到K1键按下,其对应的键值为11111101B
Moval,00h;不是上述二种情况,则灯灭
Out01h,al
Jmpk1
Kk1:
moval,80h;L1灯点亮,此时PB的值为10000000B
Out01h,al
Jmpk1
Kk2:
moval,40h;L1灯点亮,此时PB的值为01000000B
Out01h,al
Jmpk1
3、设8255A的端口地址为:
0C0H、0C1H、0C2H、0C3H,现要求A端口采用方式1接8位二进制输入,对端口B采用工作方式0,接八只发光二极管,编写程序实现把A端口读入数据在B端口输出.(15分)
10110000B
Moval,0b0h
Out0c3h,al
Inal,0c0h
Out0c1h,al
hlt
4、已知某8253占用I/O空间地址为320H~323H,如图所示,输入其CKL1端的脉冲频率为1MHz,要求用8253连续产生10秒的定时信号。
分析:
8253的一个通道的最大计数范围为65536,本例中要求输出10秒定时信号,则计数初值N=10/10-6=107,超过了8253一个通道的最大计数值,此时可以使用2个8253通道级连方式来实现。
若级连前2个通道的初值为N1和N2,则级连后作为一个整体的计数值为N=N1×N2。
设计数器初值N1=500=1F4H,N2=20000=4E20H,使用方式2,二进制计数,则通道1、2的初始化程序如下:
MOVDX,323H
MOVAL,74H
;01110100B,通道1,写入16位初值,方式2,二进制计数
OUTDX,AL
;写入通道1方式字
MOVDX,321H
MOVAL,0F4H
OUTDX,AL
;写入初值500的低8位入通道1
MOVAL,01H
OUTDX,AL
;写入初值500的高8位入通道1
MOVDX,323H
MOVAL,0B4H
;10110100B,通道2,写入16位初值,方式2,二进制计数
OUTDX,AL
;写入通道2方式字
MOVDX,322H
MOVAL,20H
OUTDX,AL
;写入通道2初值20000的低8位
MOVAL,4EH
OUTDX,AL
;写入通道2初值20000的高8位
5、设某应用系统中,系统提供一个频率为10kHz的时钟信号,要求每隔100ms采集一次数据。
在系统中,采用8253定时器的通道0来实现这一要求。
将8253芯片的CLK0接到系统的10kHz时钟上,OUT0输出接到CPU的中断请求线上,8253的端口地址为10H~13H,如图所示。
确定计数初值
已知fCLK0=10kHz,则TCLK0=0.1ms,所以,计数初值
N=TOUT0/TCLK0=100ms/0.1ms=1000=03E8H
初始化编程
根据以上要求,可确定8253通道0的方式控制字为00110100B,即34H。
初始化程序段如下:
MOVAL,34H;通道0,16位计数,方式2,二进制计数
OUT13H,AL;写入方式控制字到控制字寄存器
MOVAL,0E8H;计数初值低8位
OUT10H,AL;写入计数初值低8位到通道0
MOVAL,03H;计数初值高8位
OUT10H,AL;写入计数初值高8位到通道0
6、通过PC机系统总线在外部扩展一个8253,利用其通道0记录外部事件的发生次数,每输入一个高脉冲表示事件发生1次。
当事件发生100次后就向CPU提出中断请求(边沿触发),假设8253片选信号的I/O地址范围为200H~203H,如图根据要求,可以选择方式0来实现,计数初值N=100。
8253初始化程序段如下:
MOVDX,203H;设置方式控制字地址
MOVAL,10H;设定通道0为工作方式0,二进制计数,只写入低字节计数值
OUTDX,AL
MOVDX,200H;设置计数器通道0的地址
MOVAL,64H;计数初值为100
OUTDX,AL
7、8255A作为连接打印机的接口,工作于方式0,如下图所示。
设8255A的端口地址为:
A端口:
00DOH书B端口:
00D2HC端口:
00D4H
控制口:
00D6H
使用查询方式输出,待输出的字符在CL中,具体程序段如下
PP:
MOVAL,81H ;控制字,使A组、B组均为方式0,A端口为输出,PC7~PC4输出,PC3~PC0输入
OUT0D6H,AL;写入控制口
MOV AL,0DH ;用C端口置1/置0方式使PC6为1,即STB初始状态为高电平
OUT0D6H,AL ;写入控制口
LPST:
INAL,0D4H ;读端口C的值
TEST AL,04H ;测试PC2位
JNZ LPST ;如不为0,说明BUSY信号为1,即打印机处于忙状态,故等待
MOV AL,CL ;如不忙,则把CL中字符送端口A
MOV AL,0CH ;用置1/置0方式使PC6为0
OUT 0D6H,AL;即向STB输出负脉冲
INC AL
OUT0D6H,AL ;再使STB为1
HLT
8、基本输入输出应用举例
已知8255A的地址为0F0H、0F2H、0F4H、0F6H
MOVDX,0F6H
MOVAL,10010000B
OUTDX,AL
TEST-IT:
MOVDX,0F0H
INAL,DX
MOVDX,0F2H
OUTDX,AL
JMPTEST-IT
9、以查询方式打印“THISISTHETEST!
”
Datasegment
BUFDB‘THISISTHETEST!
’
N=$-BUF
Dataends
MOVDX,303H
MOVAL,10010000B
OUTDX,AL
MOVCX,N
LEABX,MESS-1
XX1:
MOVDX,300H
XX:
INAL,DX
TESTAL,00001000B
JNZXX
MOVAL,[BX]
MOVDX,301H
OUTDX,AL
MOVDX,303H
MOVAL,00001000B
OUTDX,AL
MOVAL,00001001B
OUTDX,AL
INCBX
LOOPXX1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习 内容