zoukankan      html  css  js  c++  java
  • 汇编读取CMOS RAM端口程序

    题目:按照主程序与子程序的结构,输入并编写读出CMOS RAM端口程序,以“年/月/日 时:分:秒”的格式,显示当前时间。

    源程序:

    assume cs:code,ds:data
    data segment
    	db 9,8,7,4,2,0				;储存各时间位置
    	db "yy/mm/dd hh:mm:ss",0	;输出格式
    data ends
    
    code segment
    start:	mov ax,data
    		mov ds,ax	;data段挂载到ds
    		mov bx,0	;bx初始化为零
    		mov si,6	;类似于指针,指向输出格式
    		mov cx,6	;循环6次
    s:		push cx		;将循环次数入栈保存
    		mov al,[bx]	;将ds:[bx]的数据传给al
    		out 70h,al	;将al的值传到70h端口,找到端口地址
    		in al,71h	;将71h存的值传给al,得到对应时间
    		mov ah,al	;保存al的值
    		mov cl,4	;循环四次,为下一行右移做准备
    		shr ah,cl	;二进制右移cl位,得到十位数
    		add ah,30h	;加30h,得到ASCII码
    		and al,0fh	;与00001111做与运算,得到个位数
    		add al,30h	;加30h,得到ASCII码
    		mov [si],ah	;将ah的值传给ds:[si],例如yy的第一个y
    		mov [si+1],al	;将al的值传给下一位,yy的第二个y
    		inc bx		;bx加一,指向第二个时间位置
    		add si,3	;跳到下一个位置,yy到mm需要跳三次
    		pop cx		;将保存的循环次数传回cx
    		
    		loop s		;循环cx次
    		mov si,6	;类似于指针,指向输出格式
    		mov dl,12	;保存行数,12行
    		mov dh,20	;保存列数,20列
    		mov cl,17h	
    		call show	
    		mov ax,4c00h
    		int 21h
    		
    		;按格式输出
    show:	push es
    		push bx
    		push cx
    		push si
    		push ax
    		mov ax,0b800h	
    		mov es,ax	
    		mov al,160	
    		mul dh		
    		mov bx,ax	
    		mov al,2	
    		mul dl		
    		add bx,ax	
    		mov al,cl	
    m0:		mov cl,[si]	
    		mov ch,0	
    		jcxz m1		
    		mov es:[bx],cl	
    		mov es:[bx+1],al	
    		inc si		
    		add bx,2	
    		loop m0
    		
    		jmp m1	
    m1:		pop ax
    		pop si
    		pop cx
    		pop bx
    		pop es
    		ret
    code ends
    end start
    
    

    运行结果截图:

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/godfriend/p/10981990.html
Copyright © 2011-2022 走看看