Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BASE64 encoding, Помогите написать прогу 
:(
    Опции темы
xsi
Дата 3.12.2005, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2005

Репутация: нет
Всего: нет



Срочно надо написать прогу (до 8.12).. сам никак не успею экзамены..
Кто знает АСМ проблем быть не должно..
Понимаю что напрягаю поетому готов возместить ваши старания...
Пишите за сколько и как быстро сделаете...

Вот собственно задание.. работать будет под Линукс.


Код

# $Id: d8.s,v 1.1 1994/10/14 05:07:37 ppessi Exp $ 
# 
# Write a subroutine which encodes binary data into BASE64 format. In
# the BASE64 encoding each consecutive three bytes are converted to
# four printable ASCII characters. BASE64 is used to transfer binary
# data via Internet mail.
# 
# You can find additional information about BASE64 encoding in the RFC
# 1521. The RFC 1521 is located in directory '/p/edu/tik-61.125/doc'.
# The section describing BASE64 is in separate file 'base64.txt'
#
# Your subroutine is required to convert one line (maximum 45 bytes of
# binary data) at the time. The result will have maximum of 60
# characters. If the length of the data is not evenly divisible by 3,
# the program should add as many '=' characters as needed.
#
# The arguments of the subroutine are passed as follows:
#
# $a0 contains the address of the binary data to be encoded
# $a1 contains the length of the binary data
# $a2 contains the address of buffer for the result
#
# You can assume that the result buffer is big enough to store on line
# (at least 62 characters). 
#
# Note that the $a1 may be bigger than 45.
#
# You should concatenate the encoded line with line feed (ASCII code
# 10) and NUL (ASCII code 0).
#
# The C-prototype of the subroutine is as follows:
#
# int base64encode(void const *data, int size, char *coded);
#
# The subroutine should return the number of encoded bytes in register
# $v0, which same as 'size' (passed in $a1) only when 'size' is less
# or equal than 45.
#
##################################################
#############################
#
# Main program to test base64encode()
#
.text
.globl main
main:
# Create a stack frame for main program
subu $sp $sp,16
sw $s1 12($sp) 
sw $s0 8($sp)
sw $ra 4($sp) # return address
sw $fp 0($sp) # old frame pointer
addu $fp $sp,16 # update frame pointer

# Initialize loop
la $s0 data
li $s1 52

# Test data - 53 bytes of binary data
.data
data: .word 0x95dfc79f 0xaaccca9b 0xbfc8cd9c 0xbf8dd181
.word 0xfec0cb86 0xadd9db9b 0xaaccc88e 0xfeddd79b
.word 0x3a499e8e 0xa8ccd781 0xfeddcb87 0xaaccdf81
.word 0xbf8390ef
# Buffer for result
buffer: .space 64
.text

bloop: # Get arguments into registers
move $a0 $s0
move $a1 $s1
la $a2 buffer
# ... and call the base64encode
jal base64encode

# Check result
bgtu $v0,$s1 .failure1 # more converted than given?
subu $s1 $s1,$v0
addu $s0 $s0,$v0

# Print result
li $v0 4
la $a0 buffer
syscall

bnez $s1 bloop

# Print correct result
.data
.ok: .ascii "\nFollowing is correct BASE64 encoding:\n"
.enc1: .ascii "ld/Hn6rMypu/yM2cv43Rgf7Ay4at2d"
.ascii "ubqszIjv7d15s6SZ6OqMzXgf7dy4eq"
.ascii "\n"
.enc2: .asciiz "zN+Bv4OQ7w==\n"
.text
li $v0 4
la $a0 .ok
syscall

# Insert your own tests here 

# Exit from test program
.exit:
li $v0 10
syscall

# Test failed
.failure1:
.data
.fail1: .asciiz " The base64encode() failed test 1.\n"
.text
li $v0 4
la $a0 .fail1
syscall
j .exit

##################################################
#############################
#
# The subroutine base64encode - write your own subroutine here
#
.text
.globl base64encode
base64encode:
XXX
jr $ra

##################################################
############################
#
# Alphabet with 64 characters used with BAS64
# 
.globl base64alphabet
.data
base64alphabet:
.ascii "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"
.ascii "ghijklmnopqrstuvwxyz0123456789+/"
.end

PM MAIL   Вверх
Chingachguk
Дата 4.12.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Не помню тока, работает ли она smile

Код

;
; Кодируем в base64
; UserPassNoCode=ebp+0Ch - строка с нулем на конце
; UserPass=ebp+8
;
base64_str proc
  push ebp
  mov  ebp,esp
  mov  esi,[ebp+0Ch]
  mov  edi,[ebp+08h]
; Получаем длину строки
  INVOKE lstrlen,esi
; Подбиваем строку нулями до размера строки, кратного 3-м
  mov  byte ptr [esi+eax+1],0
; Получаем эффективную длину в 3-х байтных словах
  xor  edx,edx
  mov  ecx,3
  div  ecx
  mov  ebx,edx
  shr  edx,1
  adc  eax,0
  shr  edx,1
  adc  eax,0
  mov  ecx,eax  
@@GetBase64Code:
  xor  eax,eax
  lodsb
  shl  eax,8
  lodsb
  shl  eax,8
  lodsb
  shl  eax,8
  push ecx
  mov  ecx,4
@@GetFourCharBase64:
  rol  eax,6
  push eax
  and  eax,0111111b
  mov  al,byte ptr Table64[eax]
  stosb
  pop  eax
  loop @@GetFourCharBase64
  pop  ecx      
  loop @@GetBase64Code
; Если число символов не было кратно 3, написать знаки "="
  test ebx,ebx
  jz   @@AddEqToBase64End  
  sub  ebx,3
  neg  ebx
  sub  edi,ebx
  mov  al,'='
@@AddEqToBase64:
  test ebx,ebx
  jz   @@AddEqToBase64End
  stosb  
  dec  ebx
  jmp  @@AddEqToBase64
@@AddEqToBase64End:
  mov  byte ptr [edi],0
  pop  ebp
  ret  2*4
Table64 db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
base64_str endp




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
xsi
Дата 4.12.2005, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2005

Репутация: нет
Всего: нет



zapla4u 20WMZ esli prikrutish eto k tomu 4to vishe i budet rabotat.. soglasen?
PM MAIL   Вверх
Chingachguk
Дата 5.12.2005, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



У тебя машина есть такая (это альфа, мотороллер или что ?) или хотя бы эмулятор,
без проверки промежуточных вещей как я ее напишу ?

(т.е. это не интел)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
xsi
Дата 5.12.2005, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2005

Репутация: нет
Всего: нет



MIPS R3000 RISC microprocessor

vot stranica kursa..
http://www.cis.hut.fi/Opinnot/T-61.123/index_en.shtml

skazi plz segodnja esli budesh delat'.. ina4e mne samomu nado na4inat'..
PM MAIL   Вверх
Chingachguk
Дата 5.12.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Сорри, мало времени. Как сможешь запустить код - на муляторе или где еще - спрашивай.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.