Другие языки программирования и технологии
Создать программу(описание ниже)
Создать программу с функциями упаковки/распаковки группы из 3 чисел диапазона 0..31 (00000..11111) в переменной типа word (свободные разряды справа).
Гриб Молочный, совсем не то. Нужно не строку копировать, а три пятиразрядных числа уместить в два байта.
Язык неизвестен, Visual Studio, MASM, i80386, подпрограммы выделены жирным шрифтом:
.386
.model flat, stdcall
option casemap:none
printf proto C :vararg
_putch proto C :dword
_getch proto C
ExitProcess proto :dword
.data
dGroup db 24, 15, 29
Text1 db "Заданная группа чисел: ", 13, 10, 0
Text2 db 13, 10, 10, "Упакованные числа: ", 13, 10, 0
Text3 db 13, 10, 10, "Распакованные числа: ", 13, 10, 0
Form db "%u", 0
.data?
rPack dw ?
rGroup db 3 dup (?)
.code
;Функция упаковки
Pack proc uses edx ecx esi, lpGroup :dword
mov esi, lpGroup
add esi, 2
mov ecx, 3
xor ax, ax
@@:
mov dl, [esi]
shl dx, 11
shr ax, 5
or ax, dx
dec esi
loop @B
ret
Pack endp
;Функция распаковки
UnPack proc uses eax edx ecx edi, Data: word, lpGroup :dword
mov edi, lpGroup
mov ecx, 3
mov dx, Data
@@:
rol dx, 5
mov al, dl
and al, 1Fh
stosb
loop @B
ret
UnPack endp
WriteDec proc uses eax ecx, Number: byte
movzx eax, Number
invoke printf, addr Form, eax
ret
WriteDec endp
WriteBin proc uses eax ecx edx edi, Number :word
local Buff[17] :byte
mov dx, Number
mov ecx, 16
lea edi, Buff
@@:
rcl dx, 1
setc al
or al, 30h
stosb
loop @B
xor al, al
stosb
invoke printf, addr Buff
ret
WriteBin endp
WriteGroup proc uses eax ecx edx esi, lpGroup :dword
mov esi, lpGroup
mov ecx, 3
jmp WG1
@@:
push ecx
invoke _putch, ','
pop ecx
WG1:
invoke WriteDec, byte ptr [esi]
inc esi
loop @B
ret
WriteGroup endp
N94900008:
invoke printf, addr Text1
invoke WriteGroup, addr dGroup
invoke Pack, addr dGroup
mov rPack, ax
invoke printf, addr Text2
invoke WriteBin, rPack
invoke UnPack, rPack, addr rGroup
invoke printf, addr Text3
invoke WriteGroup, addr rGroup
invoke _getch
invoke ExitProcess, 0
end N94900008

Язык неизвестен, Visual Studio, MASM, i80386, подпрограммы выделены жирным шрифтом:
.386
.model flat, stdcall
option casemap:none
printf proto C :vararg
_putch proto C :dword
_getch proto C
ExitProcess proto :dword
.data
dGroup db 24, 15, 29
Text1 db "Заданная группа чисел: ", 13, 10, 0
Text2 db 13, 10, 10, "Упакованные числа: ", 13, 10, 0
Text3 db 13, 10, 10, "Распакованные числа: ", 13, 10, 0
Form db "%u", 0
.data?
rPack dw ?
rGroup db 3 dup (?)
.code
;Функция упаковки
Pack proc uses edx ecx esi, lpGroup :dword
mov esi, lpGroup
add esi, 2
mov ecx, 3
xor ax, ax
@@:
mov dl, [esi]
shl dx, 11
shr ax, 5
or ax, dx
dec esi
loop @B
ret
Pack endp
;Функция распаковки
UnPack proc uses eax edx ecx edi, Data: word, lpGroup :dword
mov edi, lpGroup
mov ecx, 3
mov dx, Data
@@:
rol dx, 5
mov al, dl
and al, 1Fh
stosb
loop @B
ret
UnPack endp
WriteDec proc uses eax ecx, Number: byte
movzx eax, Number
invoke printf, addr Form, eax
ret
WriteDec endp
WriteBin proc uses eax ecx edx edi, Number :word
local Buff[17] :byte
mov dx, Number
mov ecx, 16
lea edi, Buff
@@:
rcl dx, 1
setc al
or al, 30h
stosb
loop @B
xor al, al
stosb
invoke printf, addr Buff
ret
WriteBin endp
WriteGroup proc uses eax ecx edx esi, lpGroup :dword
mov esi, lpGroup
mov ecx, 3
jmp WG1
@@:
push ecx
invoke _putch, ','
pop ecx
WG1:
invoke WriteDec, byte ptr [esi]
inc esi
loop @B
ret
WriteGroup endp
N94900008:
invoke printf, addr Text1
invoke WriteGroup, addr dGroup
invoke Pack, addr dGroup
mov rPack, ax
invoke printf, addr Text2
invoke WriteBin, rPack
invoke UnPack, rPack, addr rGroup
invoke printf, addr Text3
invoke WriteGroup, addr rGroup
invoke _getch
invoke ExitProcess, 0
end N94900008

.model flat
option casemap:none
data1 segment
src DB "Test STRING To Copy"
len EQU $-src
data1 ends
data2 segment public
dst DB len+1 DUP('+')
data2 ends
code segment
_seg_ex proc
assume CS:FLAT,DS:FLAT, SS:FLAT, ES:FLAT, FS:ERROR, GS:ERROR
mov ESI, offset data1
mov EDI, offset data2
cld
mov CX, len
rep movsb
mov EAX, offset data2
ret
_seg_ex endp
code ends
end
option casemap:none
data1 segment
src DB "Test STRING To Copy"
len EQU $-src
data1 ends
data2 segment public
dst DB len+1 DUP('+')
data2 ends
code segment
_seg_ex proc
assume CS:FLAT,DS:FLAT, SS:FLAT, ES:FLAT, FS:ERROR, GS:ERROR
mov ESI, offset data1
mov EDI, offset data2
cld
mov CX, len
rep movsb
mov EAX, offset data2
ret
_seg_ex endp
code ends
end
на каком языке ?
Похожие вопросы
- Нужно создать программу в Pascal ABC.NET
- Вот мне интересно, с помощью какой программы - можно создать ПРОГРАММУ? :D
- Помогите пожалуйста создать программу на Паскале. Заранее всем благодарен
- Помогите пожалуйста создать программу "Таймер" на СИ. Заранее всем благодарен!)
- какую выб хотели создать программу
- Как создать программу на языке c++
- Помогите создать программу в с++
- Как создать программу, зная язык программирования?
- СОЗДАТЬ программу ТЕСТ через Visual Basic
- Нужно очень срочно создать программу. На языке c ++