作业 5
汇编语言(第3版、第4版)清华大学出版社
王爽著 ,8086CPU
内容如下:
第 1 题:
编写程序,将数据段中的字符串完成大小写转换。字母字符大写转换成
小写,小写转换成大写,其他字符不变。
如:datasg segment
db '
B
a
S
i
c
!
I
n
f
O
r
I
o
n
∗
′
d
a
t
a
s
g
e
n
d
s
程
序
执
行
后
,
数
据
段
中
的
字
符
串
变
成
了
’
BaSic!InfOrIon*' datasg ends 程序执行后,数据段中的字符串变成了’
BaSic!InfOrIon∗′datasgends程序执行后,数据段中的字符串变成了’bAsIC!iNFoRiON*’。
使用 debug 工具调试程序,查看数据段内容如下:
1) 执行转换前,数据段的内容如下图 2
图 2 转换前数据段的内容
2)执行转换后,数据段的内容如下图 3
图 3 转换完成后数据段的内容
第 2 题:访问 CMOS RAM
编程,以“年/月/日 时:分:秒”的格式,显示系统当前的日期、时间(教
材 271 页,实验 14)。
可在 dosbox 环境下运行 zy5_2.exe 文件,观察程序运行效果如下图 4
图 4 显示系统当前的日期时间效果图
代码:
(1)
assume cs:codesg, ds:datasg
datasg segment
db '$BaSic!InfOrIon*'
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,16
s1:
mov al,[bx]
cmp al,96
ja a1
cmp al,64
ja a2
t1:
mov [bx],al
inc bx
loop s1
jmp short e1
a1:
cmp al,123
jb b1
b1:
and al,11011111B
jmp short t1
a2:
cmp al,91
jb b2
b2:
or al,00100000B
jmp short t1
e1:
mov ax,4c00h
int 21h
codesg ends
end start
(2)
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0
db '// :: '
data ends
code segment
start:
call begin
call send
mov ax,4c00h
int 21h
begin:
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
mov di,160*12+30*2
mov bx,0
mov si,6
mov cx,6
mov ah,2+30h
mov es:[di-4],ah
mov ah,0+30h
mov es:[di-2],ah
ret
send:
push cx
mov al,ds:[bx]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov es:[di],ah
mov es:[di+2],al
mov al,ds:[si]
mov es:[di+4],al
add di,6
inc si
inc bx
pop cx
loop send
ret
code ends
end start
(3)动态显示时间,即一直变化
(死循环,loop start即可)
代码如下:
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0
db '// :: '
data ends
code segment
start:
call begin
call send
loop start
mov ax,4c00h
int 21h
begin:
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
mov di,160*12+30*2
mov bx,0
mov si,6
mov cx,6
mov ah,2+30h
mov es:[di-4],ah
mov ah,0+30h
mov es:[di-2],ah
ret
send:
push cx
mov al,ds:[bx]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov es:[di],ah
mov es:[di+2],al
mov al,ds:[si]
mov es:[di+4],al
add di,6
inc si
inc bx
pop cx
loop send
ret
code ends
end start
202204262136二