汇编入门(一)

汇编入门(一)

1.第一个汇编程序

目前利用的是keil软件,建立文件时扩展名一定要为asm
在这里插入图片描述
在这里插入图片描述
如何查看具体地址存储器中的值:
在工具栏上选择“VIEW”>“memory windows”>“memory1”
然后输入地址即可:
在这里插入图片描述
在这里插入图片描述
注意这里第一行第一列为0x1B,则右边下一个是0x1C

第一个汇编程序:

ORG 0000H        ;伪指令,定义下面的指令所在地址,此句为主程序的开始地址
LJMP MAIN        ;无条件转移到MAIN
MAIN:            ;主程序
	MOV 30H,#40H ;30H的内容为40H
	MOV 40H,#10H ;40H的内容为10H
	MOV R0,#30H  ;R0的内容为30H
	MOV A,@R0    ;A的内容为40H
	MOV R1,A
	MOV B,@R1
	SJMP $       ;转到该指令的开头开始执行

END              ;程序结束

汇编程序练习:
1.A中的压缩BCD码分为二个字节,形成非压缩BCD码,放入40H和41H单元中

	MOV R0,A
	ANL A,#00001111B   ;ANL:与运算
	MOV 40H,A
	MOV A,R0     ;取回原数据
	ANL A,#11110000B
	SWAP A       ;将A中高四位与低四位交换
	MOV 41H,A

2.有两个4位BCD码,分别存放在内部数据存储器的50H~51H单元和60H~61H单元中
;试编写求这两数之和的程序,结果存放到 40H~41H 单元中

MOV A,50H	  ;A←(50H)
ADD A,60H	  ;低两位相加,A←(A)+(60H) 
DA A		  ;进行 BCD 码修正 ,DA A 指令为十进制调整指令
MOV 40H,A	  ;将修正后的低两位结果送 40H 
MOV A,51H	  ;A←(51H) 
ADDC A,61H	  ;高两位带上低位的进位位相加,A←(A)+(61H)+CY 
DA A		  ;进行 BCD 码修正 
MOV 41H,A	  ;将修正后的高两位结果送 41H

3.;内部数据 RAM 中 20H~3FH 单元的内容传送到,外部数据存储以 2000H 开始的连续单元中去。
20H~3FH 共计32个单元,需传送32次数据。R1作为循环计数器。

MOV  R0,#20H       ;设置R0为内部RAM首地址 
MOV  DPTR,#2000H   ;设置外部RAM首地址 
MOV  R1,#32        ;设R1为计数器 
LOOP:
	MOV A,@R0          ;取内部RAM数 
	MOVX @DPTR,A       ;送外部 RAM 
	INC  R0            ;调整内部RAM指针,指向下一个数据 
	INC  DPTR          ;调整外部RAM指针 
	DJNZ R1,LOOP       ;未完继续    
SJMP  $                ; 停机 

4.将片外RAM空间2000H~200AH中的数据的高4位变零,低4位不变,原址存放

	MOV DPTR,#2000H     ;数据指针DPTR存开始地址
	MOV R1,#0BH         ;B=11,一共是0到A:12个数据
	LOOP: MOVX A,@ DPTR ;循环指令
	      ANL A,#0FH    ;与运算,高四位清0,低四位不变
		  MOVX @ DPTR,A ;题目要求原址存放
		  INC DPTR      ;DPTR加一
		  DJNZ R1,LOOP  ;R1减一,若此时R1不为0,则跳转至LOOP
	SJMP $	 

5.内部数据RAM中40H~49H中的10个无符号数逐一比较,从小到大的顺序依次排列在这片单元中。

START:  CLR F0         ;清除交换标志位F0 
		MOV  R3,#9     ;十个数据循环次数         
		MOV  R0,#40H   ; R0存放区首址         
		MOV  A,@R0     ; 取前数 
		
L2:     INC  R0        ;R0加1 
		MOV R2,A       ;保存前数         
		SUBB A,@R0     ;前数减后数,如果是小数减大数,进位C会被置1        
		MOV A,R2       ;恢复前数         
		JC L1          ;顺序则继续比较.如果进位为1则转到L1        
		SETB F0        ;逆序则建立标志位         
		XCH A,@R0      ;前数与后数交换         
		DEC R0         ;R0减1,指向前数单元         
		XCH A,@R0         
		INC R0         ;仍指向后数单元 
		
L1:     MOV A,@R0      ;取下一个数         
		DJNZ R3,L2     ;依次重复比较,R3减1,不为0 则转移到L2         
		JB F0,START    ;交换后重新比较,如果F0为1 则转移到START         
		RET            ;从子程序返回
		END


猜你喜欢

转载自blog.csdn.net/weixin_44026026/article/details/109232485