Fill:
mov mas[si], al
add si, 1
inint ax
cmp ax, 0
jnl positiveIn
not ax
add ax, 1
cmp si, N
jne Fill
positiveIn:
cmp si, N
jne Fill
mov si, 0
Print:
mov al, mas[si]
cmp ax, ax
jns positiveOut ;;;;
sub ax, 1
not ax
outch '-'
outint ax
outch ' '
add si, 1
cmp si, N
jne Print
positiveOut:
outint ax
outch ' '
add si, 1
cmp si, N
jne Print
возможно, я неправильно использую sf флаг?
mov al, mas[si] cmp ax, ax jns positiveOut ;;;;
cmp ax, ax
сравнивает ax с самим собой, результат немного предсказуем: они равны, т.е. sf = 0, zf = 1. Чтобы узнать знак числа нужно либо сравнивать его с нулём, либо использовать вместо cmp
логическую операцию -- test
, or
или and
.mov al, mas[si]
загружает из памяти только al, в ah остаётся мусор от предыдущих операций. По-нормальному после mov нужно сделать знаковое расширение al в ax, если собираешься дальше работать с ax, например так:mov al, mas[si]
cbw
sub ax, 1 not ax
neg ax
?