Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: ZaHack
Дата сообщения: 22.01.2007 20:24
ushankin
Что такое "код четности"? Это, четный он или нечетный, я так понимаю?
Автор: ushankin
Дата сообщения: 23.01.2007 21:15
четное/не четное кол-во 0 или 1 в массиве

ps решение найдено
Автор: TaHIOIIIkA
Дата сообщения: 29.01.2007 20:12
помогите пожалуйста исправить ошибку. У меня идёт проверка на то, что бы были сброшены и/или 4, 6 биты. А нуно строго оба. Вроде внятно изложила...

Дан массив из 10 байт. Посчитать
количество байт, в которых сброшены 6 и 4
биты.

data segment
K db ?                    ; количество байт, в которых сброшены 6 и 4 биты
NB db 04h, 07h, 14h, 23h, 04h,38h,
3Fh, 2Ah,0Dh, 34h
data ends
code segment
assume cs: code, ds:data
START:        mov     ax, data
        mov     ds, ax         
        lea     bx, NB         
        mov     cx, 10         
        xor    ax, ax        
BEG:        mov     al, [bx]    
        test     al, 1010000b     
        jnz     NEXT         
        inc     ah        
NEXT:        inc     bx         
        loop     BEG        
        mov     K, ah        
QUIT:        mov     ax, 4c00h    
        Int     21h         
code        ends
end         START
Автор: Lyrik
Дата сообщения: 29.01.2007 20:30
Тебе нужно посчитать количество элементов в массиве, у которых сброшены сразу оба бита?
Если да, то у тебя праивльный алгоритм. По крайней мере я ошибок не увидел %)
Автор: rain87
Дата сообщения: 29.01.2007 21:10
TaHIOIIIkA
в чём проблема? если 4й и 6й биты =0, то ah инкрементируется
как я понимаю, именно это и надо?
Автор: TaHIOIIIkA
Дата сообщения: 01.02.2007 10:08
Lyrik,rain87

ИМХО моего препода,что если сброшен толь один из битов, то осущиствится переход на "next", что неверно. А нужно строго оба. Ээээ, что есть инкрементируется?
Автор: rain87
Дата сообщения: 01.02.2007 12:37
TaHIOIIIkA
Цитата:
Ээээ, что есть инкрементируется?
увеличивается на 1 (команда inc)
Цитата:
ИМХО моего препода,что если сброшен толь один из битов, то осущиствится переход на "next"
твоё задание:
Цитата:
Дан массив из 10 байт. Посчитать   количество байт, в которых сброшены 6 и 4 биты.
т.е. если хотя бы 1 бит не сброшен, то да, произойдёт переход на next. а как надо?
Автор: koderr
Дата сообщения: 01.02.2007 14:59
Что-то я на ассемблере под Windows вообще не вижу задачек Если таковые будут, стучите мне в аську
Автор: rain87
Дата сообщения: 01.02.2007 20:28
koderr
да вряд ли такие будут. ибо лабы задают преподы в универе (а сюда люди ходят только с лабами), а поскольку преподам влом учить что-то новое, задают они исключительно то, что сами более менее знают. т.е. старый добрый ДОС
может я несправедлив, и не все преподы такие. надеюсь на это
Автор: Lyrik
Дата сообщения: 01.02.2007 21:50
rain87
Не все! У меня есть нормальные, мы конспекты пишем по дизасменым листингам. Они нам говорят, это не документировано, а получено дизасмом, так что может быть и не так
koderr rain87
А что Вы хотели? Что бы тут задавали вопросы о проблемах хука или перехода в ринг0? Для этого есть специальные форумы, и все мы знаем какие
Автор: TaHIOIIIkA
Дата сообщения: 02.02.2007 20:33
rain87

я тож так думала =)
Оказалось, что нужно, что бы переход осуществлялся только если в байте сброшены оба бита, и 6, и 4. А полусброшенные, в которых сброшены токо 6, или токо 4, нам не интересны, и как следствие, не учитываются =).
Автор: rain87
Дата сообщения: 02.02.2007 20:39
TaHIOIIIkA
переход - это и означает, что мы его не учитываем - мы ж переходим через inc ah, т.е. именно учитывалку в общем судя по всему сдала - и флаг с ним
Автор: Qraizer
Дата сообщения: 03.02.2007 17:25
Lyrik
Цитата:
Что бы тут задавали вопросы о проблемах хука или перехода в ринг0? Для этого есть специальные форумы, и все мы знаем какие
А можно парочку урлов?
Автор: koderr
Дата сообщения: 17.02.2007 19:40
Qraizer
\/\/ASM.RU
Автор: DjBoom
Дата сообщения: 20.02.2007 22:43
если не тяжело напишите плиз. простенкую прогу на ассеблере.
Прога должна формировать конструкцию (запись, паскале рекорд) с названием STRAC.
которая хранит данные о студенте с 10 полями.
Автор: rain87
Дата сообщения: 21.02.2007 16:12
DjBoom
почитай и попробуй сказать ещё раз, что тебе надо
Автор: DjBoom
Дата сообщения: 21.02.2007 22:34
Тю страно, я вроде все понятно написал.
Ну вод я пишу на паскале код програмы , мне надо этаже тока на асемблере.

Код:
program запись;
Type STRAC = record
    Pole_1: String;
    Pole_2: String;
    Pole_3: integer;
    Pole_4: string;
    Pole_5: String;
    Pole_6: String;
    Pole_7: String;
    Pole_8: String;
    Pole_9: String;
    Pole_10: String;
End;
var
student: array[1..20] of STRAC;
i:integer;
begin
for i:=1 to 20 do
begin
Write('Pole_1: ');
Readln(student[i].Pole_1);
........................................

Write('Pole_10: ');
Readln(student[i].Pole_10);
end;
for i:=1 to 20 do
begin
Writeln('Pole_1: ',student[i].Pole_1);
.......................................................

Writeln('Pole_10: ',student[i].Pole_10);
end;
end.
Автор: rain87
Дата сообщения: 21.02.2007 23:01
DjBoom
надо этот пасовский код перевести на асм?
Автор: DjBoom
Дата сообщения: 22.02.2007 06:50
да
Автор: rain87
Дата сообщения: 22.02.2007 17:26
DjBoom
дизассемблируй пасовский код. мне лень писать задача неинтересная совершенно
или задавай вопросы, чё непонятно в асме
Автор: DjBoom
Дата сообщения: 22.02.2007 18:10
жжж. и чем если не сикрет ?
Да может задача и не интресна но мне такую задали.
Вот повторюс вот задание (мож неправильно понимаю)


Цитата:
Разработать программу на ассемблере для работы с конструкции
STRAC которая формирует запись о данных по студенту группы с десятью
различными полями.
.

Просто я так думал в асемблре есть не тока типы переменных как целые, дробные, но такие как запись (паскали record, си - struct).

Автор: rain87
Дата сообщения: 22.02.2007 23:33
DjBoom
ну есть некое подобие записей, но совершенно не такое, как в пасе. вот примерчик кода
Код: extrn console:far,init:near
rh    STRUC
    rh_size        db    ?
    rh_unit        db    ?
    rh_cmd        db    ?
    rh_status    dw    ?
    rh_reserved    db    8 dup (?)
rh    ends
rh4    STRUC
    rh4_rh        db    13 dup (?)
    rh4_media    db    ?
    rh4_bufofs    dw    ?
    rh4_bufseg    dw    ?
    rh4_count    dw    ?
rh4    ends
dseg segment
req db 20 dup(?)
dseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
--skip--
p2:
mov req.rh.rh_size,20
mov req.rh.rh_unit,0
mov req.rh.rh_cmd,4
mov req.rh4.rh4_media,0
mov req.rh4.rh4_bufseg,ds
mov req.rh4.rh4_bufofs,offset buf
mov req.rh4.rh4_count,5
--skip--
cseg ends
end main
Автор: DjBoom
Дата сообщения: 23.02.2007 07:58
Спасиба!
Автор: ushankin
Дата сообщения: 25.02.2007 16:01
Есть программа для проверки данных на четность и записи кода четности в файл.
Кто-нибудь может написать подробное объяснение к подпрограмме Check, а то я не очень понимаю как осуществляется проверка.
[MORE]

Код: p386
ideal
model tiny


dataseg
key db ? ; код четности: 0 - четное кол. бит в массиве
1 - нечетное
file db 'bits.key',0 ; имя файла для сохранения ключа
war db 'WARNING! Check error!',13,10,'$'

; массив для тестирования
testdata:
db 1,2,13,2,3,23,8,5,4,2
testsize = $-testdata


codeseg
org 100h
start:
mov cx,testsize
lea si,[testdata]
call Check ; получаем код четности

cmp [key],bl
je savetofile
lea dx,[war]
mov ah,9
int 21h
savetofile:
mov [key],bl
call Save
retn ; выход в дос


; на входе:
; ds:[si] - массив
; cx - размер массива
; на выходе:
; bl - код четности
proc Check
xor bx,bx
__loop:
lodsb
mov di,8
__inloop:
shr al,1
adc bl,0 ; нас интересует младшая часть
dec di ; от общего количества установленных битов
jnz __inloop
loop __loop
and bl,1
ret
endp

; сохраняет значение Key в файл file
proc Save
mov ah,3ch ; создаем файл
xor cx,cx
lea dx,[file]
int 21h
jc __quit
mov bx,ax
mov ah,40h ; записываем
mov cx,1 ; один байт
lea dx,[key]
int 21h
mov ah,3eh ; закрываем файл
int 21h
__quit:
ret
endp

end start
Автор: Lyrik
Дата сообщения: 25.02.2007 21:25
ushankin
а что конкретно непонятно в процедуре Check?

Код: ; на входе:
; ds:[si] - массив
; cx - размер массива
; на выходе:
; bl - код четности
proc Check
xor bx,bx
__loop:
lodsb ; ax = testdata[0]
mov di,8 ; кол-во бит в байте
__inloop:
shr al,1 ; получить младший бит в регистр CF
adc bl,0 ; сложить bl+CF+0
dec di ; цикл по битам
jnz __inloop
loop __loop ; цикл по массиву
and bl,1 ; сброс всех битов, кроме последнего (младшего)
ret
endp
Автор: faZZ
Дата сообщения: 26.02.2007 15:02
народ, помогите начинающему. как сделать вывод массива на экран в нормальном виде? т.е. чтоб отрицательные выводились и т.д. а то нашел только как в ASCII кодах вывести, но там от 0 до 9 только
Автор: rain87
Дата сообщения: 26.02.2007 17:33
faZZ
вот готовое творение
Код: writeax proc near
mov bl,0
or ax,ax
jns nonsign
mov bl,1
neg ax
nonsign:
lea si,result
add si,5
mov result[6],'$'
mov di,10
adiv:
mov dx,0
div di
add dx,48
mov [si],dl
dec si
cmp ax,0
jne adiv
mov byte ptr[si],'-'
cmp bl,1
je qwer
inc si
qwer:
mov dx,si
mov ah,9
int 21h
ret
writeax endp
Автор: Novopolotsk
Дата сообщения: 10.03.2007 15:15
Помогите пожалуйста написать программу удаления во всех строках текста слов,содержащих заданный набор букв.
Автор: Lyrik
Дата сообщения: 11.03.2007 15:35
Novopolotsk
Вот кое-что набросал, тестить не было времени, а также не было времени написать процедуру del_str, которая должна удалять слово.
[more]
Код: dseg segment
    strSrc db 'dsfa dfeagbedfc 9489dgj fk[q2tb hello world push',00h
    uLen1 dw $-strSrc-1
    strSub db 'abcde',00h
    uLen2 dw $-strSub-1
    uCount dw 0
dseg ends
cseg segment
    assume cs:cseg, ds:dseg
start:
    mov ax, dseg
    mov ds, ax
    mov es, ax
    xor bx, bx
    xor ax, ax
    ;================
    ;===first step===
@main_loop:
    mov uCount, 0
    lea si, strSrc
    cmp byte ptr si[bx-1], 00h
    jz @main_loop_end
    call find_word
    push bx
    push ax
    ;===second step===
    mov cx, ax
    inc cx
    mov di, si
    add di, bx
    xor si, si
    lea bx, strSub
@main_find_sym:
    push cx
    push di
    mov al, bx[si]
    repnz scasb
    jcxz @main_no_del
    inc uCount
    inc si
    cmp si, uLen2
    jnz @main_second_loop
    ;===third step====
    cmp si, uCount
    jnz @main_no_del
    ;===should be delete
    pop di
    pop cx
    ; call del_str
    jmp short @main_del
@main_second_loop:
    pop di
    pop cx
    jmp short @main_find_sym
@main_no_del:
    pop di
    pop cx
@main_del:
    pop ax
    inc ax
    pop bx
    add bx, ax
    jmp short @main_loop
@main_loop_end:
    mov ax, 4c00h
    int 21h
; Find word in string
; IN: ds:si
;     offset to ASCIIZ string
; bx
;     offset from the begining in string
; OUT: ax
;     length of word
find_word proc near
    push bx dx
    mov ax, bx
@find_word_loop:
    mov dl, si[bx]
    inc bx
    test dl, dl
    jz @find_word_end
    cmp dl, ' '
    jnz @find_word_loop
@find_word_end:
    sub bx, ax
    mov ax, bx
    dec ax
    pop dx bx
    retn
find_word endp
cseg ends
end start
Автор: labtec2
Дата сообщения: 27.03.2007 16:11
Дан текст, являющийся русскими словами. Выполнить разделение каждого его слова на части для переноса.
Далее правила переноса русских слов.
a) Две идущие подряд гласные можно разделить, если первой из них предшествует согласная, а за второй идет хотя бы одна буква (буква й при этом рассматривается вместе с предшествующей гласной как единое целое).
b) Две идущие подряд согласные можно разделить, если первой из них предшествует гласная, а в той части слова, которая идет за второй согласной, имеется хотя бы одна гласная (буквы ъ, ь вместе с предшествующей согласной рассматриваются как единое целое).
c) Если не удается применить пункты a, b, то следует попытаться разбить слова так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную. Вероятность правильного разбиения увеличивается, если предварительно воспользоваться хотя бы неполным списком приставок, содержащих гласные, и попытаться, прежде всего, выделить из слова такую приставку.

Помогите, пожалуйста

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.