Другой способ выполнения задания - использовать аналитическую функцию MAX () в предложении OVER PARTITION
SELECT t.*
FROM
(
SELECT id
,rev
,contents
,MAX(rev) OVER (PARTITION BY id) as max_rev
FROM YourTable
) t
WHERE t.rev = t.max_rev
. Другое решение OVER PARTITION, уже зарегистрированное в этом сообщении, -
SELECT t.*
FROM
(
SELECT id
,rev
,contents
,ROW_NUMBER() OVER (PARTITION BY id ORDER BY rev DESC) rank
FROM YourTable
) t
WHERE t.rank = 1
Этот 2 SELECT хорошо работает на Oracle 10g.
Ну, укажите начало массива с esi и end с edi, загрузите два. Элементы (?), поменяйте их, затем измените esi и edi соответственно и повторите до тех пор, пока .... подсказка: вы не нужно поменять что угодно, поскольку вы находитесь в сборке = P
A pro будет использовать специальные строковые инструкции и регистры источника и адресата; но это, вероятно, будет похоже на то, что вы обманули свою домашнюю работу.
Ниже перечислены основные memonics, которые вы можете использовать для достижения своей цели:
Метка устанавливается добавлением двоеточия ":" как label:
Я не очень хорош в сборке, поэтому может быть лучший ответ (этот работает).
TITLE Reversing an array without using oneother array
INCLUDE Irvine32.inc
.data
array1 DWORD 10d,20d,30d,40d,50d,60d,70d,80d,90d
.code
main PROC
mov ESI, OFFSET array1 ;ESI now points to the first item of array1
mov EDI, SIZEOF array1
add EDI, OFFSET array1
sub EDI, TYPE array1 ;EDI now points to the last item of array1
mov ECX, LENGTHOF array1
shr ECX, 1 ;now ecx is half the length of the array1
L1: mov EAX, [ESI] ;in this loop we reverse the items of the array
mov EBX, [EDI]
mov [EDI],EAX
mov [ESI],EBX
add ESI, TYPE array1
sub EDI, TYPE array1
LOOP L1
mov ECX, LENGTHOF array1;here we just print the array
mov ESI, OFFSET array1
L2: MOV EAX, [ESI]
call WriteInt
call Crlf
add ESI, TYPE array1
LOOP L2
exit
main ENDP
END main