Aktív témák
-
P.H.
senior tag
a feladat szövege alapján tényleg könnyebb lenne, de:
// -32
MOV( 4, CL );
while( CL != 0 ) do
BT(31, EAX);
RCR(1, EAX);
DEC( CL );
endwhile;
kód megegyezik a SAR EAX,CL = SAR EAX,04 utasítás hatásával, ami EAX-et előjelhelyesen elosztja 16-tal. De felette a kommentben -32 van, nem MOV(5,CL)-nek kellene ott lennie
POP(EBX); // ######## x érték visszatöltve
MOV( b, ECX );
XOR( ECX, EBX );
itt mi volt a szándék?
MOV(32, CL);
SUB(EDX, EDX);
while (CL != 0) do
SHR(1, EBX);
RCL(1, EDX);
DEC(CL);
endwhile;
ez EDX-be teszi az EBX értékét fordított bitsorrendben (ami EBX-ben a legkisebb helyiértékű bit volt, az EDX-ben a legnagyobb helyiértékű lesz). Ez volt a szándék?
Legközelebb csak holnap este tudok visszanézni. -
P.H.
senior tag
egyszerűbb, hogy mi nem hiba. No lássuk (ha nem baj, átírom az eredeti op dest,src formára).
push ebx // EBX mentése, ok
mov eax,v1 // EAX -> V1, ok
mov ebx,[eax] // EBX <- alsó szó
if (ebx < 0) then //
az előjelet a felső szó [eax+04h] hordozza
mov edx,[ebx] //
az EAX mutat a V1-re, nem EBX
mov eax,[ebx+04h] //
szintén
neg edx //
ezt így nem lehet: neg(x) = not(x)+1,
neg eax //
not-olni lehet a tagokat külön, de átvitel van +1 miatt és csak az alsó szóhoz kell 1-et adni, a felsőhöz csak az átvitelt
else
mov ebx,v1 // EBX -> V1, ok
mov edx,[ebx] //
EDX-be a felső szó kell, [ebx+04h]
mov eax,[ebx+04h] //
így EAX-be kell az alsó, [ebx+00h]
pop ebx // EBX helyreállítása, ok
[Szerkesztve] -
P.H.
senior tag
Milyen nyelv lenne ez? Bocs, nem ismerem fel.
function osszead4(var v1:int64; var v2:int64): int64; // ez így lenne Pascalban, Delphiben
begin
asm
pushad
mov esi,[V1]
mov edi,[V2]
lea ebx,[RESULT] // vagy lea ebx,[R]
mov eax,[esi+00h]
mov edx,[esi+04h]
add eax,[edi+00h]
adc edx,[edi+04h]
mov [ebx+00h],eax
mov [ebx+04h],edx
popad end; end;
A harmadikat is tedd be, ha ordas a hiba, szembeötlő lesz. -
P.H.
senior tag
Az assembly elég típustalan, de nem ennyire. Kicsit több infó kellene, változó típusa, milyen fordítónak (inline vagy fordítós) kell, azt gondolom, hogy x86 kell:
1-re a lényeg:
-- asm
mov eax,[x]
test eax,eax
jns @abs
neg eax
@abs:
mov [x],eax end;
-- asm
mov eax,[x]
cdq
xor eax,edx
sub eax,edx
mov [x],eax end;
2. elég blőd így, gondolom, nem a mov eax,[x]; add eax,[y]; mov [z],eax; -ra gondolsz. kicsit írd körül.
3. ?
[mod]: kódszerűség
[Szerkesztve]
Aktív témák
- Lenovo ThinkPad L13 Gen 3 13,3" - i5 1235U, 16GB RAM, SSD, jó akku, magyar bill. - számla, 6 hó gar
- Sosemhasznált! HP OmniBook 5 i3-1315U 8GB 1TB 16" FHD+ Gar.: 1 év
- ÚJ MSI Katana 15 HX - 15.6" QHD 165Hz - i7-14650HX - 16GB - 1TB - RTX 5060 - Win11 - 3 év gari - HUN
- Bomba ár! Dell Latitude E7240 - i5-4GEN I 8GB I 128SSD I 12,5" HD I HDMI I W10 I Garancia!
- Beszámítás! Asus VZ239HE-W White 75Hz FHD IPS 5ms monitor garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

az előjelet a felső szó [eax+04h] hordozza