80H的二十六进制数后面写一个H是多少?

一、数制转换CPU只认识二进制数,但我们日常使用的是十进制数。为此,需要在二进制数和十进制数间进行转换,也就是数制转换。1.十进制数转换为二进制数比如把十进制数93转换到二进制数,93 = 01011101B(n = 8)。其中B是binary的简写,表示二进制;n = 8表示二进制数的比特数。键盘输入数字时,首先打入的数字是高位数,为此,将前一次打入的数字乘以十加上现在打入的数字,得到的结果就是计算机能够理解的二进制数表征的值。以键盘输入193为例,(1*10+9)*10+3=193=11000001B(n = 8)。2.二进制数转换为十进制数比如把二进制数01011101B(n = 8)转换为十进制数,01011101B(n = 8)=2^6+2^4+2^3+2^2+1=93,该转换方法称为位置加权法。但是位置加权法不适合计算机程序运行,下面介绍两种常用的适合计算机程序运行的数制转换算法——除十取余法、比较法。①除十取余法以二进制数11000001B(n = 8)为例,其值是193。对193除以10,得到19余3,这个余数3是193的个位数;再对19除以10,得到1余9,这个余数9是193的十位数;再对1除以10,得到0余1,这个余数1是193的百位数。此时整除数为0,不再进行除法运算。②比较法如果二进制数高于或等于100,那么在百位加1,二进制数减去100。然后,再和100进行比较,如果高于或等于100,那么在百位再加1。如果高于100,那么再和10进行比较。如果高于或等于10,那么在十位加1,二进制数减去10。然后,再和10进行比较,如果高于或等于10,那么在百位再加1。如果高于10,那么再和1进行比较。如果低于十,那么再和1进行比较。以此类推。3.十六进制数与二进制数的相互转换每一位十六进制数对应四位二进制数。比如93 = 5DH(n = 8).其中H是hexadecimal的简写,表示十六禁止;n = 8表示比特数。4.十六进制数与十进制数的相互转换先将十六进制数转换为二进制数,再根据②的方法转换为十进制数。二、算术运算1.寄存器的产生算术运算有“+”“-”“*”“/”。进行算术运算前需要知道字长是多少。因为计算机算术运算是以字为单位进行的,比如97+89=01100001B(n = 8)+01011001B(n = 8)=10111010B(n = 8)。如果把需要运算的数据都存放在存储器中,那么CPU进行运算时需要经过数据总线从存储器读取数据,而这会使得大量时间浪费在数据传输上,降低了运算效率。因此,可以将需要运算的一部分数据存放在CPU内部,这样CPU需要运算时就可以直接在CPU内部获取运算数据,CPU内部暂存运算数据的部件称为寄存器。但是寄存器必然会增加CPU的体积,为了控制CPU的体积,寄存器数量不会很多。因为CPU处理的数据大多是字节型的,也就是8个字的长度,所以16位CPU内部也可以有8位寄存器。两个8位寄存器可以拼接成一个16位寄存器。根据数据的位长选择使用8位寄存器还是16位寄存器。两个被拼接的8位寄存器有以下四组类型AH、AL;BH、BL;CH、CL;DH、DL。其拼接成的16位寄存器也有对应的四种类型AX、BX、CX、DX。2.汇编语言对数的操作将数据97存储到AL寄存器中,用汇编语言表述为 MOV AL,97以上语句中,MOV是助记符,AL是目的操作数(DST),97是源操作数(SRC)。接下来我们用刚学到的助记符、目的操作数、源操作数的概念来解读下面这个语句。ADD AL,89上面这个语句的意思是将源操作数89与目的操作数AL进行相加,并把相加得到的结果放入目的AL。汇编语言中,数据必须以数字0到9作为开头,名称必须以字母作为开头,这样可以避免不同数据类型相混淆。汇编语言中,有符号的数字,其最高位为符号位。比如一个8位的数,其最高位第7位(最低位是第0位)是符号位,若数字是正数,则符号位是0,若数字是负数,则符号位是1。在计算机中,这种表示有符号数的方法称为机器数表示法。下面介绍计算机进行数值运算时的一种错误:溢出。溢出产生于两个数相加。比如01100001B+01011001B=10111010B就产生了溢出错误。一个8位的有符号数,因为其最高位是符号位,真正能用于表示数值大小的只有7位。当两个8位有符号数相加,其次高位发生了进位,此时需要7位二进制数不能够表示相加结果的数值大小了,这类错误便称之为溢出。3.处理器状态字寄存器(PSW,又称标志寄存器)CPU在运行过程中常常需要根据当前运算结果以决定接下来进行什么操作。在微机原理总览一文中有介绍“ALU”,ALU是运算的工具,ALU运算得出的数据会存储在寄存器(寄存器在CPU内部)或者是存储器(在CPU外部)中。CPU内部专门设计了一个设置运算后结果状态的寄存器——处理器状态字寄存器(PSW)。处理器状态字寄存器(PSW)中的每一位都表示一种状态,称为状态位。因而在部分书籍中,处理器状态字寄存器也称为标志寄存器。处理器状态字寄存器的位数与CPU的位数相同。以前文介绍过的溢出错误为例,其在处理器状态字寄存器中由OF位表示,OF置1表示发生溢出错误,OF置0表示未发生溢出错误。CPU通过读取处理器状态字寄存器中各位的值来获知当前的状态,从而决定接下来进行什么操作。而处理器状态字寄存器中各位的值由CPU根据当前运算的结果来赋值。CPU进行运算是处理器状态字寄存器的值更新的必要条件。若CPU没有进行运算,CPU就不会影响PSW。比如 MOV AL,97这条指令只是将数据97传送到寄存器AL,并没有进行运算。因而这条指令执行以后,PSW各状态位的值不受影响。三、逻辑运算逻辑运算包含与(AND)、或(OR)、异或(XOR),非(NOT)1.与运算(AND)将数据97存储到AL寄存器中,用汇编语言表述为 MOV AL,97以上语句中,MOV是助记符,AL是目的操作数(DST),97是源操作数(SRC)。通过以上操作,寄存器AL中储存了97。再通过AND AL,89即可实现97(AL中储存的数值)与89的与运算,并且与运算的结果保存在寄存器AL中。与运算的应用:将操作数中的某些位清零,且不改变其余位的值,比如将8086CPU(16位)的AX寄存器(16位)的低四位清零,其余位不变。AND AX FFF02.或运算(OR)将数据97存储到AL寄存器中,用汇编语言表述为 MOV AL,97以上语句中,MOV是助记符,AL是目的操作数(DST),97是源操作数(SRC)。通过以上操作,寄存器AL中储存了97。再通过OR AL,89即可实现97(AL中储存的数值)与89的或运算,并且或运算的结果保存在寄存器AL中。或运算的应用:将操作数的某些位置1,且不改变其余位的值,比如将8086CPU(16位)的AX寄存器(16位)的低四位置1,其余位不变。OR AX 000F3.异或运算(XOR)将数据97存储到AL寄存器中,用汇编语言表述为 MOV AL,97以上语句中,MOV是助记符,AL是目的操作数(DST),97是源操作数(SRC)。通过以上操作,寄存器AL中储存了97。再通过XOR AL,89即可实现97(AL中储存的数值)与89的异或运算,并且异或运算的结果保存在寄存器AL中。异或运算的应用:将操作数的某些位取反,且不改变其余位的值,比如将8086CPU(16位)的AX寄存器(16位)的低四位取反,其余位不变。OR AX 00014.非运算(NOT)将数据97存储到AL寄存器中,用汇编语言表述为 NOT AL,97以上语句中,MOV是助记符,AL是目的操作数(DST),97是源操作数(SRC)。通过以上操作,寄存器AL中储存了对97取反的结果。非运算的应用:将操作数的某些位取反,且不改变其余位的值,比如将8086CPU(16位)的AX寄存器(16位)的低四位取反,其余位不变。OR AX 0001以上四种运算,除了非运算,都会影响处理器状态字寄存器(PSW)的状态位。非运算对处理器状态字寄存器(PSW)的所有状态位均无影响。四、带符号数的码制汇编语言中,有符号的数字,其最高位为符号位。比如一个8位的数,其最高位第7位(最低位是第0位)是符号位,若数字是正数,则符号位是0,若数字是负数,则符号位是1。在计算机中,这种表示带符号数的方法称为机器数表示法。1.带符号数用原码表示用原码表示带符号数X,记作 [X]_{原} ,表示求数X的原码。用原码表示带符号数,这种方法实际上是机器数。比如: [+3]_{原}=0000 0011B , [-3]_{原}=1000 0011B , [+0]_{原}=0000 0000B=00H ,[-0]_{原}=1000 0000B=80H\ne[+0]_{原} 但+0与-0是相等的,用以上方法表示带符号的0就会产生错误。2.带符号数用补码表示针对上面的这个错误,提出了更为完善的表示带符号数的方法——补码。用 补码表示带符号数X,记作 [X]_{补} ,表示求数X的补码。补码的规则如下:若 X\geq0 ,则 [X]_{补}=X ;若 X<0 ,则 [X]_{补}=2^{n}+X 。因而正数的补码等于其原码。以-3为例,若n=8,则 [-3]_{补}=2^{8}-3=1000 0000B-0000 0011B=1111 1101B ,[-3]_{原}=1000 0011B 。可见,原码的符号位不变,其它位按位取反,末位加一就是其表示的带符号数的补码。0的补码是00H,由此就解决了+0的原码和-0的原码不相等的问题。补码表示有符号数的范围:若字长为8位,则范围是+127~-128;若字长为16位,则范围是+32767~-32768;以此类推。计算机中,有符号数均用补码表示。补码的运算规则[X+Y]_{补}=[X]_{补}+[Y]_{补} [X-Y]_{补}=[X]_{补}-[Y]_{补}=[X]_{补}+[-Y]_{补} 加法器的结构比减法器要简单,所以计算机中的减法运算往往转化成加法运算。而这需要我们找到一个能够高效求数的相反数的补码的方法。该方法如下:求一个数的相反数的补码时,因为是相反数,所以符号位也去取反了,所以求一个数的相反数的补码时,对该数的所有位(包括符号位)进行补码操作。已知 [Y]_{补} ,求 [-Y]_{补} 的过程称为变补,也称为求负。补充:将补码转化为原码的方法是将补码除符号位外的各位取反后最低位加一。也就是一个数的补码的补码是其原码。五、处理器状态字寄存器的标志位OF:溢出标志位。OF=1表示结果发生溢出错误,OF=0表示结果未发生溢出错误。SF:符号标志位.SF=1表示负,SF=0表示正。CF:进位标志位。SF=1表示有进位,SF=0表示无进位。ZF:全零标志位。ZF=1表示结果是全零,ZF=0表示结果不全为0。 PF:奇偶标志位。PF=1表示结果的各位中1的个数是偶数,PF=0表示结果的各位中1的个数是奇数。(若结果是有符号数,则判断除了符号位的其它位中1的个数的奇偶性)设计PF(奇偶标志位)是为了在数据的串行通信中实现奇偶校验。AF:半进位,半借位。以一个字长为8位的数为例,判断其第3位向第四位有无进位(加法运算中)或有无借位(减法运算中)。半进位、半借位也称为辅助进位(减法中),辅助借位(加法中)。AF=1表示第3位向第四位有进位(加法运算中)或有借位(减法运算中),AF=0表示第3位向第四位无进位(加法运算中)或无借位(减法运算中)设计AF是为了用于BCD数运算的进位或借位。因为1位BCD数用4位二进制数表示。六、BCD码(8421码)每个BCD数包含四位字,通过四位字来表示数0——9。比如BCD数0101 0011表示53。存储器中每个存储单元的字长是8位,除了可以在一个存储单元中存入BCD数0101 0011来 表示53.BCD数0101 0011称为组合BCD数。也可以在两个相邻的存储单元中分别存入xxxx 0011和xxxx 0101来表示53,xxxx 0011和xxxx 0101称为分离BCD数两个BCD数的相加运算需要进行调整修正才能得到正确的结果。比如53+28,其用BCD数表示是0101 0011B + 0010 1000B = 0111 1011B=7BH。但是53+28实际上是等于81的,直接用BCD数进行计算出错。错误原因是,一个BCD数由4位字组成,CPU对两个BCD数进行运算时相当于是16进制运算,而我们用BCD码表示10进制数,进制不同导致的错误。修正方法:对于加法,若两个BCD码位相加无进位,且结果小于或等于9,则该位不需要修正;若两个BCD码位相加有进位,或者结果大于9,则对该位进行加6修正(为什么要加6?因为一个BCD数有4位字组成,相当于是16进制的。这时我们通过给结果再加上6迫使其进位);低BCD码位修正结果使高BCD码位大于9,则高位进行加6修正。对于减法,若两个BCD码位相减无借位,则该位不需要修正;若两个BCD码位相减有借位,则该位应进行减6修正。DAA是组合BCD数的调整指令。AAA是分离BCD数的调整指令。七、ASCII码计算机中的字符均由ASCII码表示。

我要回帖

更多关于 十六进制数后面写一个H 的文章

 

随机推荐