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]中,该值应存储为
32 00(十六进制).但是当我使用gdb检查chr内存时,它显示:
(gdb) x /5hx 0x80490d2 0x80490d2 <chr>: 0x0032 0x0031 0x0036 0x000a
我所期待的是0x3200 0x3100 0x3600 x0a00并认为我必须做进一步的内存操作才能得到正确的结果.
我在这个地方出错了吗?有什么东西我似乎无法看到.我真的很感激这里的一点帮助.这是我在stackoverflow上的第一篇文章.
32 00 31 00 26 00 0a 00
但当你将其视为16位值时
0032 0031 0026 000a
同样,如果您将其视为32位值,它将是:
00310032 000a0026
这就是小字节序的古怪.
以上是大佬教程为你收集整理的x86程序集,没有遵循小字节序(或者是吗?)(Linux)全部内容,希望文章能够帮你解决x86程序集,没有遵循小字节序(或者是吗?)(Linux)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。