Другие языки программирования и технологии

Ассемблер помогите написать программу..

дано: A DB 100 Dup(?)
увеличить на 1 все четные элементы массива
спасибо за помощь заранее
.model small, stdcall
.stack 100h

rdtsc macro
    db 0Fh, 31h
endm

Len equ 100

.data
Message1 db "Дан массив A:", 13, 10, 36
Message2 db 13, 10, 10, "Преобразованный массив: ", 13, 10, 36
Message3 db 13, 10, 10, "Для завершения работы нажмите любую клавишу... $"

.data?
Seek dd ?
A db Len dup (?)

.code
.586
N167655128:
    mov bp, @data
    mov ds, bp
    mov es, bp
    rdtsc
    mov Seek, eax
    lea dx, Message1
    mov ah, 9
    int 21h

    mov cx, Len
    lea di, A
CreateArray:
    mov eax, Seek
    imul eax, eax, 08088405h
    inc eax
    mov Seek, eax
    stosb
    loop CreateArray
    call WriteArray, offset A, Len

;Обработка массива в соответствии с заданием
    mov cx, Len
    lea si, A
Process:
    lodsb
    not al
    and al, 1
    add [si-1], al
    loop Process
;Массив преобразован

    lea dx, Message2
    mov ah, 9
    int 21h
    call WriteArray, offset A, Len

    lea dx, Message3
    mov ah, 9
    int 21h
    mov ax, 0C08h
    int 21h
    mov ax, 4C00h
    int 21h

WriteArray proc uses cx ax si, Array :word, ArrayLen :word
    mov si, Array
    mov cx, ArrayLen
WriteArrayLoop:
    lodsb
    call WriteInt, ax
    loop WriteArrayLoop
    ret
WriteArray endp

WriteInt proc uses bx di ds, Number :byte
    local Buff :dword
    mov dword ptr Buff, 24202020h
    mov ax, ss
    mov ds, ax
    mov al, 20h
    int 29h
    mov bl, 10
    lea di, Buff+2
    movzx ax, Number
WriteIntPrep:
    div bl
    or ah, 30h
    mov [di], ah
    dec di
    xor ah, ah
    test al, al
    jnz WriteIntPrep
    lea dx, Buff
    mov ah, 9
    int 21h
    ret
WriteInt endp

    end N167655128



И всё. Никаких div и cmp с нулём.
P.S. Ассемблер TASM.
АС
Антон Стогнев
51 590
Лучший ответ
lea si, A
mov cx, 100

doloop:
mov ax, [si]
div 2
cmp al, 0
jne skip
mov ax, [si]
inc ax
mov [si], ax
skip:
inc si
loop doloop