汇编入门(三)

汇编入门(三)

在这里插入图片描述

ORG 0000H        ;伪指令,定义下面的指令所在地址,此句为主程序的开始地址
LJMP MAIN        ;无条件转移到MAIN
MAIN:            ;主程序
	MOV A,#01010101B
	
	MOV 20H,A
	//因为是存一位,所以要存到cy中;对A的特殊功能寄存器直接寻址和累加器某一位的寻址要用ACC
	//一位一位操作即可,cy作为中间储存
	MOV C,ACC.2
	MOV 20H.1,C
	
	MOV C,ACC.1
	MOV 20H.2,C
	
	MOV C,ACC.6
	MOV 20H.3,C
	
	MOV C,ACC.5
	MOV 20H.4,C
	
	MOV C,ACC.3
	MOV 20H.5,C
	
	MOV C,ACC.4
	MOV 20H.6,C
	
SJMP $       ;转到该指令的开头开始执行
END              ;程序结束

在这里插入图片描述
2.计算字符串中,某个字符的数量

ORG 0000H        ;伪指令,定义下面的指令所在地址,此句为主程序开始地址
LJMP MAIN        ;无条件转移到MAIN
MAIN:
	MOV DPTR,#s
	MOV B,#m
	MOV R0,#0
	L1:
	    CLR A
	    MOVC A,@A+DPTR    ;将A中的值,加上DPTR里的值,访问程序段中这个地址的值,取出来送给A。
	    INC DPTR          ;自加1,准备读取下一个字符
	    JZ L2          ;这是条件跳转语句,意思是,当累加器A中的值为0时,即到达字符串末尾,跳转到LEND语句行执行程序

		CJNE A,B,L1       ;判断A和B是否相等,相等则顺序执行,不相等则执行L1
		INC R0
		SJMP L1           ;SJMP:无条件相对转移

	L2:
		RET               ;从子程序返回
		
	s: DB'HELLLLO'          ;DB定义数据表
	m EQU 'L'             ;EQU给一个表达式或一个字符串起名
	  
END              ;程序结束

3.计算1+2+3+…+100

ORG 0000H        ;伪指令,定义下面的指令所在地址,此句为主程序开始地址
LJMP MAIN        ;无条件转移到MAIN
MAIN:
	MOV DPTR,#0
	MOV R0,#100
	L0:
		MOV A,DPL ;计算低八位
		ADD A,R0
		MOV DPL,A
		
		MOV A,#0  ;计算高八位
		ADDC A,DPH
		MOV DPH,A
		DJNZ R0,L0
SJMP $       ;转到该指令的开头开始执行	  
END              ;程序结束

这是一小部分代码 请参考 org 0000h jmp start ;Start of the program org 0100h start: mov A,#030h ;1 line, 8 bits call wrcmd mov A,#LCD_SETVISIBLE + 4 call wrcmd mov A,#LCD_SETDDADDR+15 ; Start at right hand side of the display call wrcmd mov A,#LCD_SETMODE + 3 ; Automatic Increment - Display shift left. call wrcmd mov 025h,#00h ; Set output mode (floating point). call boundsbuffer ; Initialise the bounds buffer - used for error checking. mov mode,#4 ; Initialise the constant buffer to 100. Primarily used for % ops. mov digitcode,#031h call storedigit mov digitcode,#030h call storedigit mov digitcode,#030h call storedigit mov status,#00h ; variable used to determine the first key press after an operation. mov bufferctr,#00h mov opcounter,#00h mov decimalcnt,#00h call waitkey halt: mov PCON,#1 ;Halt ;*********************************************************** ;**** Floating Point Package **** ;******************************** $INCLUDE (FP52.ASM) ;Routine to peek arg at DPTR argout: mov R0,#FP_NUMBER_SIZE aoloop: movx A,@DPTR anl A,#0F0h rr a rr a rr a rr a add A,#aodata-$-3 movc A,@A+PC call sndchr movx A,@DPTR anl A,#0Fh add A,#aodata-$-3 movc A,@A+PC call sndchr inc DPTR djnz R0, aoloop ret aodata: db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' ;Routine to output character in A, preserving all but A. sndchr: push R0B0 push R1B0 call getmode mov digitcode,A call storedigit pop R1B0 pop R0B0 ret ;Routine to print error message at DPTR. prterr: jmp wrstr ;Routine to handle input parameter error. badprm: mov DPTR,#bpmsg jmp wrstr bpmsg: db 'Bad Parameter',0 ;*********************************************************** ;**** LCD Display Routines **** ;****************************** ;LCD Registers addresses LCD_CMD_WR equ 00h LCD_DATA_WR equ 01h LCD_BUSY_RD equ 02h LCD_DATA_RD equ 03h LCD_PAGE equ 80h ;LCD Commands LCD_CLS equ 1 LCD_HOME equ 2 LCD_SETMODE equ 4 LCD_SETVISIBLE equ 8 LCD_SHIFT equ 16 LCD_SETFUNCTION equ 32 LCD_SETCGADDR equ 64 LCD_SETDDADDR equ 128
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rgb2gray

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值