1、 微机原理与应用课程实验报告微机原理与应用课程实验报告 实验分工: 报告人(签名) 姓名: 学号: 班级: 同组人(签名) 姓名: 学号: 班级: 实验时间:2014 年 12 月 课程设计 1.设计概述 本设计在以上四个实验的基础上,利用所学的知识完成以下编程任务 (1) 在数据段首址为 0100H 开始的内存区内存区 1 1 按从大到小的顺序顺次存入二进 制数 150 共 16 个字节的数据; (2)将上述源区内容传送到目的内存区内存区 2 2(首址为 1100H)中; (3)检验上述传送过程是否正确,如有错误,在紧跟内存区内存区 2 2 后的第一个字后的第一个字 节节开始写入 ASCII
2、 码“ERROR”,否则写入“OK”。 (4)用冒泡法将上述内存区 2 的数据,按从小到大的次序重新排列,排列后 存放在内存区内存区 3 3(开始地址为 2100H)。 (5) 将上述内存区内存区 2 2 和内存区和内存区 3 3 的第的第 100100 个数据个数据分别乘以 2, 并转为 BCD 码, 保存在各自存储区的末尾。再将上述两个 BCD 码相乘,其结果保存在内存区内存区 1 1 的末尾处的末尾处。 2.程序流程图 3.程序代码 code segment assume cs:code ds:data DATA1 db ERROR DATA2 db OK start: mov ax,0
3、100h mov ds ax ;定义数据段地址 mov si 0100h mov cx 10h ;循环次数 mov ax 0fh ;初始数值 intram: mov si,ax inc si dec ax loop intram ;依次存入 15-0 mov si 1100h mov cx 10h mov bx 0100h ;设置断点处 fil:mov al bx mov si,al ;循环置数 inc si inc bx loop fil ;内存区 1 的数据传送到内存区 2 mov si 1100h ;设置断点处 mov di 0100h mov cx,16 ;对比内存区 1 的数据与内存
4、区 2 的数据是否相同 mov cx,16 mov si,0100h mov bx,1100h temp: mov al,si mov dl,bx cmp al,dl jne form inc si inc bx loop temp ;数据如果都相同,说明上述传输过程正确 mov si,offset DATA3 mov di,1110h mov bl,0 mov cx,2 dym: mov bl,cs:si mov di,bl inc si inc di loop dym nop jmp start2 ;如果有一个数据不相同,说明上述传输过程不正确 form: mov si,offset DA
5、TA2 mov di,1110h mov bl,0 mov cx,5 dym1: mov bl,cs:si mov di,bl inc si inc di loop dym1 ;将内存区 2 数据搬移到内存区 3 中 start2: mov si,1100h mov cx,0010h mov bx,2100h mov al,0 mov cx,16 fil2: mov al,si mov bx,al inc si inc bx loop fil2 nop ;用冒泡法将内存区 3 的数据按从小到大重新排列 start1: mov bl,0 mov cx ,16 mov si,2110h dec s
6、i dec cx again: mov al,si cmp al,si-1 jae next xchg al,si-1 mov si,al mov bl,1 next: dec si loop again cmp bl,0 jne start1 nop mov si,1109h mov al,si mov cl,2 mul cl ;结果在 al 中 mov dx,0 mov bx,10 div bx shl al,4 add al,dl ;把二进制数转换成 BCD 码 mov 1112h,al mov si,2109h mov al,si mov cl,2 mul cl ;结果在 al 中 mov dx,0 mov bx,10 div bx