右侧
黑客技术
当前位置:网站首页 > 网络黑客 > 正文

进制定位转移_重定位是将什么转换成什么

作者:hacker发布时间:2022-07-15分类:网络黑客浏览:113评论:3


导读:导航:1、C语言使二进制数定位转2、进制之间如何转换?3、51单片机如何吧十六进制化为十进制?(好像没有直接的指令去实现)C语言使二进制数定位转#include...

导航:

C语言使二进制数定位转

#include stdio.h

int main()

{

int a = 0;

printf("请输入a:");

if (scanf("%d",a) == 1)

{

a ^= 0x000F;

printf("结果是:%d\r\n",a);

}

else

{

printf("输入错误!\r\n");

}

printf("\r\nPress any key to continue...");

fflush(stdin);

getchar();

return 0;

}

进制之间如何转换?

二进制转化为八进制比如: 1010100101 step 1:分组 (把二进制三位一组从右到左分组,当左边的数字不足三位补上0) 001 010 100 101 step 2:替换(把分好的组,每组数字用一个八进制数字替换) 替换对应表: 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 那么上述的数字替换相应为1 2 4 5,那么最后的值就是1245. 二进制转化为十六进制比如: 1001010101001 step 1:分组 (把二进制四位一组从右到左分组,当左边的数字不足四位补上0) 0001 0010 1010 1001 step 2:替换(把分好的组,每组数字用一个十六进制数字替换) 替换对应表: 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 a 1011 b 1100 c 1101 d 1110 e 1111 f 那么上述的数字替换相应为1 2 a 9,那么最后的值就是12a9. 二进制转化为十进制: 110101001.101 step 1: 授权(给每个二进制位授予不一样的位权,从小数点开始往左边数,分别是1,2,4,8......,也就是2的几次方,这里不好写,我就直接算出来,小数点往右边数,就是1/2 ,1/4,1/8.......,) step 2: 位权与权值相乘(将各个位的数字与位权相乘相加) +1X256+1X128+0X64+1X32+0X16+1X8+0X4+0X2+1X1+1X1/2+0X1/4+1X1/8=..十进制转化为二进制: 125.125 step 1: 分类(将整数位和小数位分为两个部分,分别求解) step 2: 整数求解(将整数位数字对二进行反向取余,一直除到商位0为止) 125 / 2 = 64 ...........1 64 / 2 = 32 ............0 32/2 = 16.............0 16/2 = 8..............0 8/2 = 4..............0 4/2 = 2...............0 2/2 = 1................0 1/2 = 0...............1 (商为0停止) 那么整数部分结果就是从下往上看余数为 10000001. step 3: 求解小数(求解小数用到的是将小数一直乘以2,依次取出每次乘以2结果的整数部分) 0.125X2=0.25 (整数部分为0,取出) 0.25X2=0.5 (整数部分为0,取出) 0.5X2=1.0 (整数部分为1,取出)最后小数部分就是001step 4:合并两部分 那最后的结果就是10000001.001至于八进制与十六进制之间的转化就是将二进制中的2换为相应的8和16.需要注意的是十六进制中有a,b,c,d,e,f的余数,而不是10,11,12,13,14,15.对于其他的也没有什么不一样的地方了。 如果我的回答得到你的满意请支持一下我朋友的网站 Thank you !!!!

51单片机如何吧十六进制化为十进制?(好像没有直接的指令去实现)

普林斯顿结构,它采用了不在程序与数据的存储上进行逻辑区分的设计思想,这种设计思想在通用计算机和通用微型计算机中被广泛使用。

mcs-51单片机 就是基于这种结构 MCS-51汇编语言程序的一般格式

与8086不同,没有代码段、数据段等区分,统一编址。

程序由指令行或注释行组成,指令行每行只能写一条指令。

指令前可用“标号:”表示指令地址,以便在指令中引用;标号是符号名,以字母开头。

注释行应以“;”号开头;指令后也可用“;”号分隔,附加注释。

程序由伪指令ORG XXXXH 定位,ORG中的16位地址就是将来写入程序存储器的绝对地址。程序中的ORG应按地址从小到大排列。由ORG定位的程序段可以不连续,汇编程序将会在段间的空地址上填00H,即NOP。因此,每个ORG段的最后一条指令一般应是转移指令。

数据由伪指令DB(字节)或DW(双字节)说明。数值应以数码0-9开头;尾缀说明:B-二进制,D-十进制,H-十六进制。十进制D可缺省。

也就是说你可以想象你的数据空间是从0000-FFFF

因为你在编程时你只能操纵这个区,而程序性指令如JUMP永远不会跳到数据区的

所以一个简单的初始化可以这样来做

MOV R0,#00H

MOV A,#00H

MOV R1,#FFFFH

loop:

MOV@R0,A

INC R0

DANZ R1,loop

将0000-FFFF全置零了

如果用C来写可以这样吧

memset(0000,0000,FFFF) /*add,int val,int count */

如果memset函数可以使用的话.

我总觉的void pokeb(int segment,int offset,int value) 将字节value写到segment:offset处

这个涵数无法使用。因为mcs-51没段概念。

参考

如果随意对一个累加器A中的二进制数据进行“二进制转十进制”调整是没有任何实际意义的!

DA调整的对象是在ADD或ADDC之后的结果,而且是以BCD码相加以后才能够调整,否则没有实际意义!

比如,现在要执行12D+39D也就是两个十进制数相加这样一个加法(有时候程序处理的需要,数据在单片机中是以BCD码的形式存储的,也就是12H和39H(十六进制),但我们可以人为将它们看为12D和39D(十进制),而且还希望相加以后的结果为51H,也就是说符合十进制运算规则12+39=51,而不是4BH的结果),但这样的十进制加法运算在单片机中是不能够直接实现的。因为单片机只能够执行二进制加法指令,也就是所有的运算都按照二进制中的规则进行!

于是就出现了DA调整指令!

现在12H+39H,将12H放于A中,执行 ADD A,#39H指令,则结果为4BH,这不是我们希望的51H的数据形式!!这时执行DA A 指令后,就会将A中的数据调整为51H(具体调整过程和原理你可以详细看书,如果单片机书中讲的不详细,那么微机原理中一定说的非常详细),而我们按照BCD码规则就将其看为51D,符合我们的要求!

也就是说加数和被加数都是BCD码的形式,最大也只可能是99H,也就是我们十进制数中的99,只有这样才会有实际的意义!所以你说的当A=#24H的时候的情况是不会存在的,严格的说是没有意义的!

而且DA A指令只用于十进制BCD码加法指令 ADD/ADDC 以后,否则是没有实际意义的!

谢谢!

参考

顺序编程,分支编程,循环编程,子程序调用:

;p1口八个灯作跑马灯。

org 0000h

ajmp start

org 0030h

start:

mov a,#0ffh ;

clr c ;

mov r2,#08h ;循环八次。

loop: rlc a ;带进位左移。

mov p2,a ;输出到P1口。

call delay ;延时一段时间

djnz r2,loop ;反复循环

mov r2,#07h ;再往回循环。

loop1:

rrc a ;带进位右移

mov p2,a ;输出到P1口。

call delay ;延时一段时间

djnz r2,loop1 ;反复循环

jmp start ;重新开始

delay:

mov r3,#20 ;延时子程序

d1: mov r4,#200

d2: mov r5,#248

djnz r5,$

djnz r4,d2

ret

end

查表编程:

;例程:100

标签:进制定位转移


已有3位网友发表了看法:

  • 访客

    访客  评论于 2022-07-15 17:37:18  回复

    7 那么上述的数字替换相应为1 2 4 5,那么最后的值就是1245. 二进制转化为十六进制比如: 1001010101001 step 1:分组 (把二进制四位一组从右到左分组,当左边的数字不足四位补上0) 0001 0010

  • 访客

    访客  评论于 2022-07-15 10:30:29  回复

    在指令中引用;标号是符号名,以字母开头。注释行应以“;”号开头;指令后也可用“;”号分隔,附加注释。程序由伪指令ORG XXXXH 定位,ORG中的16位地址就是将来写入程序存储器的绝对地址。程序中的ORG应按地址从小到

  • 访客

    访客  评论于 2022-07-15 18:29:48  回复

    ,也就是所有的运算都按照二进制中的规则进行!于是就出现了DA调整指令!现在12H+39H,将12H放于A中,执行 ADD A,#39H指令,则结果为4BH,这不是我们希望的51H的数据形式!!这时执行DA A 指令后,就

欢迎 发表评论:

网络黑客排行
最近发表
标签列表