汇编输入输出程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入输出程序设计
一、实验目的
1)掌握输入输出指令的使用;
2)了解对CMOS RAM的读写
3)访问CMOS RAM,编程,以“年/月/日时:分:秒”的格式,显示当前的
日期、时间。
观察并记录运行结果。
二、实验原理及基本技术路线图(方框原理图)
程序源代码:
assume cs:code,ds:data
data segment
time db 'yy/mm/dd hh:mm:ss',0dh,0ah,'$'
cmos db 9,8,7,4,2,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov si,0
mov cx,6
a: push cx
mov al,cmos[bx]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr al,cl
and ah,0fh
add ax,3030h
mov word ptr time[si],ax
inc bx
add si,3
pop cx
loop a
mov ah,6
mov al,0
mov bh,1fh
mov cx,0
mov dx,184fh
int 10h
mov ah,2
mov bh,0
mov dh,13
mov dl,32
int 10h
mov dx,offset time
mov ah,9
int 21h
mov ax,4c00h
int 21h
code ends
end start
三、所用仪器、材料(设备名称、型号、规格等)
Masm 6.0,debug。
四、实验方法、步骤
1.使用masm6.0将所写的程序进行编译,生成exe文件,运行。
2.使用debug调试生成的exe文件,使用t命令进行单步调试。
3.记录下关键位置的调试截图。
五、实验过程原始记录(数据、图表、计算等)
1.经过masm编译的程序b6.exe,得到程序运行结果
2.r命令查看寄存器初始状态
3.u命令进行反汇编
4.使用t命令进行单步调试
(1)设置好存储时间coms端口号和存放时间的内存位置的指针
(2)从coms ram的9号单元读出当前年份的BCD码
要读取CMOS RAM的信息,先要向地址端口70h写入要访问的单元的地址:
(3)从数据端口71h中取得指定单元中的数据,相应的数据输入到AL中,同时将AL中的数据放入到AH中:
(4)将AL中的数据右移4位,并且将AH的高4位置0,得到年份BCD码对于的十进制数据:
(5)将AX中的数据加上3030H,得到十进制数据的ASCII码,并存放的time 数据段中:
(6)完成年份的取出和存放,将BX和SI指向的位置改变,BX指向coms的下一个单元,即8号单元,取出月份,SI指向存放月份的位置,即[SI+3];转入第二次循环,取出并存放月份。
(7)从cmos的8号单元取出月份
(8)取出的月份的BCD码放到AL中:
(9)完成转换工作,存放到DS:0003位置,进入下一次循环:
(10)选择cmos的7号单元,取出日期:
(11)完成转换,存放到DS:0006位置,进入下一次循环:
(12)选择cmos的4号单元,取出时:
(13)完成转换,存放到DS:0009位置,进入下一次循环:
(14)选择cmos的2号单元,取出分:
(15)完成转换,将结果存放到DS:0012位置,进入下一次循环:
(16)选择coms的0号单元,取出秒:
(17)完成转换,将结果存放到DS:0015位置,循环结束显示结果:
(18)使用BIOS调用int 10H的6号功能,初始化窗口,并设置窗口属性为蓝底白字,日期时间显示在窗口中间。
设置AH=6,调用6号功能,AL=0初始化窗口:
(19)初始化完成,窗口状态为:
(20)使用BIOS调用int 10h的2号功能,将光标设置在窗口中央:
5、得到日期和时间显示结果:
6、程序运行结束:。