Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何将大于255的十进制数转换为两个8位(2字节)的十进制数_Assembly_Utf 8_Numbers_Byte_8 Bit - Fatal编程技术网

Assembly 如何将大于255的十进制数转换为两个8位(2字节)的十进制数

Assembly 如何将大于255的十进制数转换为两个8位(2字节)的十进制数,assembly,utf-8,numbers,byte,8-bit,Assembly,Utf 8,Numbers,Byte,8 Bit,好的,我知道如何将十进制转换为8位,例如,按十进制的字符“a”是65 将其转换为二进制非常简单 但是如果小数点大于255 例如,阿拉伯字符“م”十进制为1605,二进制为11001000101 当我在任何网站上转换它时,它会显示110110010000101 我想知道11001000101be110110010000101看起来您正在使用,在Python中,您可以这样做: >>> "_".join(f"{byte:08b}" for by

好的,我知道如何将十进制转换为
8位
,例如,按十进制的字符“a”是
65
将其转换为二进制非常简单 但是如果小数点大于
255
例如,阿拉伯字符
“م”
十进制为
1605
,二进制为
11001000101
当我在任何网站上转换它时,它会显示
110110010000101

我想知道
11001000101
be
110110010000101
看起来您正在使用,在Python中,您可以这样做:

>>> "_".join(f"{byte:08b}" for byte in "م".encode("utf8"))
'11011001_10000101'

看起来您正在使用,在Python中可以执行以下操作:

>>> "_".join(f"{byte:08b}" for byte in "م".encode("utf8"))
'11011001_10000101'
您的阿拉伯文字符“م”有十进制的代码点1605。十六进制为0645h,二进制为0000'0110'0100'0101b

utf-8编码将使用下一个模板,以1个字节表示代码点在U+0000到U+007F范围内的所有字符:

0_______
 ^
 | 7 bits
utf-8编码将用2个字节表示代码点在U+0080到U+07FF范围内的所有字符。在此范围内,您的阿拉伯语字符“م”位于U+0645h

当处理2个字节时,模板变为

110_____ 10______
   ^       ^
   |       | 6 bits
   | 5 bits
在此模板中,我们填写代码点11001'000101b二进制表示的最低(仅)11位:

110_____ 10______
   ^       ^
   | 11001 | 000101
这将生成二进制文件110'11001'10'000101b

以下是[U+128,U+2047]中代码点转换的x86汇编版本:

                                       <------ AX ------->
mov ax, 1605        ; Your example:    0000 0110 0100 0101
                                        /                / 
                                       /                /  Shift left the whole 16 bits, twice
shl ax, 2                              0001 1001 0001 0100
                                                 \      \
                                                  \      \ Shift right the lowest 8 bits, twice
shr al, 2                              0001 1001 0000 0101
                                       |||       ||
                                       |||       ||        Put in the template bits
or  ax, 1100000010000000b              1101 1001 1000 0101
                                       <- AH --> <-- AL -> 

莫瓦克斯,1605年;您的示例:0000 0110 0100 0101
/                / 
//Shift左移整个16位,两次
shl ax,2 0001 1001 0001 0100
\      \
\\将最低8位右移两次
shr al,2 0001 1001 0000 0101
|||       ||
|||| |输入模板位
或ax,110000000000B 1101100 1000 0101
现在,
AH
寄存器包含utf-8编码的第一个字节,
AL
寄存器包含utf-8编码的第二个字节

因为x86是一种小端结构,其中最低的字节首先存储在内存中,所以在将结果移动到内存之前,
xchg al,ah
指令将修正字节顺序:
mov[somewhere],ax

您的阿拉伯文字符“م”有十进制的代码点1605。十六进制为0645h,二进制为0000'0110'0100'0101b

utf-8编码将使用下一个模板,以1个字节表示代码点在U+0000到U+007F范围内的所有字符:

0_______
 ^
 | 7 bits
utf-8编码将用2个字节表示代码点在U+0080到U+07FF范围内的所有字符。在此范围内,您的阿拉伯语字符“م”位于U+0645h

当处理2个字节时,模板变为

110_____ 10______
   ^       ^
   |       | 6 bits
   | 5 bits
在此模板中,我们填写代码点11001'000101b二进制表示的最低(仅)11位:

110_____ 10______
   ^       ^
   | 11001 | 000101
这将生成二进制文件110'11001'10'000101b

以下是[U+128,U+2047]中代码点转换的x86汇编版本:

                                       <------ AX ------->
mov ax, 1605        ; Your example:    0000 0110 0100 0101
                                        /                / 
                                       /                /  Shift left the whole 16 bits, twice
shl ax, 2                              0001 1001 0001 0100
                                                 \      \
                                                  \      \ Shift right the lowest 8 bits, twice
shr al, 2                              0001 1001 0000 0101
                                       |||       ||
                                       |||       ||        Put in the template bits
or  ax, 1100000010000000b              1101 1001 1000 0101
                                       <- AH --> <-- AL -> 

莫瓦克斯,1605年;您的示例:0000 0110 0100 0101
/                / 
//Shift左移整个16位,两次
shl ax,2 0001 1001 0001 0100
\      \
\\将最低8位右移两次
shr al,2 0001 1001 0000 0101
|||       ||
|||| |输入模板位
或ax,110000000000B 1101100 1000 0101
现在,
AH
寄存器包含utf-8编码的第一个字节,
AL
寄存器包含utf-8编码的第二个字节

因为x86是一种小端结构,其中最低的字节首先存储在内存中,所以在将结果移动到内存之前,
xchg al,ah
指令将修正字节顺序:

mov[somewhere],ax

请更清楚地解释转换的最后一个面板请更清楚地解释转换的最后一个面板