дано: 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.
.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.
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
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
Похожие вопросы
- Люди, которые хоть немного разбираются в ассемблере, помогите написать программу)
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- помогите написать программы в ассемблере
- срочно помогите написать программу на ассемблере вычисляющую R. R=x2+y2, где x=a+b-c, y=b*c-a. a,b,c вводятся с клавы
- помогите написать программу любой игры в ассемблере с блок-схемой. спасибо
- Помогите написать программу на ассемблере по условию
- Помогите написать программу на Ассемблере
- Помогите написать программу со switch в СИ
- Помогите написать программу на С. Тема Составление программ с использованием массивов
- Помогите написать программу выключения компьютера на С++