我试图将 ascii 输入转换为变量中的二进制代码。程序运行良好,而输入的字符数是偶数。不知道为什么当它奇怪时我得到了错误的结果。如果输入的数量是奇数,我正在尝试将其转换为 8 位二进制,就像我得到 1 一样 00000001 并把它放在第一位,然后只需将 2 个 ascii 字符用于低 4 位和高 4 位。你能帮我吗 ?
SYSEXIT = 1
SYSREAD = 3
SYSWRITE = 4
STDOUT = 1
STDIN = 0
EXIT_SUCCESS = 0
SIZE = 500
.align 32
.bss
.lcomm bufor, SIZE
.lcomm bufor2, SIZE
.text
.global _start ;
_start:
mov $SYSREAD, %eax
mov $STDIN, %ebx
mov $bufor, %ecx
mov $SIZE, %edx
int $0x80
sub $1, %eax #od liczby znaków odejmujemy znak entera
mov %eax, %edi #przeniesienie liczby wczytanych znaków z eax
mov $0,%dx # reszta z dzielenia
mov $2,%cx #dzielnik
div %cx # ax:=dx:ax / cx
mov $0, %esi
mov $0, %ecx
mov $0, %ebp
petla:
mov bufor(,%ecx,1),%al
inc %esi
cmp $'a',%al
jge male
cmp $'A',%al
jge duze
cmp $'0',%al
jge liczby
next:
cmp $1, %dx
je niep
mov %al,%bl
shl $4, %ebx
inc %ecx
cmp %edi,%ecx
je koniec
jmp petla
next2:
or %al,%bl
mov %bl, bufor2(,%ebp,1)
inc %ebp
inc %ecx
cmp %edi,%ecx
je koniec
mov $0,%esi
jmp petla
male:
sub $'a', %al
add $10, %al
cmp $1,%esi;
je next
jmp next2
duze:
sub $'A', %al
add $10, %al
cmp $1,%esi;
je next
jmp next2
liczby:
sub $'0', %al
cmp $1,%esi;
je next
jmp next2
niep:
mov %al, bufor2(,%ebp,1)
inc %ebp
cmp %edi,%ecx
je koniec
inc %ecx
mov $0,%esi
mov $0,%dx
jmp petla
koniec:
movl $SYSEXIT, %eax; #wyjscie z programu
movl $EXIT_SUCCESS, %ebx
int $0x80