Asm ascii到二进制转换

时间:2013-04-08 21:59:36

标签: assembly binary x86 ascii intel

我试图将ascii输入转换为变量中的二进制代码。程序运行良好,而输入的字符数是偶数。不知道为什么奇怪的是我得到了错误的结果。如果输入的数量是奇数,我试图将其转换为8位二进制,就像我得到1像00000001并将它放在第一位然后只需要2个ascii字符,用于低位和高位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

0 个答案:

没有答案