汇编语言与接口技术实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言与接口技术
实验报告
学院:信息与电子工程学院
专业:
班级:
学号:
姓名:
浙江科技学院
2012-2013学年第1学期
实验1 汇编语言程序设计
一、实验目的
1. 熟悉MASM 6.11汇编语言程序开发环境。

2. 掌握汇编语言程序的调试方法和常用的调试工具。

二、实验内容
1. 安装MASM 6.11。

2. 设在内存中首地址为BLOCK的区域存有一批数据:61H,84H,93H,0C4H,17H,0FFH,52H,2AH。

分别按下列要求编写汇编语言程序:
(1) 视该批数据为8位无符号数,采用冒泡法将其按升序排序;
(2) 视该批数据为8位有符号数,采用冒泡法将其按升序排序。

三、实验要求
1. 根据实验内容编写程序。

2. 上机调试程序。

3. 记录并分析程序运行结果。

五、程序代码
1. 8位无符号数冒泡法排序程序如下:
.model small
.data
n dw 8
block db 61h,84h,93h,0c4h,17h,0ffh,52H,2ah .stack 60h
.code
.startup
mov ax,@data
mov ds,ax
mov cx,n
dec cx
loop1: mov dx,cx
mov bx,0
loop2: mov al,block[bx]
cmp al,block[bx+1]
jna continue
xchg al,block[bx+1]
mov block[bx],al
continue: add bx,1
loop loop2
mov cx,dx
loop loop1
.exit
end
2、8位有符号数冒泡排序程序如下
.model small
.data
n dw 8
block db 61h,84h,93h,0c4h,17h,0ffh,52H,2ah .stack 60h
.code
.startup
mov ax,@data
mov ds,ax
mov cx,n
dec cx
loop1: mov dx,cx
mov bx,0
loop2: mov al,block[bx]
cmp al,block[bx+1]
jle continue
xchg al,block[bx+1]
mov block[bx],al
continue: add bx,1
loop loop2
mov cx,dx
loop loop1
.exit
end
六、程序运行结果及分析
在命令行debug,反汇编找到初始程序入口0017
查看cup寄存器的内容
实验2 系统中断接口实验
一、实验目的
1. 熟悉可编程中断控制器8259A的使用方法。

2. 掌握软、硬件中断的编程技术。

二、实验内容
1. 软件中断
自定义一个软件中断,中断类型码为78H。

在中断服务程序中,完成ASCII 码到压缩的BCD码的转换,ASCII码内存首地址为ASCADDR,长度为NUMBER,转换后的BCD码存放在以BCDADDR为首地址的存储区中。

2. 硬件中断
设IRQ
10~ IRQ
12
(中断类型号为72H~74H)接外部硬件中断源1~3,外部中断
源的中断请求通过按数字键“1”~“3”模拟产生。

在中断服务程序中显示“Interrupt service routine n(n=1~3) is running…”字样。

三、实验要求
1. 编写主程序和中断服务程序。

2. 上机调试程序。

3. 记录并分析程序运行结果。

四、程序说明和程序流程图
软件中断


硬件中断
五、程序代码
实验1代码:
dseg segment
ascaddr db '0123456789' number db 10
bcdaddr db 20 dup(?)
dseg ends
cseg segment
assume cs:cseg,ds:dseg start: push ds
xor ax,ax
push ax
mov ax,seg asc_bcd
mov ds,ax
mov dx,offset asc_bcd mov ax,2578h
int 21h
int 78h
retf
asc_bcd proc
mov ax,dseg
mov ds,ax
mov si,offset ascaddr mov di,offset bcdaddr mov ch,number
shr ch,1
mov cl,4
and al,0fh
shl ah,cl
or al,ah
mov [di],al
add si,2
inc di
dec ch
jnz cont
iret
asc_bcd endp
cseg ends
end start
实验2代码:
dseg segment
disp1 db 'Interrupt service routine 1 is running...',0ah,0dh,'$' disp2 db 'Interrupt service routine 2 is running...',0ah,0dh,'$' disp3 db 'Interrupt service routine 3 is running...',0ah,0dh,'$' dseg ends
cseg segment
assume cs:cseg,ds:dseg
start: push ds
xor ax,ax
push ax
mov ax,seg isradd1
mov ds,ax
mov dx,offset isradd1
int 21h
mov ax,seg isradd2
mov ds,ax
mov dx,offset isradd2 mov ax,2573h
int 21h
mov ax,seg isradd3
mov ds,ax
mov dx,offset isradd3 mov ax,2574h
int 21h
in al,0a1h
and al,11100011b
out 0a1h,al
keyin: mov ah,0
int 16h
cmp al,'1'
jz serve1
cmp al,'2'
jz serve2
cmp al,'3'
jz serve3
cmp al,'q'
jz exit
jmp keyin
serve1: int 72h
jmp keyin
serve2: int 73h
jmp keyin
serve3: int 74h
jmp keyin
exit: retf
isradd1 proc
push ds
push ax
mov ax,seg disp1
mov ds,ax
mov dx,offset disp1 mov ah,9
int 21h
; mov al,20h
; out 0a0h,al
pop ax
pop ds
iret
isradd1 endp
isradd2 proc
push ds
push ax
mov ax,seg disp2
mov ds,ax
mov dx,offset disp2 mov ah,9
int 21h
; mov al,20h
; out 0a0h,al
pop ax
pop ds
iret
isradd2 endp
isradd3 proc
push ds
push ax
mov ax,seg disp3
mov ds,ax
mov dx,offset disp3 mov ah,9
int 21h
; mov al,20h
; out 0a0h,al
pop ax
pop ds
iret
isradd3 endp
cseg ends
end start
六、程序运行结果及分析实验1内存结果
实验2:
实验3 键盘接口实验
一、实验目的
1. 了解键盘接口的工作原理。

2. 掌握直接在硬件基础上编写键盘处理程序的方法。

3. 熟悉键盘的BIOS和DOS功能调用。

二、实验内容
设计一个中断方式的用户键盘处理程序,其功能是直接从数据端口(8255的PA 端口,地址为60H)读取键盘的扫描码,并通过换码指令XLAT将扫描码转换为ASCII 字符显示在屏幕上。

当程序运行时,可通过键入ESC键,使键盘的管理在用户键盘处理程序和系统键盘处理程序(INT 09H)之间进行切换。

三、实验要求
1. 编写主程序和中断服务程序。

2. 上机调试程序。

3. 记录并分析程序运行结果。

四、程序说明和程序流程图
五、主程序和中断服务程序代码
cseg segment
org 100h
assume cs:cseg
start: jmp install
flag db 0
oldint dd ?
scantab db 0,0,'1234567890-=',08h,0 db 'QWERTYUIOP[]',0dh,0
db 'ASDFGHJKL;',0,0,0,0
db 'ZXCVBNM,./',0,0,0,20h db 13 dup(0)
db '789-456+1230#'
kbint: push ax
push bx
push ds
push cs
pop ds
sti
mov bx,offset scantab
in al,60h
test al,80h
jnz keyend
push ax
in al,61h
or al,80h
out 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
push cs
pop ds
mov ax,3509h
int 21h
cmp bx,offset kbint
jnz load
int 20h
load: mov word ptr oldint,bx
mov word ptr oldint+2,es
mov dx,offset kbint
mov ax,2509h
int 21h
in al,21h
and al,11111101b
out 21h,al
sti
mov dx,offset install
int 27h
cseg ends
end start
六、程序运行结果及分析
1.当执行程序后,输入小写字母显示大写,键入ESC后切换到操作系统自己的中断,输入小写显示小写。

实验4 显示器接口实验
一、实验目的
1. 了解显示器接口的工作原理。

2. 熟悉显示器的BIOS和DOS功能调用。

二、实验内容
在屏幕上显示一张移动的“笑脸”。

“笑脸”字符的ASCII码为01H或02H,要使“笑脸”动起来,可按如下步骤编程:
1. 屏幕上显示“笑脸”;
2. 延迟一段时间;
3. 清除“笑脸”(可用清除部分屏幕或在“笑脸”位置显示空字符的方法实现);
4. 改变“笑脸”的行、列坐标;
5. 返回第1步,重复上述过程。

三、实验要求
1. 根据实验内容编写程序。

2. 上机调试程序。

3. 记录并分析程序运行结果。

四、程序说明和程序流程图
五、程序代码
stack segment
db 256 dup(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. 两台微机利用COM1(串行口1)进行查询式通信,可采用三线式连接方法。

双机通信的要求如下:7位数据位、偶校验、1位停止位、波特率为9600;双机同时运行通信程序,一方键入的字符在另一方的屏幕上显示,当按下字符'q'时,结束通信返回DOS。

2. 用中断方式实现上述1的功能。

3. 用BIOS调用发送和接收字符。

三、实验要求
1. 编写查询式通信程序。

2. 编写中断式通信程序。

3. 编写用BIOS调用实现的自发自收的通信程序。

4. 上机调试程序。

5. 记录并分析程序运行结果。

查询方式发送
查询方式验收
五、程序代码
实验1代码:
scom segment para stack 'scom'
db 256 dup(0)
scom ends
dcom segment
db 50 dup(?)
dcom ends
ccom segment para public 'ccom'
start proc far
assume cs:ccom,ss:scom,ds:dcom
xor ax,ax
push ax
mov dx,3fbh
mov al,10000000b out dx,al
mov dx,3f8h
mov al,0ch
out dx,al
inc dx
mov al,0
out dx,al
mov dx,3fbh
mov al,00011010b out dx,al
inc dx
mov al,00010011b out dx,al
mov dx,3f9h
mov al,0
out dx,al
cont: mov dx,3fdh
in al,dx
test al,00011110b jnz error
test al,00000001b jnz delre
test al,00100000b
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
delre: 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
error: mov dx,3f8h
in al,dx
mov bl,0
mov ah,0eh
int 10h
jmp cont
return: ret
start endp
ccom ends
end start
实验3代码:
scom segment para stack 'scom'
db 256 dup(0)
scom ends
dcom segment
db 50 dup(?)
dcom ends
ccom segment para public 'ccom'
start proc far
assume cs:ccom,ss:scom,ds:dcom push ds
xor ax,ax
push ax
mov ah,0
mov al,11111010b
mov dx,0
int 14h
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 mov al,0ah mov bl,0 mov ah,0eh int 10h
jmp cont exit: retf
start endp
ccom ends
end start
六、程序运行结果及分析实验1:
实验3:。

相关文档
最新文档