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
be110110010000101
看起来您正在使用,在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
请更清楚地解释转换的最后一个面板请更清楚地解释转换的最后一个面板