《汇编语言程序设计》课后作业5

本文介绍了两个汇编语言程序,第一个程序用于实现数据段中字符串的大小写转换,通过DEBUG工具验证了转换效果。第二个程序展示了如何访问CMOS RAM并显示系统当前的日期和时间,程序在DOSBox环境下运行并给出了运行效果。同时提供了动态显示时间的代码示例,形成一个无限循环来实时更新时间显示。
摘要由CSDN通过智能技术生成

作业 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!InfOrIondatasgendsbAsIC!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二

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baibai___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值