从两个字节组装十六进制表示

时间:2012-04-03 19:44:35

标签: assembly x86 nasm

我想输入一个像415A6B31这样的字符串,汇编函数应该返回AZk1 所以我必须采取每两个字节并转换为一个字节... 41 = A 5A = z等等

如何在装配中制作它?

1 个答案:

答案 0 :(得分:0)

查看您正在处理的数字。字符串是十六进制是吗?查找十六进制值0-9是0x30到0x39,用0xF得到0-9是吗?因为0xF和0xF不会导致0xA,所以对于字符串中的每个字节

if(byte>0x39) byte = byte - 7;
byte=byte&0xF;

给你半字节(nybbles)0x4,0x1,0x5,0xA等。然后将半字节组合成字节

(0x4<<8)|0x1 = 0x41, (0x5<<4)|0xA = 0x5A, etc.

C语言符号:

<< means shift left
& means and
| means or
- means subtract
0x means the number is in hexadecimal