Ex 4

 avatar
unknown
assembly_x86
2 years ago
1.9 kB
3
Indexable
bits 32 ; assembling for the 32 bits architecture

; declare the EntryPoint (a label defining the very first instruction of the program)
global start        

; declare external functions needed by our program
extern exit,printf               ; tell nasm that exit exists even if we won't be defining it
import exit msvcrt.dll
import printf msvcrt.dll

; our data is declared here (the variables needed by our program)
segment data use32 class=data
sir dd 1234A678h,12785634h,1A4D3C2Bh
len_sir equ ($-sir)/4
sir2 times len_sir dw 0
cnt dd 0
format_afisare db '%d',0
; our code starts here
segment code use32 class=code
    start:
        ;fiecare word din sir2 trebuie sa fie concatenarea octetului high din cuvantul high, si octetul high din cuvantul low
        mov ecx,len_sir
        mov esi,sir
        mov edi,sir2
        repeta:
                ;mov byte[edi+0],byte[esi+2]
                ;[esi+1] adresa byte-ului high al cuvantului low
                mov al,byte[esi+1]
                mov byte[edi+0],al
                ;mov byte[edi+1],byte[esi+3]
                ;[esi+3] adresa byte-ului high din cuvantul high
                mov al,byte[esi+3]
                mov byte[edi+1],al
                add esi,4
                add edi,2
        loop repeta
        mov ecx,len_sir*2
        mov esi,sir2
        
        repeta2:
            mov al,byte[esi]
            inc esi
            cmp al,0
            mov ebx,8
            je final_cat_timp
                cat_timp:
                shl al,1
                adc dword[cnt],0
                
                dec ebx
                cmp ebx,0
                jne cat_timp
            final_cat_timp:
        loop repeta2
        ;printf(format_afisare,cnt)
        push dword [cnt]
        push dword format_afisare
        call [printf]
        add esp,4*2
        push    dword 0
        call    [exit]
Editor is loading...