当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

汇编语言进制转换

更新:03-27 整理:39baobao.com
字体:

[进制的转换请问进制如何转换尤其是小数和负数]整数是除2取余倒计法,小数是乘2取整正计法。负数和正数一样,只是最后加个负号就行了。举几个例子 首先八进制Octal: 八进制Octal是以8为基的。因为8 == 2^3, 所以每个八进制数字...+阅读

比如

若在某存储区中已输入4个ASCII码表示的的16进制数码(高位在前),把它们转换为2进制数据放入BX寄存器对中,并显示在屏幕上。

可以这样

data segment

buff db 31h,32h,41h,42h

num db 16 dup (0)

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov si,offset buff

mov di,offset num

mov cx,4

jo4:

mov al,byte ptr buff[si]

cmp al,9

jbe jo

sub al,7h

jo:

sub al,30h

mov bl,2

jo3:

div bl

cmp al,0

mov byte ptr num[di],ah

inc di

jz jo2

jmp jo3

jo2:

inc si

loop jo4

mov cx,4

jo6:

push cx

mov cx,4

jo5:

mov di,offset num

mov al,byte ptr num[di+3]

add al,30h

mov dl,al

mov ah,02h

int 21h

dec di

loop jo5

pop cx

add di,4

loop jo6

mov ah,4ch

int 21h

code ends

end start

C语言二进制详解

在数学计算中,二进制计数系统的公分母是最小的,它以2为基数。你还记得在小学或中学时所学的不同的计数系统吗?笔者在上小学时,曾在一堂数学课中学过以6为基数的计数系统;你先数1,2,3,4,5,然后是10,11,12,13,14,15,然后是20,等等,实际上,应该先数0,1,2,3,4,5,然后是10,1l,12,13,14,15,等等。从O开始数,能比较清楚地看出每6个数字组成一组——因此6就是基数。注意,你应该从O开始一起数到比基数小1的数(因为基数是6,所以你应该从O数到5)。当你数到5后,接着应该开始数两位数。如果你思考一下,你就会发现这与以10为基数(十进制)的计数系统是类似的——在你数到比基数小1的数(9)后,就转到两位数,并继续往下数。 计算机中的计数系统以2为基数——即二进制。

由于以2为基数,所以你先数O,1,然后是10,11,然后是100,101,110,111,然后是1000,1001,1010,1011,1100,1101,1110,1111,等等。与以6为基数时不同,在以2为基数时,在数到两位数之前,只需从O数到1。 那么,为什么在计算机中要以2为基数呢?其原因在于计算机中使用了晶体管。晶体管使现代计算机的出现成为可能。晶体管就象电灯开关,电灯开关有“开”和“关”两种状态,晶体管也是如此。你可以认为“关”表示0,“开”表示1,这样,你就可以用一个晶体管(如果你愿意,也可以用一个电灯开关)来进行从。到1的计数了。仅仅使用两个数字(O到1)还不能做任何复杂的计算,但是我们还可以继续下去。假设有一个电灯开关控制面板,上面有4个大电灯开关,尽管每个开关只有两种状态,但是这些开关组合起来就会有16或2。

(4个开关,每个2种状态)种不同的状态。这样,你就可以用4个开关来进行从。到15的计数了,见表20.22。 表20.22 进制计数 ------------------------------------------------------- 开关 十进制值 幂 ------------------------------------------------------- O O 1 1 20 10 2 21 11 3 100 4 22 101 5 110 6 111 7 1000 8 23 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 ------------------------------------------------------- 上表说明了很重要的三点: 通过把开关并排放在一起,你就可以用它们来计数了——在本例中最多可以数到15(总共16次计数); 你可以把每个开关看作是一个二进制位,就象十进制系统中的十进制位一样; 如果每个开关都代表一个二进制位,那么它们刚好也都代表一个2的幂(20,21,22,23,等等)。 此外,请注意,在表中出现2的幂的地方,计数结果就要增加一个二进制位。

这与十进制系统是相同的,每增加一个十进制位时,这个新的十进制位也正是一个10的幂(1=100,10=101,100=102,等等)。明白了这一点后,你就可以很容易地把二进制数转换为十进制数了,例如,二进制数10111就是(1*24)+(O*23)+(1*22)+(1*21)+(1*20),它等于十进制的(16+0+4+2+1)或23。10 1110 1011,一个大得多的二进制数,就是(1*29)+(O*28)+(1*27)+(1*26)+(1*25)+(0*24)+(1*23)+(O*22)+(1*21)+(1*20),它等于十进制的(512+0+128+64+32+0+8+0+2+1)或747。 那么所有这些和我们有什么关系呢?在计算机领域中,存在着位(bit),半字节(nibble)和字节(byte)。一个半字节是4位,一个字节是8位。什么是一个位呢?它就是一个晶体管。因此,一个字节就是8个相邻的晶体管,就象表20.1中的4个开关一样。记住,如果你有4个组合在一起的开关(或晶体管),你就可以数24或16,你可以把这看作是由开关组成的一个半字节。

如果一个半字节是4个晶体管组合在一起,那么一个字节就是8个晶体管组合在一起。你可以用8个晶体管数到2。或256,从另一个角度看,这意味着一个字节(含8个晶体管)可以表示256个不同的数字(从0到 255)。再深入一点,Intel 386,486和Pentium处理器被叫做32位处理器,这意味着这些Intel芯片所进行的每一次运算都是32位宽或32个晶体管宽的。32个晶体管,或32位,等价于232或4,294,967,296,即它们能表示超过40亿个不同的数字。 当然,上述说明还不能解释计算机是如何利用这些数字产生那种神奇的计算能力的,但它至少解释了计算机为什么要使用以及是如何使用二进制计数系统的。

计算机语言二进制补码

计算机对正负的表示是通过最高位来体现的,即0,111是正数,(10进制中是7),1,111是负数(10进制中是-7),代表符号位的0或1与之后的数用逗号隔开。 在补码中正数的补码与原码相同,即:0,111的补码还是0,111,所以很好讨论; 但对于负数的补码则是取反加+1(符号位不变),即:1,111先取反码1,000,再+1得1,001; 补码的正负由于符号位不变,所以当第一位是0,无论原,反,补码都是正数,同理第一位是负,则原,反,补码都是负数 至于你问的“在负数1前加0不是又变成正数了 我想问 哪一位才是最前那一位?” 在计算机中是不能直接把一个0或1插到数中的,但可以通过移位来实现,这在计算机中是很方便实现的。 正数因为补码等于原码所以非常容易讨论; 但负数补码的移位不好解释,简单的说就是 左移的时候再最后面添个0,例1,110(-2)左移一位得1,100(-4) 右移的时候再最前面添个1,例1,110(-2)左移一位得1,111(-1) 注意这里的最前与最后都是逗号之后的那个0或1,符号位雷打不动! 最后说一下在负数1前加0不是又变成正数了这句话本身就是不对的,所以不要在这个地方纠结

本文地址:https://www.39baobao.com/show/29_49287.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

求高人关于讲解电脑进制的转换方法??进制、八进制、十六进制转换为十进制----------按位权展开。 二进制转换十进制进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 例如,设有一个二进制数:0110 0100...

如何将数字转换为2进制10进制数转换为2进制数给你一个十进制,比如:6,如果将它转换成二进制数呢?10进制数转换成二进制数,这是一个连续除2的过程:把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。...

用C语言编写一个函数实现十六进制数至十进制数的转换在主函数中输#include#include#includeint main(){ void tran(int); int x; printf("请输入一个十六进制数:"); for(;;printf("输入不正确,请输入一个十六进制数:")) { if(scanf("%x",&x)) break; fflus...

易语言汉字转换成unicode编码10进制.版本 2 .支持库 ePY .子程序 取汉字区位码, 文本型 .参数 _字, 文本型, , 只取第一个字 .局部变量 高字节, 整数型 .局部变量 低字节, 整数型 .局部变量 区码, 整数型 .局部变量...

如何用c语言将十进制数转换为二进制//--------------------------------------------------------------------------- #include <stdio.h> long int btd(char *s) /*将以字符串形式存储在s地址中的二进制数字...

如何用c语言编写将十进制的数转换成二进制数的程序简单办法是用联合体,直接打印出来。 typedef union DANDB { unsigned long int i; // 存放十进制数 unsigned char c[4]; // 按字元(bit) 直接打印它出来 } DandB; int main() {...

C语言十进制转二进制和二进制转十进制举例 十进制123.转换成二进制123/2=61余数...1 ***********************61/2=30余数...1 ***********************30/2=15.......0 ***********************15/2=7........1...

如何用汇编语言把十六进制数1A5F转换成ascii码并显示在屏幕上如何用汇编语言把十六进制数1A5F转换成ascii码并显示在屏幕上,C语言字符转换ASCII码:1、将1A5Fh存入内存X中; 2、分四次将x取出放入AX中,对AX循环左移4位,将左移后的结果存回x中,...

C语言输入罗马数字转换成十进制的数字C语言输入罗马数字转换成十进制的数字,c语言程序二进制转化成十进制程序怎么写:#include <string.h> #include <stdio.h> #include <stdlib.h> #define SYMBOLNUM 7 int GetSy...