微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日
微机原理与接口技术 实验二 汇编语言程序设计2 朱华贵 2015年11月06日
实验任务1 编写程序:若在一片内存储区中有一字符串,起始地址为STRING。字符串中有字母和数字两种符号,要求把其中的字母和数字符号分开,分别放在同一段的两个空间,存放字母的空间起始地址为ZIFU;存放数字符号的空间起始地址为SHUZI。
循环程序结构 循环程序的组成: 1、初始化部分 设置初始值 2、循环工作部分 具体的操作和运算 1、初始化部分 设置初始值 2、循环工作部分 具体的操作和运算 3、循环修改部分 为执行下一循环而修改某些参数 4、循环控制部分 判断循环继续还是结束
(1)分析问题 可设SI为原字符串指针,设DI和BX分别为存放数字和字母的目标区指针,使用LODS指令把原数据取至AL中,然后测试其是字母还是数字符号,若是字母,则用STOSB指令送到字母区;若是数字,则可以先把DI与BX交换,然后再用STOSB指令送至数字区,最后再将DI与BX的内容交换过来。用CX来控制循环次数。
(2)流程图
(3)参考程序 DATA SEGMENT STRING DB 'DIDEfe234fef38fj2jf9DE99af3FAE8E83F92fjIjEIFIFQ'; 源字符串 COUNT DW $-STRING ; 字符串长度 ZIFU DB 50 DUP(?),0DH,0AH,'$' ; 字母存放区 SHUZI DB 50 DUP(?),0DH,0AH,'$' ; 数字存放区 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA
START:MOV AX,DATA MOV DS,AX ; DS指向DATA MOV ES,AX ; ES指向DATA MOV SI,OFFSET STRING ; DS:SI指向原字符串 MOV BX,OFFSET ZIFU ; BX指向字母存放区 MOV DI,OFFSET SHUZI ; DI指向数字存放区 MOV CX, COUNT CLD
LOP:LODSB ; 将原字符串中一个字节取至AL,且SI加1 CMP AL,30H ; 判断所取字节为数字符号吗? JB LZIFU ; 不为数字符号时转字母处理 CMP AL,39H JA LZIFU ; 不为数字符号时转字母处理 STOSB ; 是数字符号送数字区,且DI加1 JMP AGAIN LZIFU:XCHG BX,DI ; 交换BX和DI,使DI指向字母字符区 STOSB ; 送字母到字母区,指针增加1 XCHG BX,DI ; BX,DI恢复原值 AGAIN: LOOP LOP ; 所有符号都处理了吗,没有则转LOP;否则,顺序执行
MOV DX,OFFSET ZIFU MOV AH,9 ; 输出字母区 INT 21H MOV DX,OFFSET SHUZI INT 21H ; 输出数字区 MOV AH,4CH INT 21H ; 返回DOS系统 CODE ENDS END START
实验任务2 实时时钟显示 根据COMS RAM实时钟信息存放位置表,是编写程序显示当前的时间,格式为时时:分分:秒秒。
COMS RAM实时钟信息存放位置表 偏移地址 信息内容 秒 7 日 1 报警秒 8 月 2 分 9 年 3 报警分 0A 状态寄存器A 4 秒 7 日 1 报警秒 8 月 2 分 9 年 3 报警分 0A 状态寄存器A 4 时 0B 状态寄存器B 5 报警时 0C 状态寄存器C 6 星期几 0D 状态寄存器D 32H 日 期 世 纪 可以用INT 1A功能读取或设置这些值。
RT/CMOS RAM操作 访问RT/CMOS RAM的端口地址范围从70H~77H。其 中,70H和71H用来访问标准CMOS RAM 区,72H, 73H用来访问扩展CMOS RAM 区。 MOV AL,06H ;06H是存放"星期几"的单元偏移地址 OUT 70H,AL ;送地址端口 ;JMP $+2 ;芯片I/O延时要求 IN AL,71H ;读数据端口 MOV AH, AL ;AH中存放的是当前“星期几”的信息 ;0表示星期日