0

我试图将 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
4

0 回答 0