共2条
1/1 1 跳转至页
单片机汇编两道题,大人帮帮忙阿
问
板主:我在侃单片机也发了这个主题,实在是因为着急阿。不知道违规么,如果违规我道歉,并麻烦您帮忙删除这个。
**************************************
马上要考试了,因为很多年没用这方面东西了,有2道题必出的
考题自己不能肯定,还求各位大侠援手帮个忙。
要求用51的汇编语言写,用8086或者c51都能找到很多现成的参
考,偏偏规定要用intel的51
路过的大侠要是忙,您给点拨一下思路或者提示一下容易出错的
地方也好。
1:从aa存储单元开始存放有32个单字节无符号数,用51的汇编
语言编写程序求32个数的平均值,结果存放AVR单元
2:自单元bb开始存放有一个字符串(以$结尾),用51汇编程序
编写程序统计数字字符0---9的个数
万分感谢
**********
我自己做了一下第一题,不知道对不对。
我在这里的一个概念有些糊涂,上面那位朋友写的程序加的和会
不会溢出呢?
要是会溢出只能用双字节加法,可这样除法也要双字节,似乎很
麻烦了,除法的程序我真么做似乎还有一个缺点,没有余数了。
大人帮忙看看阿
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 答 1: 楼主程序有错:根本没有取数据,而且只有R0/R1可以作指针1:从aa存储单元开始存放有32个单字节无符号数,用51的汇编。假定这32个数存放在idata中。
原程序改编如下:(楼主的除法部分错误,希望楼主自己改正)
SUN:
MOV R0,#aa ;R0存数据地址
MOV R4,#32 ;R4存数字个数
MOV R2,#00H ;R2存累加数的双字节和高字节
MOV R3,#00H ;R4存累加数的双字节和低字节
LOOP:
MOV A,@R0
ADD A,R3 ;求和
MOV R3,A
CLR A
ADDC A,R2
MOV R2,A
INC R0 ; 这里假定是升序排列,若是降序排列,需要改用DEC R0
DJNZ R4,LOOP
答 2: 在别人的提示下自己做了一下,不知道这样行嘛?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中是余数 答 3: 第二题这么做行么,还有什么好办法么?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 答 4: 谢谢a12345678
**************************************
马上要考试了,因为很多年没用这方面东西了,有2道题必出的
考题自己不能肯定,还求各位大侠援手帮个忙。
要求用51的汇编语言写,用8086或者c51都能找到很多现成的参
考,偏偏规定要用intel的51
路过的大侠要是忙,您给点拨一下思路或者提示一下容易出错的
地方也好。
1:从aa存储单元开始存放有32个单字节无符号数,用51的汇编
语言编写程序求32个数的平均值,结果存放AVR单元
2:自单元bb开始存放有一个字符串(以$结尾),用51汇编程序
编写程序统计数字字符0---9的个数
万分感谢
**********
我自己做了一下第一题,不知道对不对。
我在这里的一个概念有些糊涂,上面那位朋友写的程序加的和会
不会溢出呢?
要是会溢出只能用双字节加法,可这样除法也要双字节,似乎很
麻烦了,除法的程序我真么做似乎还有一个缺点,没有余数了。
大人帮忙看看阿
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 答 1: 楼主程序有错:根本没有取数据,而且只有R0/R1可以作指针1:从aa存储单元开始存放有32个单字节无符号数,用51的汇编。假定这32个数存放在idata中。
原程序改编如下:(楼主的除法部分错误,希望楼主自己改正)
SUN:
MOV R0,#aa ;R0存数据地址
MOV R4,#32 ;R4存数字个数
MOV R2,#00H ;R2存累加数的双字节和高字节
MOV R3,#00H ;R4存累加数的双字节和低字节
LOOP:
MOV A,@R0
ADD A,R3 ;求和
MOV R3,A
CLR A
ADDC A,R2
MOV R2,A
INC R0 ; 这里假定是升序排列,若是降序排列,需要改用DEC R0
DJNZ R4,LOOP
答 2: 在别人的提示下自己做了一下,不知道这样行嘛?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中是余数 答 3: 第二题这么做行么,还有什么好办法么?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 答 4: 谢谢a12345678
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |