Sigsegv

问题描述 投票:0回答:1
没有向控制台输出任何内容。似乎它运行了

forever.

没有人知道为什么?

感谢很多!随时问我有关我卑鄙的代码的问题。

SECTION .data linefeed db 0xA,0xD SECTION .bss SECTION .text global _start _start: mov eax,13 int 80h ;push eax mov edi,eax mov bl,1 mov cl,0 bitmaska: shl bl,cl and al,bl shr al,cl shr bl,cl add al,48 mov edx,1 movzx ecx,al mov ebx,1 mov eax,4 int 80h ;pop eax mov eax,edi inc cl cmp cl,8 jnz bitmaska konec: mov edx,1 mov ecx,linefeed mov ebx,1 mov eax,4 int 80h mov ebx,0 mov eax,1 int 80h 操作

在循环中,循环与您的循环所取决于的其他寄存器混乱!此外,您没有在ECX中提供此系统调用的地址。一旦起作用,您会注意到输出处于反向顺序,因为您以最低位开始。二进制表示必须在左侧具有最重要的位,因此从最高位开始。

我建议您在循环中时不会输出,而是将存储到内存,然后您可以一次输出所有内容。 为此,您将lineFeed的定义更改为: write

8个问号是您实际的“ 0”和“ 1”字符的位置持有人。最终输出变为:

buffer db '????????' linefeed db 13, 10

现在,核心循环应该是一个简单的循环。无需通过Cl的多次转移:
konec:
 mov   edx, 10
 mov   ecx, buffer
 mov   ebx, 1
 mov   eax, 4
 int   80h
assembly x86 segmentation-fault nasm
1个回答
0
投票
如果相反顺序是有意的,然后只需替换

mov ebx, eax mov edi, buffer mov ecx, 8 bitmaska: mov al, 48 shl bl, 1 ; Shift a bit out into the carry adc al, 0 ; Add that bit to the value 48 stosb ; Store '0' or '1' in the buffer dec ecx jnz bitmaska

shl bl, 1
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.