keil二进制加法代码

keil二进制加法代码,第1张

用KEIL写51的汇编程序,可以用二进制数字后加“B”表示,比如0x2A = 00101010B而KEIL的C编译器不支持写二进制数,所以KEIL的C程序不能直接用二进制数表示。但如果你自定义一个#define B00101010 0x2A 这句话,那下面的程序就可以直接使用B00101010来表示了。把这个些写进一个头文件里,用的时候include这个文件即可。刚好写了一篇,去直接复制然后保存成binary.h文件即可。用的时候直接#include"binary.h" 即可

四个字节加上四个字节,和应该是4~5个字节。

本程序,需要三个地址指针,但是一般只有两个(R0和R1)可以用;如果换用工作区,就比较麻烦了。下面使用B充当“和”的地址指针,RESULT + 4单元,充当加数2的地址指针。

程序如下:

RESULT equ 30H 和数的地址

ORG 0000H

实验数据如下:

MOV 20H, #22H 加数1

MOV 21H, #33H

MOV 22H, #44H

MOV 23H, #0F3H

MOV 24H, #12H 加数2

MOV 25H, #34H

MOV 26H, #56H

MOV 27H, #78H

MOV R0, #20H 给定地址

MOV R1, #24H

LCALL _4_JIA_4 调用加法子程序

NOP

SJMP$

_4_JIA_4:

MOV RESULT + 4, R1 保存加数2地址

MOV B, #RESULT 保存和的地址

CLR C

MOV R2, #4

LOOP:

MOV A,@R0

INC R0

MOV R1, RESULT + 4

ADDC A,@R1 加上加数2

INC R1

MOV RESULT + 4, R1

MOV R1, B

MOV @R1, A 保存和数

INC R1

MOV B, R1

DJNZ R2, LOOP

CLR A

ADDC A,#0

MOV RESULT + 4, A 保存第五字节

RET

减法子程序,与上面的加法子程序雷同,只要把ADDC换成SUBB即可改为减法子程序。请楼主自行改写。

#include<stdio.h>

#include<string.h>

int main(void)

{

char a[80],b[80],temp[80]

int i,j,carr,len_a,len_b,n_temp

printf("string a:\n")

scanf("%s",a)

printf("string b:\n")

scanf("%s",b)

len_a=strlen(a)

len_b=strlen(b)

if(len_a<len_b)

{

strcpy(temp,a)

strcpy(a,b)

strcpy(b,temp)

len_a=strlen(a)

len_b=strlen(b)

}

strcpy(temp,a)

for(j=0,i=len_a-1i>=0i--,j++)

a[j]=temp[i]

strcpy(temp,b)

for(j=0,i=len_b-1i>=0i--,j++)

b[j]=temp[i]

carr=0

for(i=0i<len_bi++)

{

n_temp=a[i]-'0'+b[i]-'0'

if(n_temp<10)

{

a[i]=n_temp+'0'+carr

}

else

{

a[i]=n_temp-10+'0'+carr

carr=1

}

}

strcpy(temp,a)

for(j=0,i=len_a-1i>=0i--,j++)

a[j]=temp[i]

printf("answer is:\n%s\n",a)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7897619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存