共2条
1/1 1 跳转至页
两道简单的汇编题,还望大侠帮忙
问
单位马上要考试了,因为很多年没用这方面东西了,有2道题必出的考题自己不能肯定,还求各位大侠援手帮个忙。
要求用51的汇编语言写,路过的大侠要是工作忙,您给点拨一下思路或者提示一下容易出错的地方也好。
1:从aa存储单元开始存放有32个单字节无符号数,用51的汇编语言编写程序求32个数的平均值,结果存放AVR单元
2:自单元bb开始存放有一个字符串(以$结尾),用51汇编程序编写程序统计数字字符0---9的个数
万分感谢 答 1: 题目不难自己考虑吧。 答 2: 晕,老大,就不能给点提示阿 答 3: 我试试 MOV DPTR,AA
MOV R1,#32H
MOV B,#00H
LOOP1:MOV A,#00H
ADDC A,DPTR
ADDC A,B
MOV B,A
INC DPTR
DJNZ R1, LOOP1
MOV A,B
DIV A,#32
AJMP $ 答 4: 谢谢06202105,我看懂了,很多年没用都忘光了那32个字节的和存在累加器会溢出么?
是不是要用双字节的加法和除法啊?
不好意思,我概念有点混乱
还有那位大虾能帮忙给些提示阿? 答 5: 我自己做了一下第一题,不知道对不对我自己做了一下第一题,不知道对不对。
我在这里的一个概念有些糊涂,上面那位朋友写的程序加的和会不会溢出呢?
要是会溢出只能用双字节加法,可这样除法也要双字节,似乎很麻烦了,除法的程序我真么做似乎还有一个缺点,没有余数了。
大人帮忙看看阿
SUN: MOV R0,#32 ;R0存数字个数
MOV R2,#00H ;R2,R3存双字节和
MOV R3,#00H
MOV R4,#AAH ;R4存首地址
LOOP: MOV A,R4
ADD A,@R4 ;求和
MOV R3,A
CLR A
ADDC A,R2
MOV R2,A
DJNZ R0,LOOP
LOOP2: MOV R1,#05H
CLR C
RRC R2
RRC R3 ;除一次2
CLR C
DJNZ R1,LOOP2 ;除32等于除5次2
END 答 6: 我们大学教材上好像都有类似的题目 答 7: 那你帮我找找看啊 答 8: 昨天做的不对,又修改了一下,大人帮忙看看还有错嘛昨天做的不对,又修改了一下,大人帮忙看看还有错嘛
第二题没人能给些提示么?
SUN: MOV R5,#32 ;R0存数字个数
MOV R1,#00H ;R2,R3存双字节和
MOV R2,#00H
MOV R0,#AAH ;R4存首地址
LOOP: MOV A,R0
ADD A,@R0 ;求和
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
DJNZ R5,LOOP
LOOP2: MOV R6,#05H
MOV R7,#00H
CLR C
RRC R2
RRC R3 ;除一次2
RRC R7
DJNZ R6,LOOP2 ;除32等于除5次2
MOV A,R7
SWAP A
MOV R7,A
RR R7
END
最后结果,R3中是商,R7中是余数 答 9: 第二题这样做行么?似乎很笨的做法,还有什么其他方法么?ascii A=41,a=97,0=30,$=24
MOV DPL,#BBH
LOOP: MOVX A,@DPTR
CJNE A,#30H,A0
AJMP SUN
A0: CJNE A,#31,A1
AJMP SUN
A1: CJNE A,#31,A2
AJMP SUN
继续一直到39
INC DPTR
JMP LOOP
SUN: INC,R1 ;R1中存统计数字
JMP,LOOP 答 10: 我做的试试第二题 MOV A,#0BBH
MOV R0,A
MOV R1,#0H;count data
LOOP1: MOV A,@R0
SUBB A,#30H
JC LOOP2
MOV A,@R0
SUBB A,#3aH
JNC LOOP2
INC R1; the data is from 0 to 9
LOOP2: MOV A,@R0
INC R0
CJNE A,#24H,LOOP1
AJMP $ 答 11: 06202105,你的DPTR只取了一次值啊? 答 12: 楼主有兴趣的话自己装一个keil玩玩 答 13: 谢谢水星,最后写成这样,各位大大看看还有错误么?
谢谢水星,我原来的办法比较笨,还是你的比较明晰
不过JC和JNC的2句我换了一下次序,好像觉得应该是先去掉比30小的,然后再去掉比39大的,不知道这样对么
最后两个程序如下,还有哪位大大帮忙看看有没其他的错误,先谢谢了
************************
MOV A,#0BBH
MOV R0,A
MOV R1,#0H;count data
LOOP1: MOV A,@R0
SUBB A,#30H
JNC LOOP2 ;小于30跳LOOP2
MOV A,@R0
SUBB A,#3aH ;大于3A跳LOOP2
JC LOOP2
INC R1; the data is from 0 to 9
LOOP2: MOV A,@R0
INC R0
CJNE A,#24H,LOOP1
AJMP $
****************************
SUN: MOV R5,#32 ;R5存数字个数
MOV R1,#00H ;R1,R2存双字节和
MOV R2,#00H
MOV R0,#AAH ;R0存首地址
LOOP: MOV A,@R0 ;取数字
ADD A,R1 ;求和
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
INC R0
DJNZ R5,LOOP
LOOP2: MOV R6,#05H
MOV R7,#00H
CLR C
RRC R2
RRC R3 ;除一次2
RRC R7
DJNZ R6,LOOP2 ;除32等于除5次2
RR R7
RR R7
RR R7
END
最后结果,R3中是商,R7中是余数
答 14: 这种算法早溢出了 答 15: 可能的标准答案1.
AA EQU 30H ; 32 BYTES ; 30H TO 4FH
AVR DATA 50H
MOV R0, #AA
MOV R2, #32
CLR A
MOV AVR, A
CLR C
; MOV A, #(32/2)
LP1:
ADDC A, @R0
JNC NEXT1
INC AVR
NEXT1:
DJNZ R2, LP1
MOV R2, A
ANL A, #1FH
XCH A, R2
ANL A, #11100000B
SWAP A
RR A
XCH A, AVR
SWAP A
RR A
ORL A, AVR
MOV AVR, A
2.
BB EQU 40H
RESULT EQU 30H ; 30H TO 39H
CLR A
MOV R1, #10
MOV R0, #RESULT
LP1:
MOV @R0, A
INC R0
DJNZ R1, LP1
MOV R1, #(BB-1)
LP2:
INC R1
MOV A, @R1
CJNE A, #'$', $+5
SJMP EXIT
CLR C
SUBB A, #'0'
JC LP2
SUBB A, #10
JNC LP2
ADD A, #(10+RESULT)
MOV R0, A
INC @R0
SJMP LP2
EXIT:
答 16: 你的想法是对了,但是JC和JNC这两句不能交换当 被减数A 小于 减数#30H 的时候“ SUBB A,#30H ” 导致C bit被置位。
此时跳转当然是使用 JC LOOP2咯 答 17: 22。
mov r0, #bb
mov b, #0
loop:
mov a, @r0
inc r0
cjne a, '$', loopCon
mov a, b
ret
loopCon:
cjne a, '0', NotEqu0
NotEqu0:
jnc loop
cjne a, '9', NotEqu9
NotEqu9:
jc loop
inc b
sjmp loop 答 18: 我的看法以上程序全是错的,没有一位有实际经验的。很遗憾。 答 19: 怎么没考虑溢出呢?建议和接近256时除于32,接着把剩下的数重新求和再除于32.结果相加即可.
要求用51的汇编语言写,路过的大侠要是工作忙,您给点拨一下思路或者提示一下容易出错的地方也好。
1:从aa存储单元开始存放有32个单字节无符号数,用51的汇编语言编写程序求32个数的平均值,结果存放AVR单元
2:自单元bb开始存放有一个字符串(以$结尾),用51汇编程序编写程序统计数字字符0---9的个数
万分感谢 答 1: 题目不难自己考虑吧。 答 2: 晕,老大,就不能给点提示阿 答 3: 我试试 MOV DPTR,AA
MOV R1,#32H
MOV B,#00H
LOOP1:MOV A,#00H
ADDC A,DPTR
ADDC A,B
MOV B,A
INC DPTR
DJNZ R1, LOOP1
MOV A,B
DIV A,#32
AJMP $ 答 4: 谢谢06202105,我看懂了,很多年没用都忘光了那32个字节的和存在累加器会溢出么?
是不是要用双字节的加法和除法啊?
不好意思,我概念有点混乱
还有那位大虾能帮忙给些提示阿? 答 5: 我自己做了一下第一题,不知道对不对我自己做了一下第一题,不知道对不对。
我在这里的一个概念有些糊涂,上面那位朋友写的程序加的和会不会溢出呢?
要是会溢出只能用双字节加法,可这样除法也要双字节,似乎很麻烦了,除法的程序我真么做似乎还有一个缺点,没有余数了。
大人帮忙看看阿
SUN: MOV R0,#32 ;R0存数字个数
MOV R2,#00H ;R2,R3存双字节和
MOV R3,#00H
MOV R4,#AAH ;R4存首地址
LOOP: MOV A,R4
ADD A,@R4 ;求和
MOV R3,A
CLR A
ADDC A,R2
MOV R2,A
DJNZ R0,LOOP
LOOP2: MOV R1,#05H
CLR C
RRC R2
RRC R3 ;除一次2
CLR C
DJNZ R1,LOOP2 ;除32等于除5次2
END 答 6: 我们大学教材上好像都有类似的题目 答 7: 那你帮我找找看啊 答 8: 昨天做的不对,又修改了一下,大人帮忙看看还有错嘛昨天做的不对,又修改了一下,大人帮忙看看还有错嘛
第二题没人能给些提示么?
SUN: MOV R5,#32 ;R0存数字个数
MOV R1,#00H ;R2,R3存双字节和
MOV R2,#00H
MOV R0,#AAH ;R4存首地址
LOOP: MOV A,R0
ADD A,@R0 ;求和
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
DJNZ R5,LOOP
LOOP2: MOV R6,#05H
MOV R7,#00H
CLR C
RRC R2
RRC R3 ;除一次2
RRC R7
DJNZ R6,LOOP2 ;除32等于除5次2
MOV A,R7
SWAP A
MOV R7,A
RR R7
END
最后结果,R3中是商,R7中是余数 答 9: 第二题这样做行么?似乎很笨的做法,还有什么其他方法么?ascii A=41,a=97,0=30,$=24
MOV DPL,#BBH
LOOP: MOVX A,@DPTR
CJNE A,#30H,A0
AJMP SUN
A0: CJNE A,#31,A1
AJMP SUN
A1: CJNE A,#31,A2
AJMP SUN
继续一直到39
INC DPTR
JMP LOOP
SUN: INC,R1 ;R1中存统计数字
JMP,LOOP 答 10: 我做的试试第二题 MOV A,#0BBH
MOV R0,A
MOV R1,#0H;count data
LOOP1: MOV A,@R0
SUBB A,#30H
JC LOOP2
MOV A,@R0
SUBB A,#3aH
JNC LOOP2
INC R1; the data is from 0 to 9
LOOP2: MOV A,@R0
INC R0
CJNE A,#24H,LOOP1
AJMP $ 答 11: 06202105,你的DPTR只取了一次值啊? 答 12: 楼主有兴趣的话自己装一个keil玩玩 答 13: 谢谢水星,最后写成这样,各位大大看看还有错误么?
谢谢水星,我原来的办法比较笨,还是你的比较明晰
不过JC和JNC的2句我换了一下次序,好像觉得应该是先去掉比30小的,然后再去掉比39大的,不知道这样对么
最后两个程序如下,还有哪位大大帮忙看看有没其他的错误,先谢谢了
************************
MOV A,#0BBH
MOV R0,A
MOV R1,#0H;count data
LOOP1: MOV A,@R0
SUBB A,#30H
JNC LOOP2 ;小于30跳LOOP2
MOV A,@R0
SUBB A,#3aH ;大于3A跳LOOP2
JC LOOP2
INC R1; the data is from 0 to 9
LOOP2: MOV A,@R0
INC R0
CJNE A,#24H,LOOP1
AJMP $
****************************
SUN: MOV R5,#32 ;R5存数字个数
MOV R1,#00H ;R1,R2存双字节和
MOV R2,#00H
MOV R0,#AAH ;R0存首地址
LOOP: MOV A,@R0 ;取数字
ADD A,R1 ;求和
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
INC R0
DJNZ R5,LOOP
LOOP2: MOV R6,#05H
MOV R7,#00H
CLR C
RRC R2
RRC R3 ;除一次2
RRC R7
DJNZ R6,LOOP2 ;除32等于除5次2
RR R7
RR R7
RR R7
END
最后结果,R3中是商,R7中是余数
答 14: 这种算法早溢出了 答 15: 可能的标准答案1.
AA EQU 30H ; 32 BYTES ; 30H TO 4FH
AVR DATA 50H
MOV R0, #AA
MOV R2, #32
CLR A
MOV AVR, A
CLR C
; MOV A, #(32/2)
LP1:
ADDC A, @R0
JNC NEXT1
INC AVR
NEXT1:
DJNZ R2, LP1
MOV R2, A
ANL A, #1FH
XCH A, R2
ANL A, #11100000B
SWAP A
RR A
XCH A, AVR
SWAP A
RR A
ORL A, AVR
MOV AVR, A
2.
BB EQU 40H
RESULT EQU 30H ; 30H TO 39H
CLR A
MOV R1, #10
MOV R0, #RESULT
LP1:
MOV @R0, A
INC R0
DJNZ R1, LP1
MOV R1, #(BB-1)
LP2:
INC R1
MOV A, @R1
CJNE A, #'$', $+5
SJMP EXIT
CLR C
SUBB A, #'0'
JC LP2
SUBB A, #10
JNC LP2
ADD A, #(10+RESULT)
MOV R0, A
INC @R0
SJMP LP2
EXIT:
答 16: 你的想法是对了,但是JC和JNC这两句不能交换当 被减数A 小于 减数#30H 的时候“ SUBB A,#30H ” 导致C bit被置位。
此时跳转当然是使用 JC LOOP2咯 答 17: 22。
mov r0, #bb
mov b, #0
loop:
mov a, @r0
inc r0
cjne a, '$', loopCon
mov a, b
ret
loopCon:
cjne a, '0', NotEqu0
NotEqu0:
jnc loop
cjne a, '9', NotEqu9
NotEqu9:
jc loop
inc b
sjmp loop 答 18: 我的看法以上程序全是错的,没有一位有实际经验的。很遗憾。 答 19: 怎么没考虑溢出呢?建议和接近256时除于32,接着把剩下的数重新求和再除于32.结果相加即可.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |