0%

《汇编语言》(第四版) 实验 14

《汇编语言(第四版)》 . 王爽著 . 清华大学出版社 . 2019

实验 14 访问 CMOS RAM

端口的读写

在访问端口时,CPU 通过端口地址来定位端口,在 PC 系统中,CPU 最多可以定位 64 KB 个不同的端口。则端口地址的范围为 0 ~ 65535

1
2
in                      ;从端口读取数据
out ;往端口写入数据

在 in 和 out 指令中,只能使用 ax 或 al 来存放从端口中读入的数据或要发送到端口的数据。访问 8 位端口时用 al,访问 16 位端口时用 ax

检测点 14.1

1
2
3
mov al,2
out 70h,al
in al,71h
1
2
3
4
mov al,2
out 70h,al
mov al,0
out 71h,al

检测点 14.2

shl 和 shr 是逻辑移位指令,其中
shl 是逻辑左移指令,它的功能为:
1)将一个寄存器或内存单元中的数据向左移位
2)将最后移出的一位写入 CF 中
3)最低位用 0 补充
shl 是逻辑右移指令,它的功能为:
1)将一个寄存器或内存单元中的数据向右移位
2)将最后移出的一位写入 CF 中
3)最高位用 0 补充
若移动位数大于 1,则必须将移动位数放在 cl 中

1
2
3
4
5
6
7
8
9
10
11
12
13
;计算 (ax)*10
assume cs:code
code segment
start:mov ax,1
shl ax,1
mov dx,ax ;(ax)*2
mov cl,2
shl ax,cl ;(ax)*8
add dx,ax ;(ax)*10
mov ax,4c00h
int 21h
code ends
end start
用 Debug 跟踪程序运行

实验任务

BCD 码是以 4 位二进制数表示十进制数码的编码方法
十进制数码与其对应的 BCD 码:
0:0000, 1:0001, 2:0010, 3:0011, 4:0100,
5:0101, 6:0110, 7:0111, 8:1000, 9:1001

一个字节可表示两个 BCD 码,在 CMOS RAM 存储时间信息的单元中,存储了用两个 BCD 码表示的两位十进制数,高 4 位的 BCD 码表示十位,低 4 位的 BCD 码表示个位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0 ;端口地址
db '/','/',' ',':',':',' ' ;分隔符
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov cx,6
mov bx,160*12
mov di,40*2

s: push cx
mov al,ds:[si] ;开始读 BCD 码
out 70h,al
in al,71h

mov ah,al ;将读出的一个字节分为两个表示 BCD 码值的数据
mov cl,4
shr ah,cl ;逻辑右移取高 4 位 BCD 码
and al,00001111b ;做与运算取低 4 位 BCD 码

add ah,30h ;BCD 码值 + 30h = 十进制数对应的 ASCII 码
add al,30h

mov dh,2 ;黑底绿字
mov dl,ah
mov es:[bx+di],dx
mov dl,al
mov es:[bx].2h[di],dx
mov dl,ds:[si].6h
mov es:[bx].4h[di],dx
inc si
add di,6
pop cx
loop s

mov ax,4c00h
int 21h
code ends
end start
测试程序运行


汇编语言实验合集

汇编语言实验合集

实验 1 查看 CPU 和内存,用机器指令和汇编指令编程
实验 2 用机器指令和汇编指令编程
实验 3 编程、编译、连接、跟踪
实验 4 [bx] 和 loop 的使用
实验 5 编写、调试具有多个段的程序
实验 6 实践课程中的程序
实验 7 寻址方式在结构化数据访问中的应用
实验 8 分析一个奇怪的程序
实验 9 根据材料编程
实验 10 编写子程序
课程设计 1
实验 11 编写子程序
实验 12 编写 0 号中断的处理程序
实验 13 编写、应用中断例程
实验 14 访问 CMOS RAM
实验 15 安装新的 int9 中断例程
实验 16 编写包含多个功能子程序的中断例程
实验 17 编写包含多个功能子程序的中断例程
课程设计 2