【汇编语言 王爽】实验14代码

实验需求如下:

编程,以“年/月/日 时:分:秒”的格式显示时间

注意:CMOS RAM中储存着系统的配置信息,除了保存时间信息的单元外,不要向其他单元写入内容,否则将引起一些系统错误

代码如下:

【注意】int 7ch为实验13(1)中自定义的子程序,功能为“在屏幕上显示以0结尾的一个字符串”,代码详见:【汇编语言 王爽】实验13代码 中的实验(1)lab13-1.Asm 代码

assume cs:code
code segment

char:
db "yy/mm/dd hh:mm:ss",0

unit_no:
db 9,8,7,4,2,0

start:
;ds:bx指向unit_no
;ds:si指向char
mov ax,cs
mov ds,ax
mov bx,offset unit_no
mov si,offset char

mov cx,6
s:
mov al,[bx]
;从CMOS处获取时间
call get_time
;修改char字符串中的值
mov [si],ah
inc si
mov [si],al
add si,2
;ds:bx指向下一个时间单位
inc bx
loop s

;设置参数,int 7ch来显示字符串
mov dh,12 ;行号0
mov dl,40 ;列号0
mov cl,2 ;颜色:Green
mov si,offset char ;ds:si指向要显示的字符串首地址
int 7ch

mov ax,4c00h
int 21h

;子程序名称:get_time
;功能:从CMOS RAM中获取相应unit_no的时间
;参数:al=unit_no
;返回值:ah=十位数,al=个位数
get_time:
push cx

;从CMOS中取出相应数值
out 70h,al
in al,71h

;对BCD码值进行处理(移位、+30h),使其转换为ASCII码
;移位
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b

;+30h
add ah,30h
add al,30h

pop cx
ret

code ends
end start

在win 10 dosbox环境下的运行结果(红框中显示系统时间):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的汇编语言程序,实现了将一个字节的数转化为两个十六进制的ASCII码的功能。请注意,这只是一个示例代码,您需要根据实验要求和自己的理解进行修改和完善。另外,由于不同的汇编语言编译器可能存在差异,以下代码可能不适用于所有的编译器,您需要根据自己使用的编译器进行相应的修改。 ``` ; 实验九:调用子程序的实现 ; 将一个字节的数转化为两个十六进制的ASCII码 .model small .stack 100h .data msg db "请输入一个字节的数:$" res db "结果为:$" num db ? hex1 db ? hex2 db ? .code main proc mov ax, @data mov ds, ax ; 输出提示信息 mov ah, 09h lea dx, msg int 21h ; 输入一个字节的数 mov ah, 01h int 21h mov num, al ; 调用子程序,将num转化为两个十六进制的ASCII码 push ax call convert add sp, 2 ; 输出结果 mov ah, 09h lea dx, res int 21h mov ah, 02h mov dl, hex1 int 21h mov dl, hex2 int 21h ; 程序结束 mov ah, 4ch int 21h main endp ; 子程序:将一个字节的数转化为两个十六进制的ASCII码 convert proc ; 将高四位转化为ASCII码 mov ah, num shr ah, 4 cmp ah, 0ah jl skip1 add ah, 37h jmp next1 skip1: add ah, 30h next1: mov hex1, ah ; 将低四位转化为ASCII码 mov ah, num and ah, 0fh cmp ah, 0ah jl skip2 add ah, 37h jmp next2 skip2: add ah, 30h next2: mov hex2, ah ; 子程序结束,返回主程序 ret convert endp end main ``` 希望这个示例代码可以对您有所帮助。如果您还有其他问题或需要进一步的帮助,请随时告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值