微机原理实验答案汇编.docx
《微机原理实验答案汇编.docx》由会员分享,可在线阅读,更多相关《微机原理实验答案汇编.docx(33页珍藏版)》请在冰豆网上搜索。
![微机原理实验答案汇编.docx](https://file1.bdocx.com/fileroot1/2023-2/4/c42edf33-eb2e-4b2e-846f-765319d31588/c42edf33-eb2e-4b2e-846f-765319d315881.gif)
微机原理实验答案汇编
1.题目:
编程将(AX)=2387、(BX)=192FH、(CX)=9256中的无符号数按由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,2387
MOVBX,192FH
MOVCX,9256
CMPAX,BX
JAENEXT1
XCHGAX,BX
NEXT1:
CMPAX,CX
JAENEXT2
XCHGAX,CX
NEXT2:
CMPBX,CX
JAENEXT3
XCHGBX,CX
NEXT3:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.题目:
编程将(BX)=8600H、(CX)=3489H、(DX)=9235按有符号数由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。
;CODESEGMENT
ASSUMECS:
CODE
START:
MOVBX,8600h
MOVCX,3489H
MOVDX,9235
CMPBX,CX
JGENEXT1
XCHGBX,CX
NEXT1:
CMPBX,DX
JGENEXT2
XCHGBX,DX
NEXT2:
CMPCX,DX
JGENEXT3
XCHGCX,DX
NEXT3:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.题目:
在数据段中定义如下数据:
32,34,89H,,编程将以上数据按有符号数进行排序,并将程序和结果记录下来。
DATASEGMENT
NUMDB32,34,89H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DAT
START:
MOVAX,DATA
MOVDS,AX;初始化DS
LEABX,NUM;取有效地址到BX,以便访问要排序的数
MOVAL,[BX]
CMPAL,[BX+1]
JGENEXT1;若第一个数大则跳转,否则将第一个与第二个数交换
XCHGAL,[BX+1]
MOV[BX],AL
NEXT1:
CMPAL,[BX+2]
JGENEXT2;若第一个数大则跳转,否则将第一个与第三个数交换
XCHGAL,[BX+2]
MOV[BX],AL
NEXT2:
MOVAL,[BX+1];将第二个和第三个数比较
CMPAL,[BX+2]
JGENEXT3;若第二个数大则跳转,否则将第二个与第三个数交换
XCHGAL,[BX+2]
MOV[BX+1],AL
NEXT3:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.题目:
在数据段中定义如下数据:
99,25,86,编程将以上数据按无符号数进行排序,上机调试出程序,并将程序和结果记录下来。
datasegment
numdb99h,25h,86h
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leabx,num
moval,[bx]
cmpal,[bx+1]
jaenext1
xchgal,[bx+1]
mov[bx],al
next1:
cmpal,[bx+2]
jaenext2
xchgal,[bx+2]
mov[bx],al
next2:
moval,[bx+1]
cmpal,[bx+2]
jaenext3
xchgal,[bx+2]
mov[bx+1],al
next3:
movah,4ch
int21h
codeends
endstart
5.题目:
(AL)=86H,(AH)=34H,(BL)=78H,编程将以上数据按有符号数进行排序,上机调试出程序,并将程序和结果记录下来。
codesegment
assumecs:
code
start:
moval,86h
movah,34h
movbl,78h
cmpal,ah
jaenext1
xchgal,ah
next1:
cmpal,bl
jaenext2
xchgal,bl
next2:
cmpah,bl
jaenext3
xchgah,bl
next3:
movah,4ch
int21h
codeends
endstart
6.题目:
中断向量为:
1234:
5678H,编程将此中断向量写入类型0所在的中断向量表,上机调试出程序,并将程序和结果记录下来。
(直接用MOV指令写入即可)
codesegment
assumecs:
code,ds:
code
start:
xorax,ax
movds,ax
movbx,0
movcl,2
shlbx,cl
movwordptr[bx],5678h
movwordptr[bx+2],1234h
movah,4ch
int21h
codeends
endstart
7.题目:
中断向量为:
3456:
6678H,编程将此中断向量写入类型60H所在的中断向量表,上机调试出程序,并将程序和结果记录下来。
(直接用MOV指令写入即可)
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
XORAX,AX
MOVDS,AX;初始化DS,中断向量表在0段
MOVBX,60H
MOVCL,2
SHLBX,CL;让中断类型化左移两位,以便实现乘以4作为中断向量地址
MOVWORDPTR[BX],5678H
MOVWORDPTR[BX+2],1234H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
8.题目:
中断向量为:
编程将中断向量类型60H所对应的中断向量从中断向量表中取出来分别放在ES和DI中,上机调试出程序,并将程序和结果记录下来。
(直接用MOV指令即可)
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
XORAX,AX
MOVDS,AX;初始化DS,中断向量表在0段
MOVBX,60H
MOVCL,2
SHLBX,CL;让中断类型化左移两位,以便实现乘以4作为中断向量地址
MOVDI,WORDPTR[BX]
MOVES,WORDPTR[BX+2]
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
9.题目:
中断向量为:
编程将中断向量类型21H所对应的中断向量从中断向量表中取出来分别放在SI和BP中,上机调试出程序,并将程序和结果记录下来。
(直接用MOV指令即可)
codesegment
assumecs:
code,ds:
code
start:
xorax,ax
movds,ax
movbx,21h
movcl,2
shlbx,cl
movsi,wordptr[bx]
movbp,wordptr[bx+2]
movah,4ch
int21h
codeends
endstart
10.题目:
中断向量为:
编程将中断向量类型45H所对应的中断向量从中断向量表中取出来分别放在DI和BP中,上机调试出程序,并将程序和结果记录下来。
(直接用MOV指令即可)
codesegment
assumecs:
code,ds:
code
start:
xorax,ax
movds,ax
movbx,45h
movcl,2
shlbx,cl
movdi,wordptr[bx]
movbp,wordptr[bx+2]
movah,4ch
int21h
codeends
endstart
11.题目:
利用实验箱中的8255并口芯片实现1个发光二极管的闪烁。
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,28bh
moval,80h
outdx,al
movcx,5
disp:
moval,03h
outdx,al
pushcx
movcx,10h
delay:
loopdelay
popcx
moval,02h
outdx,al
loopdisp
movah,4ch
int21h
codeends
endstart
12.题目:
在交通灯实验中请使用8255的C口按位置1/置0的功能实现如下现象:
南北路口的绿灯、东西路口的红灯同时亮30秒左右。
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,28bh
moval,80h
outdx,al
disp:
moval,0bh
outdx,al
moval,05h
outdx,al
movcx,2000h
de1:
movdi,9000h
de0:
decdi
jnzde0
loopde1
movdl,0ffh;判断是否有按键
movah,06h
int21h
movah,4ch
int21h
codeends
endstart
13.题目:
在交通灯实验中,请使用8255的C口按位置1/置0的功能实现如下现象:
东西路口的黄灯闪烁5次。
;设8255的CS片选地址接280H-287H
;PC1接黄色发光二极管
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,28bH
MOVAL,80H
OUTDX,AL;8255初始化
MOVCX,5
DISP:
MOBAL,03H
OUTDX,AL;PC1通过控制端口置位,点亮黄灯
PUSHCX;暂时保存CX值,因为下面的循环要用到
MOVCX,100H
DELAY:
LOOPDELAY;延时循环,可以调节
POPCX
MOVAL,02H
OUTDX,AL;PC1通过控制端口清零,熄灭黄灯
LOOPDISP;总共循环5次,黄灯亮灭5次,即闪烁5次
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
14.题目:
利用8255A的PC7产生负脉冲:
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,28bh
moval,80h
outdx,al
movcx,10
disp:
moval,03h
outdx,al
pushcx
movcx,10h
delay:
loopdelay
popcx
moval,02h
outdx,al
loopdisp
movah,4ch
int21h
codeends
endstart
15.题目:
在使用8个开关控制8个LED的实验中,请利用8255的A口作为输入端口,C口作为输出端口实现原来的实验现象。
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,io8255b;设8255为C口输出,A口输入
moval,90h
outdx,al
inout:
movdx,io8255a;从A口输入一数据
inal,dx
movdx,io8255c;从C口输出刚才自A口
outdx,al;所输入的数据
movdl,0ffh;判断是否有按键
movah,06h
int21h
jzinout;若无,则继续自a口输入,c口输出
movah,4ch;否则返回
int21h
codeends
endstart
16.题目:
在交通灯实验中,请使用8255的C口按位置1/置0的功能实现如下现象:
南北路口的红灯、东西路口的绿灯同时亮30秒左右。
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,28bh
moval,80h
outdx,al
disp:
moval,0fh
outdx,al
moval,01h
outdx,al
movcx,2000h
de1:
movdi,9000h
de0:
decdi
jnzde0
loopde1
movdl,0ffh;判断是否有按键
movah,06h
int21h
movah,4ch
int21h
codeends
endstart
17.题目:
在交通灯实验中,请使用8255的C口按位置1/置0的功能实现如下现象:
南北路口的黄灯闪烁5次。
io8255aequ288h
io8255bequ28bh
io8255cequ28ah
codesegment
assumecs:
code
start:
movdx,28bh
moval,80h
outdx,al
movcx,5
disp:
moval,0ch
outdx,al
pushcx
movcx,10h
delay:
loopdelay
popcx
moval,0bh
outdx,al
loopdisp
movah,4ch
int21h
codeends
endstart
18.题目:
在模/数转换器实验中,实现以下条件下的A/D转换,模拟量的输入通道:
IN1;A/D转换器的地址:
2B8H;显示结果中不出现大写字母。
CODESEGMENT
ASSUMECS:
CODE
START:
XORAX,AX
MOVDX,2B9H;2B8H为IN1的地址
OUTDX,AL;启动A/D转换
NOP
NOP
INAL,DX
MOVBL,AL;暂时保存读入的值,因为后面显示时会修改AL的值
MOVDL,AL
MOVCL,4
ROLDL,CL;将要显示的高四位移到低四位去
ANDDL,0FH;将高四位清掉,目的显示原读入数据的高四位,即当前DL中的低四位
ADDDL,30H
CMPDL,39H
JBENEXT
ADDDL,27H;若是十六进制数A-F,则加27H,显示对应小写字母
NEXT:
MOVAH,02H
INT21H;显示A/D转换结果的高四位
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JBENEXT1
ADDDL,27H;若是十六进制数A-F,则加27H,显示对应小写字母
NEXT1:
MOVAH,02H
INT21H;显示A/D转换结果的低四位
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
19.题目:
利用可编程计数定时器8253A的计数器0和计数器2,输出100Hz的的信号,连接必要的连线,编写初始化程序。
上机调试出程序,并将程序记录下来。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,283H
MOVAL,00010110B;计数器0的模式字,只写低八位,工作方式3,计数初值为二进制
OUTDX,AL;写计数器0的工作模式字
MOVAL,100
MOVDX,280H
OUTDX,AL;写计数器0的计数初值,二进制,只写低八位
MOVDX,283H;此句新添加,对计数器2的初始化模式字应写入到控制端口
MOVAL,10010110B;计数器2的模式字,只写低八位,工作方式3,计数初值为二进制
OUTDX,AL;写计数器2的工作模式字
MOVAL,100
MOVDX,282H
OUTDX,AL;写计数器2的计数初值,二进制,只写低八位,至此已完成初始化
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
20.题目:
利用可编程计数定时器8253A的计数器1和计数器2,输出50Hz的的信号,连接必要的连线,编写初始化程序。
上机调试出程序,并将程序记录下来。
codesegment
assumecs:
code
start:
movdx,283h
moval,01010110b
outdx,al
moval,200
movdx,281h
outdx,al
moval,10010110b
outdx,al
moval,200
movdx,280h
outdx,al
movah,4ch
int21h
codeends
endstart
21.用A命令汇编一条INT21H指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况。
提示:
注意21H这个中断类型号与中断向量地址、中断向量的关系,注意执行中断时要压入堆栈保护的内容:
FR、CS、IP
22.用命令A汇编下列程序段,用命令T跟踪执行,判断程序段能否完成指定功能。
程序段完成将DS:
2000H开始的5个字节内存内容相加,并把相加的结果存放在DS:
2005H和DS:
2006H内存单元中,注意:
要考虑进位。
MOVCX,5
MOVAL,0
MOVBX,2000H
next:
ADDAL,[BX]
INCBX
DECCX
LOOPnext;(CX)-1->(CX),(CX)≠0转next
MOV[BX],AL
答案:
MOVCX,5
MOVAL,0
MOVBX,2000H
CLC;应加清进位命令
MOVAH,0;2008年12月份修改
next:
ADDAL,[BX];原先为ADD命令
ADCAH,0
INCBX
DECCX;这一句是多余的,应删除掉,因为loop里面隐含了CX=CX-1
LOOPnext;(CX)-1->(CX),(CX)≠0转next
MOV[BX],AL;保存和
MOVAL,0
ADCAL,0;将进位加到AL中
MOV[BX+1],AH;保存进位
23.编写完整的汇编语言程序,实现两个双字的加法,假设第一个操作数是10008423H,放在2000H处,第二个操作数是2007F00H,放在了3000H处。
DATASEGMENT
ORG2000H
NUM1DD10008423H
CNUMDB?
;存放进位标志
ORG3000H
NUM2DD2007F00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;初始化DS
LEABX,NUM1;取有效地址到BX,以便访问要排序的数
LEASI,NUM2
MOVAX,WORDPTR[BX]
ADDAX,WORDPTR[SI]
MOVWORDPTR[BX],AX
MOVAX,WORDPTR[BX+2]
ADCAX,WORDPTR[SI+2]
MOVWORDPTR[BX+2],AX
MOVAL,0
ADCAL,0
MOVBYTEPTR[BX+4],AL;保存进位原先方括号内为BX+3
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
24.编写完整的汇编语言程序,实现:
把“Hello,LiaochengUniversity”传送到另外一个段的内存单元处,注意:
不准使用movsb/movsw指令。
DATASEGMENT
STR1DB'Hello,LiaochengUniversity'
LENTDB?
DATAENDS
EXTRASEGMENT
STR2DB30DUP(?
)
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
EXTRA
START:
MOVAX,DATA
MOVDS,AX;初始化DS
MOVAX,EXTRA
MOVES,AX
LEASI,STR1;取有效地址到BX,以便访问要排序的数
LEADI,STR2
MOVCX,LENT-STR1
LPTRANS:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
LOOPLPTRANS
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
25.用D命令查看中断向量表,查找int17h对应的中断向量,并把中断向量修改为:
1234H:
5678H。
codesegment
assumecs:
code,ds:
code
start:
xorax,ax
movds,ax
movbx,17h
movcl,2
shlbx,cl
movwordptr[bx],5678h
movwordptr[bx+2],1234h
movah,4ch
int21h
codeends
endstart
26.编写完整的汇编语言程序,把内存3000H:
2000H起30个字节数据传送到内存2000H:
1000H开始处。
datasegment
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,3000h
movds,ax
movsi,2000h
movax,2000h
moves,ax
movdi,1000h
movcx,30
a1:
moval,[si]
moves:
[di],al
incsi
incdi
loopa1
movah,4ch
int21h
codeends
endstart
27.编写完整的汇编语言程序,实现:
显示字符串“HelloWorld!
”,并利用d