|
Ассемблер в примерах - Массив целых чисел
- Вопрос:
- Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести номер первого элемента, нарушающего закономерность.
- Ответ:
-
Пишу простейший вариант:
1) массив байт
2) проверяю одинаковость знаков с помощью знакового умножения IMUL
.model tiny
.code
org 100h
start:
mov ax, 3
int 10h
lea si, a
xor bh, bh ; флаг знака произведения
mov cx,N
mov dx, 1 ; Место
dec cx
@@next:
mov al, [si]
mov bl, [si+1]
imul bl
or ax, ax
jns @@wrong
inc si
inc dx
loop @@next
jmp @@out
@@wrong:
inc bh
@@out:
xor ax, ax
or bh, bh
jz @@3
mov ax, dx
@@3:
CALL writeDEC
lea dx, PressKey
mov ah,9
int 21h
xor ax, ax
int 16h
int 20h
a db -1,3,-2,-3,-5,1,-9
N equ $ - a
writeDEC proc
; Ожидает слово в AX
push ax
push bx
push cx
push dx
xor cx, cx
mov bx, 10
@@1:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz @@1
@@2:
pop ax
add al, '0'
int 29h
loop @@2
pop dx
pop cx
pop bx
pop ax
ret
writeDEC endp
PressKey db 13,10,'Press any key ...$'
end start
| |