汇编语言与接口技术实验报告.docx
《汇编语言与接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言与接口技术实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
汇编语言与接口技术实验报告
汇编语言与接口技术
实验报告
学院:
信息与电子工程学院
专业:
班级:
学号:
姓名:
浙江科技学院
2012-2013学年第1学期
实验1汇编语言程序设计
一、实验目的
1.熟悉MASM6.11汇编语言程序开发环境。
2.掌握汇编语言程序的调试方法和常用的调试工具。
二、实验内容
1.安装MASM6.11。
2.设在内存中首地址为BLOCK的区域存有一批数据:
61H,84H,93H,
0C4H,17H,0FFH,52H,2AH。
分别按下列要求编写汇编语言程序:
(1)视该批数据为8位无符号数,采用冒泡法将其按升序排序;
(2)视该批数据为8位有符号数,采用冒泡法将其按升序排序。
三、实验要求
1.根据实验内容编写程序。
2.上机调试程序。
3.记录并分析程序运行结果。
五、程序代码
1.8位无符号数冒泡法排序程序如下:
.modelsmall
.data
ndw8
blockdb61h,84h,93h,0c4h,17h,0ffh,52H,2ah
.stack60h
.code
.startup
movax,@data
movds,ax
movcx,n
deccx
loop1:
movdx,cx
movbx,0
loop2:
moval,block[bx]
cmpal,block[bx+1]
jnacontinue
xchgal,block[bx+1]
movblock[bx],al
continue:
addbx,1
looploop2
movcx,dx
looploop1
.exit
end
2、8位有符号数冒泡排序程序如下
.modelsmall
.data
ndw8
blockdb61h,84h,93h,0c4h,17h,0ffh,52H,2ah
.stack60h
.code
.startup
movax,@data
movds,ax
movcx,n
deccx
loop1:
movdx,cx
movbx,0
loop2:
moval,block[bx]
cmpal,block[bx+1]
jlecontinue
xchgal,block[bx+1]
movblock[bx],al
continue:
addbx,1
looploop2
movcx,dx
looploop1
.exit
end
六、程序运行结果及分析
在命令行debug,反汇编找到初始程序入口0017
寂'命令提示符-d^bu(*xp1-lexe
DX,0B4CDS,DXHX.SSBK,DXBX,1BX.lEX]BX.l
SP,BX
RXEB4C
DS,AK
CX,[00MbJ
UyVBLLLLIUDIUUuOOOUHHHHLODTOOoMMMssssSCMASMMM
eft3ft333323C8E4DDDEEEEDE4D日ftECBlmAE3B3EBB8B2DDDDF90FB88I0BI5I7I9IBIDIF12467ACaHw团00001milljo0-
1^10-R~_M1^1R-01^10_M•■♦>!
■♦■■■■«!
■=盘■■■>!
•■*■■«-♦■■86888868s8888880444-444444444444UBBB-BBBBBBDBBBBB
查看cup寄存器的内容
AX=0OQ0CX=0058DX=00Q0SP=Q0&QBP=Q000SI=800QDI=00ntl
DS=0B38ES=0B38SS=0B4DCS=0B4BIF=0B^U
QB4O:
MM0@BA4CQ£DL0B4C
噂-cfcccccctolo88SB00888
60-00000-00123456700000000
8E19c0
18D048
0DC49
0c418
DAQ300S8210CFF44
38
FF
ME
C30?
0
8E080
WR-丽B8-70B7-0800-6300-6108-8EC7-44S9-54
DID887E2C426FF76
3B9970B2
E8BE188F
DI0E
FF4C46FF
rogranterriinated
d14f7:
G4F7:
Q00G4F7:
U0ia4F7!
00204F7:
00304F7:
00404F7:
00504F7:
B0604F7=0B7B
2474F732AAEB8ftC2C3C324078:
ADOC303E8DDA65681FCE83E
nor(iall
EfiP9ACFlSBC3E80B丽8ADQE85FC7Q6FFES94E?
Z4FD跚EB03
24-7407-8A4G-AAFC-D05fi-2E
34-90
明3CC8E&802EE2D0418AA?
SEA0A7B02C
S0&05cEE3832'78?
90B0EA0-035F60F44B7F5DR72E
实验2系统中断接口实验
、实验目的
1.熟悉可编程中断控制器8259A的使用方法。
2.掌握软、硬件中断的编程技术。
二、实验内容
1.软件中断
自定义一个软件中断,中断类型码为78H。
在中断服务程序中,完成
ASCII码到压缩的BCD码的转换,ASCII码内存首地址为ASCADDR,长度为
NUMBER,转换后的BCD码存放在以BCDADDR为首地址的存储区中。
2.硬件中断
设IRQi0~IRQi2(中断类型号为72H~74H)接外部硬件中断源1~3,外部
Interruptserviceroutinen(n=1~3)isrunning
三、实验要求
1.编写主程序和中断服务程序
2.上机调试程序。
3.记录并分析程序运行结果
四、程序说明和程序流程图
否
否
硬件中断
软件中断
五、程序代码
实验1代码:
dsegsegment
ascaddrdb
'0123456789'
numberdb
10
bcdaddrdb
20dup(?
)
dsegends
csegsegment
assume
cs:
cseg,ds:
dseg
start:
push
ds
xor
ax,ax
push
ax
mov
ax,segasc_bcd
mov
ds,ax
mov
dx,offsetasc_bcd
mov
ax,2578h
int
21h
int
78h
retf
asc_bcdproc
mov
ax,dseg
mov
ds,ax
mov
si,offsetascaddr
mov
di,offsetbcdaddr
mov
ch,number
shr
ch,1
mov
cl,4
cont:
movax,[si]
andal,0fh
shlah,cl
oral,ah
mov[di],al
addsi,2
incdi
decch
jnzcont
iret
asc_bcdendp
cseg
ends
endstart
实验2代码:
dseg
segment
displ
db'Interruptserviceroutine1isrunning...',0ah,0dh,'$'
disp2
db'Interruptserviceroutine2isrunning...',0ah,0dh,'$'
disp3
db'Interruptserviceroutine3isrunning...',0ah,0dh,'$'
dseg
ends
cseg
segment
assumecs:
cseg,ds:
dseg
start:
pushds
xorax,ax
pushax
movax,segisraddl
movds,ax
movdx,offsetisraddl
movintmovmovmovmovintmovmovmovmovintinandoutkeyin:
mov
intcmpjzcmpjzcmpjzcmpjzjmpservel:
intjmp
ax,2572h
21h
ax,segisradd2
ds,ax
dx,offsetisradd2
ax,2573h
21h
ax,segisradd3
ds,ax
dx,offsetisradd3
ax,2574h
21h
al,0a1h
al,11100011b
0a1h,al
ah,0
16h
al,'1'
serve1
al,'2'
serve2
al,'3'
serve3
al,'q'
exit
keyin
72h
keyin
serve2:
int
73h
jmp
keyin
serve3:
int
74h
jmp
keyin
exit:
retf
israddl
proc
push
ds
push
ax
mov
ax,segdisp1
mov
ds,ax
mov
dx,offsetdisp1
mov
ah,9
int
21h
;mov
al,20h
;out
0a0h,al
pop
ax
pop
ds
iret
israddl
endp
isradd2proc
push
ds
push
ax
mov
ax,segdisp2
mov
ds,ax
mov
dx,offsetdisp2
mov
ah,9
int
21h
;mov
al,20h
;out
poppopiret
isradd2endp
isradd3proc
push
pushmov
movmov
movint
;mov
;out
poppopiret
isradd3endpcsegendsend
0a0h,al
ax
ds
ds
ax
ax,segdisp3
ds,ax
dx,offsetdisp3
ah,9
21h
al,20h
0a0h,al
ax
ds
start
六、程序运行结果及分析
实验1内存结果
MicroscftUindousXP[版本S.1.2600]版权所有1985-2001MicrosoftCorp.
C:
XDocumentsandSettingsXAdministrator^E:
E:
\>cdMASM611
E:
\MftSMGll>njlexp2~2*d?
nk
E:
\msrKllMBbii0
exp2-2.exe
-U
BB51:
0000
1E
PUSH
DS
0B51:
33C8
KOR
0B51:
:
0003
即
PUSH
怵
0B51:
6004
B8510B
MOU
AX/BS1
0B51:
Q007
8ED8
HOU
DS^AX
0B51:
@069
BA5400
MOU
D»,00S4
丽。
C
DS7295
HOU
AM,2572
0B51:
:
0Q0F
CD21
IHT
21
0B51:
6011
B8510B
MOU
AK,GIH51
OB51:
0014
SFDB
MOU
DS,AX
0B51:
0016
BA6500
MOU
叽。
眦
HBS1:
Bfi?
325
MOU
AX,2573
0B51:
001C
CD21
IHT
21
0B51:
601E
B8510B
MOU
AK.0B51
实验3键盘接口实验
一、实验目的
1.了解键盘接口的工作原理。
2.掌握直接在硬件基础上编写键盘处理程序的方法。
3.熟悉键盘的BIOS和DOS功能调用。
二、实验内容
设计一个中断方式的用户键盘处理程序,其功能是直接从数据端口(8255的PA端口,地址为60H)读取键盘的扫描码,并通过换码指令XLAT将扫描码转换为ASCII字符显示在屏幕上。
当程序运行时,可通过键入ESC键,使键盘的管理在用户键盘处理程序和系统键盘处理程序(INT09H)之间进行切换。
三、实验要求
1.编写主程序和中断服务程序。
2.上机调试程序。
3.记录并分析程序运行结果。
四、程序说明和程序流程图
五、主程序和中断服务程序代码
cseg
segment
start:
org
assume
jmpinstall
100h
cs:
cseg
flag
db
0
oldint
dd
?
scantabdb
db
db
db
db
db
0,0,'1234567890-=',08h,0
'QWERTYUIOP[]',0dh,0
'ASDFGHJKL;',0,0,0,0
'ZXCVBNM,./',0,0,0,20h
13dup(0)
'789-456+1230#'
kbint:
pushpushpushpushpopsti
movintestjnzpushin
orout
ax
bx
ds
cs
ds
bx,offsetscantab
al,60h
al,80h
keyend
ax
al,61h
al,80h
61h,al
and
al,7fh
out
61h,al
pop
ax
cmp
al,01h
jnz
disp
inc
flag
disp:
test
flag,01h
jz
user
pop
ds
pop
bx
pop
ax
jmp
cs:
oldint
user:
xlat
cmp
al,0
jz
keyend
mov
ah,14
int
10h
mov
al,0dh
int
10h
mov
al,0ah
int
10h
keyend:
mov
al,20h
out
20h,al
pop
ds
pop
bx
pop
ax
iret
install:
cli
pushpopmovintcmpjnzintload:
mov
movmovmovintinandoutstimovintcsegends
end
cs
ds
ax,3509h
21h
bx,offsetkbint
load
20h
wordptroldint,bx
wordptroldint+2,es
dx,offsetkbint
ax,2509h
21h
al,21h
al,11111101b
21h,al
dx,offsetinstall
27h
start
六、程序运行结果及分析
1.当执行程序后,输入小写字母显示大写,键入ESC后切换到操作系统自己的中断
显示小写。
eCmmandProapt
□(x|
0、ERTYgDF■
实验4显示器接口实验
一、实验目的
1.了解显示器接口的工作原理。
2.熟悉显示器的BIOS和DOS功能调用。
二、实验内容
在屏幕上显示一张移动的笑脸”。
笑脸”字符的ASCII码为01H或02H,要使笑脸”动起来,可按如下步骤编程:
1.屏幕上显示笑脸”;
2.延迟一段时间;
3.活除笑脸”可用活除部分屏幕或在笑脸”位置显示空字符的方法实现);
4.改变笑脸”的行、列坐标;
5.返回第1步,重复上述过程。
三、实验要求
1.根据实验内容编写程序。
2.上机调试程序。
3.记录并分析程序运行结果。
四、程序说明和程序流程图
五、程序代码
stack
segment
db
256dup
(1)
stack
ends
code
segment
move_face
proc
far
assume
cs:
code,ds:
stack
start:
push
ds
sub
ax,ax
push
ax
mov
ah,15
int
10h
mov
ah,0
mov
al,1
int
10h
mov
cx,1
mov
dx,0
sti
move_cursor:
mov
ah,2
int
10h
mov
al,1
mov
ah,10
int
10h
call
delay
sub
al,al
mov
ah,10
int
10h
inc
dh
inc
dl
cmp
dh,25h
jne
move_cursor
ret
move_face
endp
delay
proc
push
bx
push
cx
push
dx
mov
ah,0
int
1ah
add
dx,9
mov
bx,dx
redo:
int
1ah
cmp
dx,bx
jne
redo
pop
dx
pop
cx
pop
bx
ret
delay
endp
code
ends
end
六、程序运行结果及分析
实验5串行通信接口实验
一、实验目的
1.熟悉可编程申行通信接口8250A的使用方法。
2.掌握申行通信接口的编程技术。
二、实验内容
1.
可采用三线式连接方
、波特率为9600;双
当按下字符'q'时,
两台微机利用COM1(申行口1)进行查询式通信,法。
双机通信的要求如下:
7位数据位、偶校验、1位停止位机同时运行通信程序,一方键入的字符在另一方的屏幕上显示结束通信返回DOS。
2.用中断方式实现上述1的功能。
3.用BIOS调用发送和接收字符。
三、实验要求
1.编写查询式通信程序。
2.编写中断式通信程序。
3.编写用BIOS调用实现的自发自收的通信程序。
4.上机调试程序。
5.记录并分析程序运行结果。
四、程序说明和程序痂程图
初始化8250
查询方式发送
五、程序代码
实验1代码:
scomsegmentparastack'scom'
db256dup(0)
scomends
dcomsegment
db50dup(?
)
dcomends
ccomsegmentparapublic'ccom'
startprocfar
assumecs:
ccom,ss:
scom,ds:
dcom
pushxorpushmovmovoutmovmovoutincmovoutmovmovoutincmovoutmovmovout
cont:
mov
intestjnztestjnztest
ds
ax,ax
ax
dx,3fbh
al,10000000b
dx,al
dx,3f8h
al,0ch
dx,al
dx
al,0
dx,al
dx,3fbh
al,00011010b
dx,al
dx
al,00010011b
dx,al
dx,3f9h
al,0
dx,al
dx,3fdh
al,dx
al,00011110b
error
al,00000001b
delre
al,00100000b
jz
cont
mov
ah,1
int
16h
jz
cont
mov
ah,0
int
16h
cmp
al,'q'
jz
return
mov
dx,3f8h
out
dx,al
jmp
cont
mov
dx,3f8h
in
al,dx
and
al,01111111b
push
ax
mov
bl,0
mov
ah,0eh
int
10h
pop
ax
cmp
al,0dh
jnz
cont
mov
al,0ah
mov
bl,0
mov
ah,0eh
int
10h
jmp
cont
mov
dx,3f8h
in
al,dx
delre:
error:
moval,'?
'
movbl,0
movah,0eh
int10h
jmpcont
return:
ret
startendp
ccomends
endstart
实验3代码:
scomsegmentparastack'scom'
db256dup(0)
scomends
dcomsegment
db50dup(?
)
dcomends
ccomsegmentparapublic'ccom'
startprocfar
assumecs:
ccom,ss:
scom,ds:
dcom
pushds
xorax,ax
pushax
movah,0
moval,11111010b
movdx,0
int14h
cont:
mov
ah,1
int
16h
jz
cont
mov
ah,0
int
16h
cmp
al,'q'
jz
exit
mov
ah,1
int
14h
mov
ah,2
int
14h
mov
bl,0
mov
ah,0eh
int
10h
cmp
al,0dh
jnz
cont