Memory 内存和数据组装

Memory 内存和数据组装,memory,assembly,Memory,Assembly,我不知道在汇编表中的不同情况下如何处理数据 我有以下简单的程序: section .data Digits: db "0123456789ABCDEF" Sums: dd 15,12,6,0,21,14,4,0,0,19 Sums2: db 15,12,6,0,21,14,4,0,0,19 section .text global _start _start: nop ; Put

我不知道在汇编表中的不同情况下如何处理数据

我有以下简单的程序:

section .data
        Digits:  db "0123456789ABCDEF"
        Sums:    dd 15,12,6,0,21,14,4,0,0,19
        Sums2:   db 15,12,6,0,21,14,4,0,0,19

section .text   
global _start


_start:
    nop                    ; Put your experiments between the two nops...
    mov ecx,2
    mov al, byte [Sums+ecx*2]
    mov bl, byte [Sums2+ecx*2]
    mov dl, byte [Digits+ecx*2]
    nop
现在,当我一条一条地调试它时,我看着寄存器,不知道发生了什么

rcx --> as expected it contains the decimal 2
rdx --> as expected it contains the hexadecimal 34 which represents the decimal 4
rax --> has c which represents new page
rbx --> has 15 which represents negative acknowledge (NAK character)

我希望在rax中找到6个,在rbx中找到1个。我不明白为什么它没有发生。我在搞一个小小的endian建筑。谢谢

您的
总和
Sums2
被定义为十进制值,但调试器正在显示十六进制值<代码>0xC=
12
0x15
=
21
SUMMES
是一个DWORDs数组,因此每个元素占用4个字节-您可以看到第二个元素的最低字节
Sums2
是一个字节数组,因此您看到的是第五个元素。为什么在rbx中预期为1?在任何地方都看不到1..对从0开始的地址行进行成像我正在读取双字32-64(第二个元素)中的32-40位。因为我在一个小小的endian拱门上。数字不应该是58-64位吗?其余的是清楚的,我错误地认为每个数字占用一个字节,我不认为数字是一个字符串,转换发生,而对于数字显然不发生。谢谢