微机程序设计2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、分支程序设计

例1:

;****************************************

;* 已知内部RAM 30H和31H单元中各有一个无 *

;* 符号数,比较它们的大小,大数送到MAX *

;* (32H)单元 *

;****************************************

MAX EQU 32H

org 0000H

ljmp start

org 0100H

start: mov a, 30H

cjne a, 31H, big

sjmp store

big: jnc store ;(30H)>(31H)

mov a, 31H ;(30H)<(31H)

store: mov MAX, a

sjmp $

end

例2

;*****************************************

;* 128种分支转移程序 *

;* 功能:根据入口条件转移到128个目的地址 *

;* 入口:(r3)=转移目的地址的序号00H~7FH *

;* 出口:转移到相应子程序入口 *

;*****************************************

JMP_128: mov a, r3

rl a

mov dptr, #JMPTAB

jmp @a+dptr

JMPTAB: ajmp rout00

ajmp rout01

…………

ajmp rout7F

rout00:。。。

rout01:。。。

例3

;*********************************

;* 设变量x存放在VAR单元中,函数 *

;* 值y存放在FUNC中,按下式给y赋 *

;* 值;y=1 x>0; y=0 x=0; y=-1 x<0 *

;*********************************

VAR EQU 30H

FUNC EQU 31H

org 0000H

ljmp START

org 0100H

START: mov a, VAR ;取x

jz comp ;为零转COMP

jnb acc.7, POSI ;x>0转POSI

mov a, #0FFH ;x<0,-1->A

sjmp COMP

POSI: mov a, #01H

COMP: mov FUNC, a

sjmp $

end

二、循环程序设计

例4

;************************************** ;* 将内部RAM 30H~32H单元内容左移一位 * ;************************************** ;不用循环方式

org 0000H

ljmp start

org 0100H

start: clr c

mov a, 32H

rlc a

mov 32H, a

mov a, 31H

rlc a

mov 31H, a

mov a, 30H

rlc a

mov 30H, a

sjmp $

end

;循环方式

mov r0,#32h

mov r7,#03h ;赋初值

clr c

loop:mov a,@r0 ;

rlc a ;循环工作部分

mov @r0,a ;

dec r0

djnz r7,loop ;循环变量修改,终止判别

sjmp $

end

例5

;*****************************************

;* 找出内部RAM 20H开始连续10个单元中无符 *

;* 号数的最小值存于内部RAM 1FH单元中 *

;*****************************************

org 0000H

ljmp start

org 0100H

start: mov r0, #20H

mov r7, #9

mov 1FH, @r0

inc r0

loop: mov a, @r0

cjne a, 1FH, neq

neq: jnc next ; a >= 1FH 转移比较下一个,否则记录小值 mov 1FH, a

next: inc r0

djnz r7, loop

sjmp $

end

例6

;*************************************

;* 将外部RAM 1000H开始的20个单元中的 *

;* ASCII码0~9十个数据传送到内部RAM *

;* 40H开始的区域中,其它数据不传递, *

;* 0~9的ASCII码为 30H~39H *

;*************************************

org 0000H

ljmp start

org 0100H

start: mov dptr, #1000H

mov r0, #40H

mov r7, #20

loop: movx a, @dptr

cjne a, #3aH, neq ; 不等转移

sjmp next ; 相等比较下一个

neq: jnc next ; 大于比较下一个

cjne a,#30H,neq1

neq1: jc next ;大于等于则保存,否则比较下一个 mov @r0, a

inc r0

next: inc dptr

djnz r7, loop

sjmp $

end

例7

;*****************************

;* 内存从21H开始有一字串, *

;* 该字串以$结束,试统计该字 *

;* 串长度,结果存与NUM单元中 *

;*****************************

NUM EQU 20H

org 0000H

ljmp start

org 0100H

start: clr a ;计数器设初值

mov r0, #21H ;置地址指针

loop: cjne @r0, #24H, next

sjmp comp ;找到转comp

next: inc a ;字符计数器增1

inc r0 ;修改地址指针

sjmp loop

相关文档
最新文档