历年汇编题目题解析及V1.3版勘误
- 格式:pdf
- 大小:235.44 KB
- 文档页数:3
1
V1.3版勘误:
1. (第三页)DBNZ:先减一,如果不为0进入分支(此处书上是错误的!),此语句常做
循环用,即不断减对应寻址单元的值,如果还没有减到0,则跳回到前面对应的分支处
向下执行。
2. (第四页)JSR:跳转至子程序,此指令较为复杂,过程大致如下:PC计数器加上1、2
或3,后赋值回PC计数器,然后将PCL压栈;将SP减一;将PCH压栈;将SP减一。
再将子程序的绝对地址赋值给PC,以使CPU从子程序处开始执行。
3. (第七页)MTIMCLK = 0x0H; //H—2^H分频,当H>8时,均为256分频
历年汇编题目题解析
1. 已知($80)=$68,($81)=$76,请分析以下程序执行后的结果。
LDHX #$260
TXS
LDX #$80
LDA ,X ;A= $68
ADD $81 ;A= $DE
DAA ;A= $44
PSHA ;($25F)= $44 SP= $025E
解:
LDHX #$260
将$0260放入H:X,此时H:X=$0260。
TXS
将H:X的值减一并赋值给SP,此时SP=$025F。
LDX #$80
将$0080放入H:X,此时H:X=$0080。
LDA ,X
将($80)=$68放入A,此时A=$68。
ADD $81
将($81)=$76与A=$68相加得$DE并赋值给A,A=$DE。
DAA
对A=$DE进行调整。首先分别转换高低四位为十进制,即13、14,可以看到均大于9。低
四位加6为20,十六进制结果14,保留4,1进位到13,高四位变为14。同样的方法对高
四位进行调整,所得最终结果为$44。从另一个角度理解,$DE是$68+$76的结果,如果运
用DAA,可以视为把$68和$76当成十进制数加法,68+76=144,取低位44,高位由于进位
进入了C寄存器。
PSHA
将A压入堆栈单元($025F),并使SP-1=$025F-1=$025E赋值给SP,此时SP=$025E,($025F)
=$44。
2
$020009H
$020155H
$02023AH
$020310H
$020408H
$02059EH
$02060FH
$020768H
$02085CH
$020960H
$020A88H
2. 片内RAM空间有一个数据块如图所示,有以下程序段:
LDA $0200
PSHA
LDHX #$0201
LDA , X
LOOP: INCX
CMP , X
BLS NEXT
LDA , X
NEXT: DBNZ 1, SP, LOOP
AIS #1
BRA $
END
(1) 若该数据块位无符号数,则上述程序段的功能是 选出$0201-$020A中的最小值
(2) 执行上述程序后,A= $08
解:
LDA $0200
将($0200)=$09 送入A,A=$09。
PSHA
此时假设SP的值是T。A入栈,(T)=$09,SP自减一,SP=T-1,此时SP指向T-1的单元,
内容未知。
LDHX #$0201
$0201送入H:X寄存器,H:X=$0201。
LDA , X
将($0201)=$55送入A,A=$55。
LOOP: INCX
X值自加一,H:X=$0202。
CMP , X
(A)-(H:X)=$55-$3A>0,C位不改变。C=0。
BLS NEXT
如果CMP操作中(A)小于等于(H:X)则跳到NEXT行执行,实际上是CCR寄存器中C或Z
位为1则跳转到NEXT行。显然当前不符合条件,不跳转。
LDA , X
将($0202)=$3A送入A,A=$3A。
NEXT: DBNZ 1, SP, LOOP
如果(SP+1)=(T)=$09减一之后,(SP+1)=(T)=$08,不等于零,则跳回到LOOP行继续执行。显
然此处$08≠$00,应当跳回执行。注意此处并没有改变SP的值,只是利用偏移寻找SP+1的
单元。
LOOP: INCX
X值自加一,H:X=$0203。
CMP , X
(A)-(H:X)=$3A-$10>0,C位不改变。C=0。
BLS NEXT
3
如果CMP操作中(A)小于等于(H:X)则跳到NEXT行执行,实际上是CCR寄存器中C或Z
位为1则跳转到NEXT行。显然当前不符合条件,不跳转。
LDA , X
将($0203)=$10送入A,A=$10。
NEXT: DBNZ 1, SP, LOOP
如果(SP+1)=(T)=$08减一之后,(SP+1)=(T)=$07,不等于零,则跳回到LOOP行继续执行。显
然此处$07≠$00,应当跳回执行。
以下的过程以此类推,总之,是只要找到比A里当前数小的数就把它赋值给A,如果比A
大,那么不理会。显然,当程序执行完成,A中存留的数将是扫描过的数中最小的。
AIS #1
SP赋值SP+1=T。SP=T。
BRA $
END
程序结束。
3. 已知($85)= $5A,($80)= $FF,(H:X)= $00A5,(SP)= $025F请写出以下指令执行后
的结果。
LDA $85 ;A= $5A
ADD #$10 ;A= $6A
CMP #$75 ;C= 1
PSHA ;A= $6A SP= $025E
MOV $80, $B5 ;($B5)= $FF
LSL $10, X ;($B5)= $FE
CLR , X ;X= $A5 ($A5)= 0
STX $10A0 ;($10A0)= $A5
解:
LDA $85
($85)= $5A赋值给A,A=$5A。
ADD #$10
A赋值$5A+$10=$6A,A=$6A。
CMP #$75
(A)-(M)=$6A-$75<0,CCR中C置1,C=1。
PSHA
将A压入堆栈单元($025F),并使SP-1=$025F-1=$025E赋值给SP,此时SP=$025E,($025F)
=$6A。
MOV $80, $B5
将($80)= $FF搬运到$B5中,($B5)= $FF。
LSL $10, X
令(H:X+$10)=($A5+$10)=($B5)= $FF=%11111111逻辑左移一位,得($B5)= $FE=%11111110。
CLR , X
将H:X=$00A5中的数字清零,此时X=$A5,($A5)=0。
STX $10A0
将X=$A5存入$10A0地址单元,($10A0)=$A5。