1.试编写程序段,求两个4字节无符号数的和,被加数存于DATA1,加数存于DATA2,结果存于DATA3
http://blog.163.com/asm_c/blog/static/2482031132017519533317/
参考。
不带进位位的单片机加法指令
ADD A,#DATA ;例:ADD A,#10H
ADD A,direct ;例:ADD A,10H
ADD A,Rn ;例:ADD A,R7
ADD A,@Ri ;例:ADD A,@R0
用途:将A中的值与其后面的值相加,最终结果否是回到A中。
例:MOV A,#30H
ADD A,#10H
带进位位的加法指令
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
用途:将A中的值和其后面的值相加,并且加上进位位C中的值。
由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,能表达的数的范围就能达到0-65535
如何合并呢?其实很简单,让我们看一个10进制数的例程:
66+78。
这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做6+8(低位),然后再做6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法来做罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个数超过了一位数所能表达的范置(0-9)。
在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法是将这一点加进去。那么计算机中做16位加法时同样如此,先做低8位的,如果两数相加产生了进位,也要“点一下”做个标记,这个标记就是进位位C,在PSW中。在进行高位加法是将这个C加进去。例:1067H+10A0H,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是7,而1则到了PSW中的CY位了,换言之,CY就相当于是100H。然后再做10H+10H+CY,结果是21H,所以最终的结果是2107H。
至于数据如何定义到你要的位置,这个问题不用我教你了吧!!!
MOV A,DATA1
ADDC A,DATA2
MOV DATA3,A
可以用顺序代码
MOV R7,DATA1
MOV R6,DATA2
MOV R5,DATA3
MOV R4,#4
CLR C
LOOP01:
MOV A,@R7
ADDC A,@R6
MOV @R5,A
DJNZ R4,LOOP01
用Keil c编译后,输出的代码,反汇编,出来的是顺序代码。
所以,还是顺序代码执行效率高。第一个用add,后面的都用addc,地址分别加一
求一段C语言程序
这个是第一题,我承认后面几道题我都没看题目。编译环境:WINDOWS XP SP3+VC6.0 include <stdio.h> include <string.h> include <conio.h>\/\/getch()头文件 include <windows.h>\/\/exit()头文件 define PASSPORT_LENGTH 20\/\/密码最大长度 void SetPassport();\/\/选择1设置密码 void Load...
C语言程序:编写程序,统计特定字母的个数。要求用指针编写。谢谢!!!
include "stdio.h"include "stdlib.h"int getCharCount(char *sz,char ch,int len){ int i = 0;int icount =0;for(i=0;i<len,i++){ if(*sz == ch)icount = icount +1;sz++;} return icount;} void main(){ char sz[10]={'a','b','c','a','a','d','b','a...
求编一c++程序~~~
include <iostream> using namespace std;int _tmain(int argc, _TCHAR* argv[]){ float x=0.0f; \/\/书的实际价格 float y=0.0f; \/\/打折后的价格 cout<<"请输入书的实际价格:";cin>>x;if(x<=50){ y=float(1.9*x);} else if(x>50 && x<=200){ y=float(2.8*x);...
用C语言编写程序,求1+1\/(1+2)+1\/(1+2+3)+... +1\/(1+2+...+n)?
D、先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构16. 执行下面的程序段后,变量k中的值为( )。int k=3, s[2];s[0]=k;k=s[0]*10;A、不定值 B、33 C、30 D、1017. 已知对学生记录的描述为:struct teacher{int sex;
如何编写C语言程序?
首先,你需要学会c语言的基础语法,那么你就可以写一些简单的程序了。想要进阶就要进一步深入学习算法等。其次,学习编程语言必须要有兴趣,兴趣不够很容易半途而废。格式的话,养成良好的缩进习惯有助于别人和自己更容易看懂代码。推荐一本书<<c primer plus>>写的很不错。你还需要安装ide,推荐安装...
求用汇编写段程序(很简单!)
在masm4.0版本下(XP系统)调试通过。dseg segment buf db 5,-4,0,3,100,-51 cnt dw $-buf plus db "Y=1",0ah,0dh,"$"zero db "Y=0",0ah,0dh,"$"minu db "Y=-1",0ah,0dh,"$"dseg ends cseg segment assume cs:cseg,ds:dseg ...
求一段JAVA程序
这种东西现在还有人玩?字符串的分割和截取要用java.util.regex.*这个包。我试着写了段代码,绝对满足你的要求啦!!可以去掉字符串中的中括号和中括号的内容。并将中英文分别存放到不同的文件。照例贴上代码:———testregex.java———import java.io.*;import java.util.regex.*;public class ...
c语言:编写程序可计算如下分段函数
inlude<math.h>#include<fstream.h>#define pi=3.1415926int main(){float x,y;cin>>x;if(x>0){ y=(pow(x,0.5)+exp(x))\/(5*x+5);}else{ y=(2\/3.0+sin(60*pi\/180.0))*fabs(x);}cout<<"y="<<y<<endl;return 0;} 具体的你再调试下 ...
51单片机编程:编写一个程序段,将80C51内部RAM30H~4FH单元中8位无符号相...
SUM: MOV R0,#30H CLR A MOV B,#0LOOP: ADD A,@R0 XCH A,B ADDC A,#0 XCH A,B INC R0 CJNE R0,#40H,LOOP RET
跪求答案啊,谢谢各位了:以完整的汇编语言源程序结构编写实现以下要求的...
找工作焦头烂额之际复习一下,剩下的靠你自己吧= = DATA SEGMENT MSG DB 'Hello,my friends!','$'DATA DB 20 DUP('0')BUFFER DB 20 DUP('0')DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX LEA SI,BUFFER LEA DX, MSG MOV AH, 9 ;...
紫怜氯美: 3、如果SP=0100H,SS=6000H,AX=8036H,试画出执行程序PUSH AX指令后,堆栈存储情况示意图. 36H 80H ……SP=00FE 600FEH600FFH60100H4、试使用堆栈指令编写程序段,交换AX寄存器和BX寄存器的内容. PUSH ...
润州区13064331533: 用汇编语言编写求两个多字节无符号数和的程序 - ?
紫怜氯美: 用汇编语言编写求两个多字节无符号数和的程序 标签: 汇编语言, 编写程序, 符号. 用汇编语言编写求两个多字节无符号数和的程序.M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无 .... 设R0和R1中有两个补码形式的有符号数,试编程求两数之积并送入R3、R2中的程序(R3 ... 试编写有关的程序
润州区13064331533: 求多字节的无符号数的和 - ?
紫怜氯美: B代表其数据类型为BYTE,是字节类型而不是字类型,一个字节所支持的值域为0~255.在西门子中,字节类型为字串类型,所以无法支持带有符号的10进制数,你只能将其作为16进制或者2进制输入,例如:作为二进制输入:L2#1001TMB0或者作为16进制输入:LB#16#9TMB0
润州区13064331533: 求masm下两个四位无符号十进制数乘法程序 - ?
紫怜氯美: ; 本程序通过编译,运行正确 Code Segment Assume CS:Code,DS:Code CR equ 000DH LF equ 000AH KBBack equ 0008H ; ----------------------------------------- ; 功能:显示指定地址(Str_Addr)的字符串 ; 入口: ; Str_Addr=字符串地址(...
润州区13064331533: 用汇编语言编写程序段, 设变量buff1和buff2分别存有4个字节的数据,编写计算这两个变量相减的程序段 - ?
紫怜氯美: CLR C MOV A,buff1+03H SUBB A,buff2+03H MOV buff3+03H,A MOV A,buff1+02H SUBB A,buff2+02H MOV buff3+02H,A MOV A,buff1+01H SUBB A,buff2+01H MOV buff3+01H,A MOV A,buff1 SUBB A,buff2 MOV buff3,A
润州区13064331533: 编写程序输入一个(unsigned 类型)无符号整数,分别输出它的低4位和高4位. - ?
紫怜氯美: unsigned的int是占4个字节的在vc里面,就比如是unsigned char吧,这个是占一个字节的,你要知道计算机里面存储的都是用二进制代码储存的,一个字节是八位,所以就有了高四位和低四位,比如是2啊,在内存中是: 0000 0010 要是有符号的,最高位就是符号位,0代表正数,1代表负数,你要输出高四位可以用移位来实现,比如是unsigned char a=2; 那么高四位就是2>>4 得出来的用4位二进制表现出来就可以了,低四位就是 2&15 也就是0000 1111 与一下就好了,看看书,书上都有的
润州区13064331533: c51编程:求n个单字节无符号数xi的和,xi按i顺序存放在内部RAM从50H开始的单元总,n放在R2中,和放在R3R4中 - ?
紫怜氯美: :MOV R3, #0MOV R4, #0MOV R0, #50H LOOP:MOV A, @R0ADD A, R4MOV R4, AJNC NO_CINC R3 NO_C:INC R0DJNZ R2, LOOPSJMP $ END
润州区13064331533: 4个字节无符号数的加法运算 最好能画出流程图,急求,十分感谢 - ?
紫怜氯美: DATA SEGMENTNUM1 DD 12345678H;设定1个32位数作为被加数.加的时候,先加低16位,再加高16位NUM2 DD 35462790H;设定另1个32位数作为加数.NUM3 DD ?;...
润州区13064331533: 编写一个双字节有符号数除法子程序?
紫怜氯美: 解决方法很多!嘿嘿1设计一个双字节无符号数加法子程序,首先要设计一个子程序入口:即(R2)(R3)=装双字节无符号数的被加数 (R4)(R5)=装双字节无符号数的加数2设计一个双字节无符号数加法子程序出口:(32H)(31H)(30H...
润州区13064331533: 已知两个无符号数分别存在于ONE,TWO单元,试编程比较它们的大小并把大数存于MAX单元,小数存于SMALL单元. - ?
紫怜氯美: 是两个问题吧.用汇编写:1.MOV A,ONE CJNE A,TWO,BIG ;比较 EQUAL:MOV MAX,A ;相等时 MOV SMALL,A BIG: JC LOW ;one大时 MOV MAX,A MOV A,TWO MOV SMALL,A LOW: MOW SMALL,A ;two大时 MOV A,TWO MOV MAX,A2. ;延时1s MOV R0,#14H ;20次 LOOP:MOW TMOD,#01H ;T0定时1方式 MOV TH0,#3CH ;50ms MOV TL0,#0B0H SETB TR0 ;开始计时 DJNZ R0,LOOP RET ;返回 感觉还可以,其实C51更好点