[Chapter 14] - [实验14]

;ex14_1.exe
;按指定格式(年/月/日 时:分:秒)在屏幕中显示CMOS RAM中的时间内容

;思路:按P263的(3)中的思路,将地址组在一起,
;再将要提取的单元数组在一起(本例中每个数据只有1字节,所以本步省略),分别喂食给 处理模块

assume cs:code
code segment
;地址编组
s1:	db 9,8,7,4,2,0
;预留字符串内存空间 - 每个字节拆分出2个ASCII
s2: db '--/--/-- --:--:--','$'

;处理模块
	;字节转为ASCII(需具备功能:将任意长度的字节——提取为BCD——再转为DEC十位、个位——再转为ASCII)
		;这么多要显示的字符,不可能用寄存器存储,要在data中预申请内存空间。以$结尾,可调用 int 21的9号子程序
		;接受ds:[si]为源字节,处理得到的结果存储进ds:[di]
start:	mov ax,cs
		mov ds,ax

		mov si,offset s1
		mov di,offset s2

	lp:	mov al,[si]
		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 byte ptr [di],ah;DEC十位
		mov byte ptr [di+1],al;DEC个位

		cmp byte ptr [si],0
		je display

		inc si
		add di,3

		jmp short lp

display:
;显示模块(用到视频缓冲区)
	;int 10h的2号子程序,置光标
	mov ah,2
	mov bh,0
	mov dh,12
	mov dl,30
	int 10h
	;int 21h的9号子程序,在光标处显示字符串
	mov dx,offset s2
	mov ah,9
	int 21h

	mov ax,4c00h
	int 21h
	
code ends
end start


;lp中未使用jcxz是因为中间使用了cl,虽然通过 push cx,使用cl,pop cx,仍可使用jcxz。但代码会变冗长
;ex14_2.exe
;按指定格式(年/月/日 时:分:秒)在屏幕中显示CMOS RAM中的时间内容
;(使用传统单字节传送法)
;思路:按P263的(3)中的思路,将地址组在一起,
;再将要提取的单元数组在一起(本例中每个数据只有1字节,所以本步省略),分别喂食给 处理模块

assume cs:code
code segment
;地址编组
s1:	db 9,8,7,4,2,0
;预留字符串内存空间 - 每个字节拆分出2个ASCII
s2: db '--/--/-- --:--:--','$'

;处理模块
	;字节转为ASCII(需具备功能:将任意长度的字节——提取为BCD——再转为DEC十位、个位——再转为ASCII)
		;这么多要显示的字符,不可能用寄存器存储,要在data中预申请内存空间。以$结尾,可调用 int 21的9号子程序
		;接受ds:[si]为源字节,处理得到的结果存储进ds:[di]
start:	mov ax,cs
		mov ds,ax

		mov si,offset s1
		mov di,offset s2

	lp:	mov al,[si]
		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 byte ptr [di],ah;DEC十位
		mov byte ptr [di+1],al;DEC个位

		cmp byte ptr [si],0
		je display

		inc si
		add di,3

		jmp short lp

display:
;显示模块(用到视频缓冲区),使用传统单字节传送法
	mov ax,0b800h
	mov es,ax

	mov si,offset s2

	mov dh,12
	mov dl,30
	;计算di
	mov al,160
	mul dh;dh*160的结果存入AX
	mov dh,0
	shl dl,1;dl*2的结果存入DX
	add ax,dx
	mov di,ax

	lp1:	cmp byte ptr [si],'$'
			je lp1e;end of lp1
			mov al,[si]
			mov es:[di],al
			inc si
			add di,2
			jmp short lp1

	lp1e:	mov ax,4c00h
			int 21h
	
code ends
end start

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值