C语言程序的小问题,背景:一个数据有两个寄存器,高八位H,低八位L,现在要将他俩合成转化成十进制的 单片机汇编...如何将两个8 bit的寄存器,一个高八位,一...

作者&投稿:穆览 (若有异议请与网页底部的电邮联系)
int temp =(H<<8)|L; 声明 temp 是整型变量,初始化为 表达式 (H<<8)|L 的 值。
H 是 高位的 整型数值 -- unsigned char.
L 是 低位的 整型数值 -- unsigned char.
H<<8 H 左移(二进制)八位。
| 是 按位加 (按位" 或" )
(H<<8)|L 用位运算方法 构成 unsigned short int 再 转换为 int 型
-----------------------------------
int temp =(H<<8)+ L;
这里用 加法运算,理论上 也可以。位运算速度快一点。
===========================
unsigned char H=0xff, L=0xaa;
int temp =(H<<8) + L;
printf("%#x %d\n",temp,temp);
temp =(H<<8) | L;
printf("%#x %d",temp,temp);

输出没区别。

这两条语句都可以实现题面的要求。设H寄存器中为XXXXXXXX,L寄存器中为yyyyyyyy,则有:
(H<<8)|L写成二进制数据是XXXXXXXX00000000 | yyyyyyyy,结果是XXXXXXXXyyyyyyyy;

(H<<8)+L写成二进制数据是XXXXXXXX00000000 + yyyyyyyy,结果也是XXXXXXXXyyyyyyyy。

但有一点要注意,就是原先的高8位和低8位只要这样简单组合就确实是你需要的10进制数!

关于低8位高8位合成的问题,能够这样做吗?~

你这个公式数制不匹配啊,高低8位是2进制数,256是10进制数。
不过意思是这么个意思,自己把256和高低八位转换成匹配的数制就行了,比如都是16进制才能再进行运算。

转成10进吗?
这个很简单
假设R1 是高 R2是低
loop:
mov a,r2
sub a,1h 低位-1
mov a,r1
sbc a,0h 高位带标志减0
snz c 借位跳走结束
jmp END
mov a,1h 没借位将+1并10进制寄存器(daa)
add a,AL
DAA AL
MOV A,0H
ADC A,AH
DAA AH
JMP LOOP
END:
此时的AL AH是十进制数 如果数大可以在增加寄存器

一个c语言小问题,编写程序?
答:按照题目要求编写的C语言程序如下(见图)

C语言:一个数如果恰好等于它的所有因子之和,这个数就称为“完数”。编 ...
答:printf("%d its factors are ",i);for(j=1;j

c语言问题:输入一个十进制数,将其转化为二进制数后存放在数组中并输出...
答:include<stdio.h> define uint unsigned int define ushort unsigned short //求2的N次方 int cifang(int n){ int i=0,sum=1;for(i=n;i>0;i--){ sum*=2;} return sum;} //十进制正数转换成二进制数 uint transform_data_zhengshu(uint frequence,ushort*pwm_table){ uint temp=freque...

C语言问题求解答,题目编写一个程序,接受一个整数输入,然后显示所有小于...
答:思路如下:判断是否素数:用所有小于该数的数去除这个数(从2开始),如果有一个能整除,则不是素数;如果没有一个能整除则是该数是素数。条件(int(m/n)==m/n)则整除,否则不整除(n<m)如5,用2,3,4去除5,没有一个可整除则5是素数;用2,3去除4,2可整除4,所以4不是素数。

用c语言编写一个程序,由计算机“想”一个数请人猜,如果猜对了,程序结...
答:if(flag==-1)printf("错误,大了!\n"); if(flag==-2)printf("错误,小了!\n"); if(flag==1)printf("恭喜答对! 此数是:%d\n",aim); i++; } return 0; } 追问 谢谢,我是新手,你的太复杂,我看不懂,不好意思。 追答 给你个功能简单的,其中用 /* */包含的部分是注释#include <st...

...b]内的所有完数,0 < a < b < 10000。一个数如果恰好
答:include "stdio.h"int main(){int a,b;int sum = 0; scanf("%d%d",&a,&b);for(int num = a; num <= b; num++){sum = num;for(int i = 1; i < num/2+1; i++){ //处理每个数if(num % i == 0){ //能被i整除sum -= i; //减去一个因子}}if(sum == ...

如何用c语言编写程序,输入一个数n不一定是整数,判定n是小于0,等于0还是...
答:你可以使用条件语句(if-else语句)来判断输入的数n是小于0、等于0还是大于0。下面是一个使用C语言编写的示例程序:```c include <stdio.h> int main() { double n;printf("请输入一个数:");scanf("%lf", &n);if (n < 0) { printf("输入的数是负数\n");} else if (n == 0)...

编写一段C语言程序,有一个已经按从小到大排好序的数组,要求输入一个...
答:20 define M 11 void main() { int a[N]={1,3,5,7,9,11,13,15,17,19,21},x,i,j;scanf("%d",&x);for ( i=M;i>0;i++ ) if ( a[i-1]>x ) a[i]=a[i-1]; else break;a[i]=x;for ( i=0;i<M+1;i++ ) printf("%d ",a[i]); printf("\n");} ...

怎么用C语言输入一个大于10小于100的数?
答:以下是一个简单的C语言程序,用于输入N个整数并求和:在这个程序中,我们首先定义了两个整型变量num和N,用于存储用户输入的数和数的个数。然后,我们使用printf函数输出提示信息,使用scanf函数从用户处读取数的个数N。然后,我们使用if语句检查N是否在有效范围内(大于0且小于或等于100)。如果N不在...

C语言循环结构程序设计:输入一个数值,根据这个数值可以输出一个加法表...
答:C语言循环结构程序设计:输入一个数值,根据这个数值可以输出一个加法表。列如,输入5,则结果为0+5=51+4=52+3=53+2=54+1=5... C语言循环结构程序设计:输入一个数值,根据这个数值可以输出一个加法表。列如,输入5,则结果为 0+5=5 1+4 = 5 2+3 =5 3+2= 5 4+1 = 5 展开  我来答 1...