x86程序集,没有遵循小字节序(或者是吗?)(Linux)
发布时间:2020-12-14 01:29:39 所属栏目:Linux 来源:网络整理
导读:我是汇编语言编程的新手,我编写了一个小程序来使用sys_write系统调用来打印整数.这是我的代码: section .dataN: dw 216chr: dw,0x0asection .bsssection .text global _start_start: xor ax,ax mov ax,word [N] mov cx,10 mov ebx,4shift_while: div cx add
我是汇编语言编程的新手,我编写了一个小程序来使用sys_write系统调用来打印整数.这是我的代码:
section .data N: dw 216 chr: dw,0x0a section .bss section .text global _start _start: xor ax,ax mov ax,word [N] mov cx,10 mov ebx,4 shift_while: div cx add dx,0x0030 mov word [chr+ebx],dx sub ebx,2 xor dx,dx cmp ax,0 jne shift_while call printchar exit: mov eax,1 mov ebx,0 int 80h printchar: pushad mov eax,4 mov ebx,1 mov ecx,chr mov edx,8 int 80h popad ret 我有硬编码216,要打印的数字,我得到正确的输出.然而,我所困惑的是“mov word [chr ebx],dx”指令. dx在第一次迭代中包含0x0032,因此在地址[chr ebx]中,该值应存储为 (gdb) x /5hx 0x80490d2 0x80490d2 <chr>: 0x0032 0x0031 0x0036 0x000a 我所期待的是0x3200 0x3100 0x3600 x0a00并认为我必须做进一步的内存操作才能得到正确的结果. 解决方法
它只是一种代表性的东西 – 从字节方面来看,你在内存中拥有的是什么
32 00 31 00 26 00 0a 00 但当你将其视为16位值时 0032 0031 0026 000a 同样,如果您将其视为32位值,它将是: 00310032 000a0026 这就是小字节序的古怪. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |