实验一:汇编语言编程

test1:

编写程序,查找在基本 RAM 20H~4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元

;编写程序,查找在基本 RAM 20H~4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元	
	ORG 0000H
	LJMP START

	ORG 0100H    ;避开启动单元

START:
    MOV A,#00H    ;A代表0的个数,初始值为0
	MOV R0,#20H   ;起始查找地址为20H
	MOV R1,#2FH    ;设定循环次数
LOOP1:
    CJNE @R0,#00H,LOOP2 	  ;判断R0指示地址的内容与00H是否相等,不等,则转入LOOP2
	INC A  				  ;相等,A+1
LOOP2:
    INC R0				   ;地址+1
	DJNZ R1,LOOP1	   ;判断查找是否结束,不结束,转入LOOP1
	MOV  50H,A 
	SJMP $
END

 

test2:

编写程序,将扩展 RAM 0200H~02FFH 中的数据块传送到扩展 RAM0300H~03FFH 单元中

   ORG 0000H
   LJMP START

   ORG 0100H    ;避开启动单元
START:
   MOV DPTR,#0200H  	;将16位地址0200H赋予DPTR
   MOV R0,#00H  	;将地址00H赋予R0
   MOV 80H,#0FFH	;循环次数 

LOOP1:
   MOVX A,@DPTR  		 ;将DPTR指示地址的内容送给A              
   MOV @R0,A   	 ;将A的内容送给R1指示地址
   INC DPTR
   INC R0              
   DJNZ 80H,LOOP1 	 ;判断循环是否结束,不结束,转入LOOP1
   MOV DPTR,#0300H
   MOV R0,#00H
   MOV 80H,#0FFH
LOOP2:
   MOV A,@R0  		 ;将R0指示地址的内容送给A              
   MOVX @DPTR,A   	 ;将A的内容送给DPTR指示地址
   INC DPTR
   INC R0 
   DJNZ 80H,LOOP2	 ;判断循环是否结束,不结束,转入LOOP2

   SJMP $
END

 

test3:

 在片内RAM区30H和31H单元中存放了一个16位数,该16位数高8位存放在31H中,低8位存在30H中。编程分别统计16位中0和1的个数,将1的个数存放在片内RAM 区32H单元中,0的个数存放在33H单元中 。

 ;在片内RAM区30H和31H单元中存放了一个16位数,该16位数高8位存放在31H中,低8位存在30H中
  ;编程分别统计16位中0和1的个数,将1的个数存放在片内RAM 区32H单元中,0的个数存放在33H单元中 
    ORG 0000H
	LJMP START

	ORG 0100H    ;避开启动单元
START:
    MOV 30H,#34H	;输入数据,验证编码的正确性
	MOV 31H,#12H
    MOV R0,#00H  ; 设定R0的初始值为00H
	MOV R1,#00H  ; R1的初始值为00H
	MOV 80H,#08H  ; 设定循环次数
	MOV A,31H     ; 31H中的数据存放在A中
	CLR C		   ;
LOOP1:
    RLC A		  ;
	JC NUM1	  ;CY=1
	JNC NUM2     ;CY=0
NUM1:
    INC R1
	DJNZ 80H,LOOP1	;不为0,循环不结束,跳转到loop1继续判别
	SJMP LOOP2		;循环结束,跳转到LOOP2
NUM2:
    INC R0
	DJNZ 80H,LOOP1	;不为0,循环不结束,跳转到loop1继续判别
	SJMP LOOP2		;循环结束,跳转到LOOP2
LOOP2:
    MOV A,30H	   ; 30H中的数据存放在A中
	MOV 80H,#08H   ;设定循环次数
	CLR C		   ;
LOOP3:
    RLC A
	JC NUM3
	JNC NUM4
NUM3:
    INC R1
	DJNZ 80H,LOOP3	;不为0,循环不结束,跳转到loop3继续判别
	SJMP LOOP4		;循环结束,跳转到LOOP4
NUM4:
    INC R0
	DJNZ 80H,LOOP3	;不为0,循环不结束,跳转到LOOP3继续判别
	SJMP LOOP4		;循环结束,跳转到LOOP4
LOOP4:
    MOV 32H,R1
	MOV 33H,R0
	SJMP $
END

 

test4:

编程将内部数据存储器20H-24H中的5个单字节压缩BCD码转换成对应的ASCII码,结果存放在30H开始的单元中。

1.单字节压缩BCD码:压缩BCD码指一个字节8位存储2位BCD码。
eg:32用8421BCD码表示如下:
非压缩BCD码表示:00000011 00000010
压缩BCD码表示:0011 0010

而BCD码是用4位二进制数(各个位的权重分别为:8421,所以叫8421码)来表示一位十进制数。并且,一位十进制数只能是 0~9之间的一个数值。

2.ASCII码:ASCII 码使用指定的7 位或8位二进制数组合来表示128 或256 种可能的字符。

例如,十进制数27,用压缩BCD码表示为0010 0111,其中,十位数字2用ASCII码表示为011 0010,个位数字7用ASCII码表示为011 0111。

因此,要想将压缩BCD码转为ASCII码,首先要将高四位和低四位分开,再分别加上30H

;编程将内部数据存储器20H-24H中的5个单字节压缩BCD码转换成对应的ASCII码,结果存放在30H开始的单元中
   ORG 0000
   LJMP START

   ORG 0100H
START:
   MOV R0,#20H  ;
   MOV R1,#30H	;
   MOV R2,#05H  ; 设定循环次数
   CLR C
LOOP1:
   MOV A,@R0   ;将R0指示地址的内容送给A
   ANL A,#0FH   ;将A的高四位清零,低四位不变
   ADDC A,#30H ;将A+30H的结果送到A中
   MOV @R1,A   ;结果存放在R1指示地址中
   INC R1	   ;地址+1
   MOV A,@R0
   SWAP A
   ANL A,#0FH
   ADDC A,#30H
   MOV @R1,A	;结果存放在R1指示地址中
   INC R1	    ;地址+1
   INC R0		;操作对象地址+1
   DJNZ R2,LOOP1 ;判断循环是否结束,不结束,转到LOOP1,结束,继续运行

   SJMP $
   END

运行后

 

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值