文档介绍:第二章软件仿真实验 2 .1 实验 1 :汇编程序实验 1 示例程序实验(1 )实验内容在 Keil 环境下建立工程, 并将以下程序加入工程, 构造工程, 并运行可执行程序, 记录执行结果。分析程序功能。(2 ) 0000H AJMP 0030H MAIN: MOV SP,#60H ; 堆栈底设置在 60H MOV A,#0H ;A 置零 MOV R1,#30H ; 起始单元地址为 30H MOV R7,#10H ;R7 用于计数,初值为 10H LOOP1: ;将 30H 开始的 16 个内存单元置零 MOV ***@R1,A INC R1 DJNZ R7,LOOP1 NOP MOV R1,#30H MOV R7,#10H ; 重新赋计数初值和起始单元地址 LOOP: ;将0到F 赋给 30H 开始的 16 个单元中; MOV ***@R1,A INC R1; 地址自增 INC A ;A 自增 DJNZ R7,LOOP SJMP $ END (3 )示例程序的功能将 30H 开始的 16 个内存单元清 0 ,然后将值 0到F 赋给 30H 开始的 16 个单元。运行结果截图 自我完成实验(1 )实验内容将片内 RAM 30H 单元中的 8 位二进制数转换成 10 进制数。希望转换后的结果保存于 31H 和 32H , 31H 低4 位存放个位,高 4 位存放十位, 32H 低4 位存放百位,高 4 位为 0。程序流程图: (2 ) 0000h ajmp 0030h main: mov 30h,#68h ; 待转化的数存于 30H 单元 mov a,30h ; 取数 mov b,#64h ;100 赋给 B div ab; 待转化的数除以 100 clr 32h ;清 32H 单元 mov 32h,a ; 商为十进制百位,存于 32H mov a,b mov b,#0ah div ab; 余数赋给 A ,余数除以 10 swap a; 商为个位,自交换后存于 A 高四位 add a,b mov 31h,a ;A,B 相加可以将十进制数个位十位存于 31H 单元 sjmp $ end (3 )实验过程 1 、新建工程: ; 2 、设置工程: 属性,将其晶振频率设置为 12MHz ,选择输出可执行文件,仿真方式为“ Use Simulator ”; 3、建立源程序, 编写程序, 程序编写思路: 将待转化数存于 30H 单元, 取出待转化的数给 A, 将待转化的数除以 100 ,商位于 A ,余数在 B。 32H 单元清零,前一步所得的商为十进制百位, 将其存于 32H 单元, 取余数除以 10,A 中的商为待转化十进制数的十位。A 自交换, 十位的值存于 A 高四位, 将其和 B 中的值相加, 和存于 31H 单元, 即实现了十进制数个位十位存于 31H 单元。 4 、将源程序保存为: ,并且添加到工程中; 5 、编译源程序,如果输入有误进行修改,直至编译通过,生成可执行程序: ; 6 、运行程序,并用存储器观察窗口,观察内部 RAM 30H , 31H,32H 单元的值。(4 )程序运行结果截图 2 .2 实验 2 :汇编程序实验 2 示例程序实验(1 )实验内容在 Keil 环境下建立工程, 并将以下程序加入工程, 构造工程, 并运行可执行程序, 记录执行结果。分析程序功能。(2) 0000H AJMP 0030H MAIN: MOV 30H, #45H ; 待操作数存于 30H 单元 MOV A, 30H ;30H 单元中的数送 A ANL A,#0FH ; 高四位清零,保留低四位 MOV 31H,A ; 结果存于 31H 单元 MOV A,30H ; 重新取待操作数至 A ANL A, #0F0H ; 低四位清零,保留高四位 SWAP A; 自交换实现待操作数的高四位表示的二进制数存于 A MOV B, #10 MUL AB ; 待操作数的高四位表示的二进制数乘以 10 ADD A,31H ; 待操作数的高四位表示的二进制数乘以 10 后和低四位表示的二进制数相加 MOV 31H,A ; 存结果于 31H 单元 SJMP $ END (3 )示例程序的功能: 实现求得一个八位二进制数高四位表示的二进制数乘以 10 和低四位表示的二进制数的和。如为两位压缩 BCD 码,则实现求得相应十进制数值,并以二进制形式存于内存单元中。(4 )运行结果截图 自我完成实验(1 )实验内容将片内 RAM 30H 开始的 32 个单元中分布着随机的有符号 8 位二进制数, 请按从小到大的顺序进行排序,排序